https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108498
--- Comment #1 from Adam Stylinski <kungfujesus06 at gmail dot com> --- I also should note this affects GCC 11.3, as well. The code being generated via this optimization, while marginally shorter, seems to be rather suboptimal in general. Here's what clang's emitting for the same sequence: 0000000000000930 <.emit_test>: 930: 3c a0 02 00 lis r5,512 934: 38 80 00 01 li r4,1 938: 88 e3 00 08 lbz r7,8(r3) 93c: 60 a5 ff 03 ori r5,r5,65283 940: 38 c0 02 01 li r6,513 944: f8 83 00 0c std r4,12(r3) 948: 38 80 00 02 li r4,2 94c: 78 a5 01 8a rldic r5,r5,32,6 950: f8 83 00 14 std r4,20(r3) 954: 38 80 00 00 li r4,0 958: 78 c6 d0 02 rotldi r6,r6,58 95c: 64 a5 00 01 oris r5,r5,1 960: f8 83 00 34 std r4,52(r3) 964: 38 80 00 1c li r4,28 968: 60 a5 02 03 ori r5,r5,515 96c: f8 c3 00 24 std r6,36(r3) 970: 54 e6 07 fe clrlwi r6,r7,31 974: 50 c4 07 b4 rlwimi r4,r6,0,30,26 978: f8 a3 00 00 std r5,0(r3) 97c: 3c a0 00 01 lis r5,1 980: 98 83 00 08 stb r4,8(r3) 984: 60 a4 02 03 ori r4,r5,515 988: 78 84 c5 c8 rldic r4,r4,24,23 98c: f8 83 00 3c std r4,60(r3) 990: 4e 80 00 20 blr This bug is affecting the mesa project, so at least fixing this to emitting correct code (if a little suboptimal) would go a long way.