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.

Reply via email to