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.