http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54602
Bug #: 54602
Summary: [SH] Register pop insn not put in rts delay slot
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: target
AssignedTo: [email protected]
ReportedBy: [email protected]
Target: sh*-*-*
The following case:
int test01 (int a, int b);
int test00 (int a, int b, int c, int d)
{
return test01 (a, b) + c;
}
Compiled with -O2 -m2:
mov.l .L3,r0 ! 9 movsi_i/1 [length = 2]
mov.l r8,@-r15 ! 26 movsi_i/7 [length = 2]
sts.l pr,@-r15 ! 27 movsi_i/9 [length = 2]
jsr @r0 ! 12 call_valuei [length = 2]
mov r6,r8 ! 4 movsi_i/2 [length = 2]
add r8,r0 ! 14 *addsi3_compact [length = 2]
lds.l @r15+,pr ! 33 *movsi_pop/3 [length = 2]
mov.l @r15+,r8 ! 34 *movsi_pop/1 [length = 2]
rts
nop ! 36 *return_i [length = 4]
Compiled with -O2 -m2a:
mov.l .L3,r0 ! 9 movsi_ie/1 [length = 2]
mov.l r8,@-r15 ! 30 movsi_ie/9 [length = 4]
sts.l pr,@-r15 ! 31 movsi_ie/11 [length = 2]
jsr @r0 ! 12 call_valuei [length = 2]
mov r6,r8 ! 4 movsi_ie/2 [length = 2]
add r8,r0 ! 14 *addsi3_compact [length = 2]
lds.l @r15+,pr ! 37 *movsi_pop/3 [length = 2]
mov.l @r15+,r8 ! 38 *movsi_pop/1 [length = 2]
rts/n ! 40 *return_i [length = 4]
The pop insn of r8 is not placed in the delay slot of rts without any obvious
reason. This happens only for -m1 and -m2*.