https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102239
--- Comment #7 from luoxhu at gcc dot gnu.org --- 1| Dump of assembler code for function foo: 2| 0x00000000100005e0 <+0>: rldicr. r3,r3,29,1 3+> 0x00000000100005e4 <+4>: beq 0x100005f0 <foo+16> 4| 0x00000000100005e8 <+8>: blr 5| 0x00000000100005ec <+12>: ori r2,r2,0 6| 0x00000000100005f0 <+16>: blr 7| 0x00000000100005f4 <+20>: .long 0x0 8| 0x00000000100005f8 <+24>: .long 0x0 (gdb) si 0x00000000100005e4 in foo () 1: /x $r3 = 0xc000000000000000 2: /x $cr = 0x82000282 cr0 is negative if only rotldi3_mask_dot, but it was 0x42000282 on master code. BTW, clang also generated instructions with two rorates: foo(long): # @foo(long) rldicl 3, 3, 31, 33 rldicl. 3, 3, 33, 29 beq 0, .LBB0_2 blr .LBB0_2: blr .long 0 .quad 0