This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/55212] [SH] Switch from IRA to LRA


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212

--- Comment #31 from Kazumoto Kojima <kkojima at gcc dot gnu.org> ---
Created attachment 33556
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33556&action=edit
A bit reduced test case of pr38338.c (-O0 -m4 -ml)

That case has only one basic block which looks like

    (prologue)
    (Save r4-r7,fr4-fr11,...)
  ;; Save argument
    mov.b    r0,@(8,r1)    ! 4    *movqi_store_mem_disp04/1
  ;; insns don't use r0
    ...
  ;; untyped_call
    mov.l    .L3,r1
    jsr    @r1
    nop    ! 97    calli
    mov.l    r0,@(56,r9)    ! 98    movsi_ie/9
    flds    fr0,fpul    ! 197    movsi_ie/22
    sts    fpul,r1    ! 198    movsi_ie/20
    mov.l    r1,@(60,r8)    ! 99    movsi_ie/9
  ;;
    ...

if RA was done.
It seems that LRA thought that r0 in insn 4 conflicts r0 in insn 98 and
fails at reloading *movqi_store_mem_disp04 which permits only r0 as
the source operand when reg+offset addressing mode is used.  LRA looks
right, because RA doesn't know that r0 is the function return value
register set by function call.
Target could notify it with clobbering function value registers before
call.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]