https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82940
Bug ID: 82940 Summary: Suboptimal code for (a & 0x7f) | (b & 0x80) on powerpc Product: gcc Version: 5.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: christophe.le...@c-s.fr Target Milestone: --- unsigned char g(unsigned char t[], unsigned char v) { return (t[v & 0x7f] & 0x7f) | (v & 0x80); } 00000008 <g>: 8: 54 89 06 7e clrlwi r9,r4,25 c: 7c 63 48 ae lbzx r3,r3,r9 10: 54 84 00 30 rlwinm r4,r4,0,0,24 14: 54 63 06 7e clrlwi r3,r3,25 18: 7c 63 23 78 or r3,r3,r4 1c: 4e 80 00 20 blr I would expect 00000008 <g>: 8: 54 89 06 7e clrlwi r9,r4,25 c: 7c 63 48 ae lbzx r3,r3,r9 10: 54 84 00 30 rlwimi r3,r4,0,24,24 14: 4e 80 00 20 blr