https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91116
Bug ID: 91116 Summary: bad register choices for rs6000 -m32 Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: segher at gcc dot gnu.org Target Milestone: --- In the new testcase pr88233.c, which is typedef struct { double a[2]; } A; A foo (const A *a) { return *a; } we currently get as generated code for -m32 addi 10,4,4 lfiwzx 10,0,4 addi 9,3,12 lfiwzx 11,0,10 addi 10,4,8 lfiwzx 12,0,10 addi 10,4,12 stfiwx 10,0,3 lfiwzx 0,0,10 addi 10,3,4 stfiwx 11,0,10 addi 10,3,8 stfiwx 12,0,10 stfiwx 0,0,9 blr Expand decides to do this as four SImode copies, which isn't such a great idea, of course; but RA thinks it is cost 0 to put a SImode in an FP or altivec register. That won't fly.