https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89954
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So at combine we have: (insn 5 2 6 2 (set (reg:QI 87 [ c ]) (mem/c:QI (symbol_ref:DI ("c") [flags 0x2] <var_decl 0x7fc1a1d62c60 c>) [0 c+0 S1 A8])) "/app/example.cpp":5:14 77 {*movqi_internal} (nil)) (insn 6 5 7 2 (parallel [ (set (reg:QI 86) (xor:QI (reg:QI 87 [ c ]) (const_int 1 [0x1]))) (clobber (reg:CC 17 flags)) ]) "/app/example.cpp":5:14 546 {*xorqi_1} (expr_list:REG_DEAD (reg:QI 87 [ c ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_EQUAL (xor:QI (mem/c:QI (symbol_ref:DI ("c") [flags 0x2] <var_decl 0x7fc1a1d62c60 c>) [0 c+0 S1 A8]) (const_int 1 [0x1])) (nil))))) (insn 7 6 12 2 (set (reg:SI 85) (sign_extend:SI (reg:QI 86))) "/app/example.cpp":5:14 154 {extendqisi2} (expr_list:REG_DEAD (reg:QI 86) (nil))) The load is not loaded into the full SI/DI register yet. The change to SI mode for xor happens after reload in split2. So yes it is a target issue.