This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/55212] [SH] Switch from IRA to LRA
- From: "kkojima at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 25 Sep 2014 02:20:37 +0000
- Subject: [Bug target/55212] [SH] Switch from IRA to LRA
- Auto-submitted: auto-generated
- References: <bug-55212-4 at http dot gcc dot gnu dot org/bugzilla/>
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.