https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84627
Bug ID: 84627
Summary: powerpc excess padding generated for POWER9 target
Product: gcc
Version: 8.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: npiggin at gmail dot com
Target Milestone: ---
gcc version 8.0.1 20180207 (experimental) [trunk revision 257435] (Debian
8-20180207-2):
Test case:
void test(void (*fn)(void), unsigned long i)
{
while (i--)
fn();
}
Generates code with -O2 -mcpu=power9:
2c: 18 00 41 f8 std r2,24(r1)
30: 00 00 00 60 nop
34: 00 00 00 60 nop
38: 00 00 00 60 nop
3c: 00 00 42 60 ori r2,r2,0
40: 78 f3 cc 7f mr r12,r30
44: a6 03 c9 7f mtctr r30
48: ff ff ff 3b addi r31,r31,-1
4c: 21 04 80 4e bctrl
50: 18 00 41 e8 ld r2,24(r1)
54: ff ff bf 2f cmpdi cr7,r31,-1
58: e8 ff 9e 40 bne cr7,40 <test+0x40>
On power9, I wonder if nops and ori should be avoided? Aligning to quad word
boundary is reasonable for fetch, but is there any advantage for dispatch to
add the extra padding?