https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110701
Xi Ruoyao <xry111 at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|c |rtl-optimization --- Comment #1 from Xi Ruoyao <xry111 at gcc dot gnu.org> --- Combine pass seems guilty. Before combine: (insn 21 20 23 2 (parallel [ (set (subreg:HI (reg:DI 92) 0) (and:HI (subreg:HI (reg:DI 92) 0) (const_int 340 [0x154]))) (clobber (reg:CC 17 flags)) ]) "/app/example.c":5:39 596 {*andhi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))) (insn 23 21 24 2 (parallel [ (set (reg:HI 94) (xor:HI (subreg:HI (reg:DI 92) 0) (const_int 3 [0x3]))) (clobber (reg:CC 17 flags)) ]) "/app/example.c":7:23 discrim 1 634 {*xorhi_1} (expr_list:REG_DEAD (reg:DI 92) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) (insn 24 23 25 2 (set (reg:SI 95) (sign_extend:SI (reg:HI 94))) "/app/example.c":7:23 discrim 1 179 {extendhisi2} (expr_list:REG_DEAD (reg:HI 94) (nil))) (insn 25 24 26 2 (set (mem:SI (reg/f:DI 85 [ c.3_6 ]) [3 *c.3_6+0 S4 A32]) (reg:SI 95)) "/app/example.c":7:23 discrim 1 91 {*movsi_internal} (expr_list:REG_DEAD (reg:SI 95) (expr_list:REG_DEAD (reg/f:DI 85 [ c.3_6 ]) (nil)))) This is perfectly legal. After combine: (insn 21 20 23 2 (parallel [ (set (subreg:HI (reg:DI 92) 0) (and:HI (subreg:HI (reg:DI 92) 0) (const_int 340 [0x154]))) (clobber (reg:CC 17 flags)) ]) "/app/example.c":5:39 596 {*andhi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))) (note 23 21 24 2 NOTE_INSN_DELETED) (insn 24 23 25 2 (parallel [ (set (reg:SI 95) (ior:SI (subreg:SI (reg:DI 92) 0) (const_int 3 [0x3]))) (clobber (reg:CC 17 flags)) ]) "/app/example.c":7:23 discrim 1 635 {*iorsi_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_DEAD (reg:DI 92) (nil)))) (insn 25 24 26 2 (set (mem:SI (reg/f:DI 85 [ c.3_6 ]) [3 *c.3_6+0 S4 A32]) (reg:SI 95)) "/app/example.c":7:23 discrim 1 91 {*movsi_internal} (expr_list:REG_DEAD (reg:SI 95) (expr_list:REG_DEAD (reg/f:DI 85 [ c.3_6 ]) (nil)))) The removal of sign_extend seems wrong.