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

Reply via email to