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.