https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65010

            Bug ID: 65010
           Summary: ppc backend generates unnecessary signed extension
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: carrot at google dot com
            Target: powerpc64le

I use ppc gcc to compile following code with option -O2

unsigned long c2l(unsigned char* p)
{
  unsigned long res = *p + *(p+1);
  return res;
}

long c2sl(signed char* p)
{
  long res = *p + *(p+1);
  return res;
}


Trunk gcc generates:

c2l:
    lbz 10,0(3)
    lbz 9,1(3)
    add 3,10,9
    extsw 3,3
    blr


c2sl:
    lbz 9,1(3)
    lbz 10,0(3)
    extsb 9,9
    extsb 3,10
    add 3,3,9
    extsw 3,3
    blr


The extsw instructions in both functions are unnecessary since it can't change
the value in return register.

Reply via email to