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.

Reply via email to