https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108292

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |sayle at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, we have ix86_expand_int_movcc called with operands:
(reg:SI 170)
(ne (reg:SI 86 [ _14 ])
    (const_int 0 [0]))
(const_int 31 [0x1f])
(const_int 0 [0])
and the function emits:
(insn 42 0 43 (set (reg:CC 17 flags)
        (compare:CC (reg:SI 86 [ _14 ])
            (const_int 1 [0x1]))) "pr108292.c":9:5 -1
     (nil))

(insn 43 42 44 (parallel [
            (set (reg:SI 171)
                (if_then_else:SI (ltu:SI (reg:CC 17 flags)
                        (const_int 0 [0]))
                    (const_int -1 [0xffffffffffffffff])
                    (const_int 0 [0])))
            (clobber (reg:CC 17 flags))
        ]) "pr108292.c":9:5 -1
     (expr_list:REG_EQUAL (neg:SI (ne:SI (reg:SI 86 [ _14 ])
                (const_int 0 [0])))
        (nil)))

(insn 44 43 45 (set (reg:SI 172)
        (not:SI (reg:SI 171))) "pr108292.c":9:5 -1
     (nil))

(insn 45 44 46 (parallel [
            (set (reg:SI 173)
                (and:SI (reg:SI 172)
                    (const_int 31 [0x1f])))
            (clobber (reg:CC 17 flags))
        ]) "pr108292.c":9:5 -1
     (nil))

(insn 46 45 0 (set (reg:SI 170)
        (reg:SI 173)) "pr108292.c":9:5 -1
     (nil))
I believe the REG_EQUAL note is incorrect, it would be correct on insn 44,
pseudo 172 is r86 != 0 ? -1 : 0, while pseudo 171 is r86 == 0 ? -1 : 0.

Reply via email to