https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93176
--- Comment #10 from Jens Seifert <jens.seifert at de dot ibm.com> --- Looks like no patch in the area got delivered. I did a small test for unsigned long long c0000FFFF00000000() { return 0x0000FFFF00000000ULL; } gcc 13.2.0: li 3,0 ori 3,3,0xffff sldi 3,3,32 expected: li 3, -1 rldic 3, 3, 32, 16 All consecutive ones can be created with li + rldic. The rotate eliminates the bits on the right and the clear the bits on the left as described below: li t,-1 rldic d,T,MB,63-ME