https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70903
--- Comment #3 from ktkachov at gcc dot gnu.org --- Although, that seems to be exposing something else that's fishy, looking at the combine dumps I see it combining: (insn 19 42 20 2 (set (subreg:DI (reg:QI 94) 0) (const_int 255 [0xff])) bfi.c:7 50 {*movdi_aarch64} (nil)) (insn 20 19 21 2 (set (reg:DI 95) (subreg:DI (reg:QI 94) 0)) bfi.c:7 50 {*movdi_aarch64} (expr_list:REG_DEAD (reg:QI 94) (expr_list:REG_EQUAL (const_int 255 [0xff]) (nil)))) into: (insn 20 19 21 2 (set (reg:DI 95) (const_int -1 [0xffffffffffffffff])) bfi.c:7 50 {*movdi_aarch64} (expr_list:REG_EQUAL (const_int 255 [0xff]) (nil))) That's where the -1 comes from. Need to see why the reg94 := 255 was represented that way (with a subreg)