[Bug target/55212] [SH] Switch from IRA to LRA
kkojima at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Sep 25 02:20:00 GMT 2014
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.
More information about the Gcc-bugs
mailing list