https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126503
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (gdb) x/8gx &u 0x420030 <u>: 0x0000000000000001 0x0000000000000000 0x420040 <u+16>: 0x0000000000000000 0x0000000000000000 0x420050 <u+32>: 0xffffffffffffffff 0xffffffffffffffff 0x420060 <u+48>: 0x000000000000ffff 0x0000000000000000 (gdb) x/6gx &v 0x420070 <v>: 0xfffffffffffffffc 0xffffffffffffffff 0x420080 <v+16>: 0xffffffffffffffff 0xffffffffffffffff 0x420090 <v+32>: 0x0000000000000000 0x0000000000000000 (gdb) x/4gx &w 0x4200a0 <w>: 0x000000000000004c 0x0000000000000000 0x4200b0 <w+16>: 0xffffffffffffffff 0x0000000000000000 where unsigned _BitInt(400) u; unsigned _BitInt(300) v; _BitInt(129) w; and u = foo (-1wb); v = bar (1wb, 3uwb); w = baz (100); so, the first one has unwanted 1 bits in upper 144 bits, low 256 bits correct, the second one unwanted 0 bits in upper 44 bits, low 256 bits correct, and finally the last one incorrect 1 bit in the most significant bit. Doesn't mean it has to be a RTL issue, could be bitint lowering too, let me check.
