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

--- Comment #5 from Uroš Bizjak <ubizjak at gmail dot com> ---
Created attachment 56567
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56567&action=edit
Proposed patch

Nope, even with the above patch the compiler ICEs at the same place:

0x1956968 ix86_cc_mode(rtx_code, rtx_def*, rtx_def*)
        ../../git/gcc/gcc/config/i386/i386.cc:16508
0x286a3a9 try_combine
        ../../git/gcc/gcc/combine.cc:3207
0x2864cbf combine_instructions
        ../../git/gcc/gcc/combine.cc:1264


Trying 5 -> 8:
    5: r98:DI=0xd7
    8: flags:CCZ=cmp(r98:DI,0)
      REG_EQUAL cmp(0xd7,0)


(insn 5 2 6 2 (set (reg/v:DI 98 [ flags ])
        (const_int 215 [0xd7])) "pr112494.c":10:15 84 {*movdi_internal}
     (nil))
(insn 6 5 7 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0  S8 A8])
        (const_int 215 [0xd7]))
"/hdd/uros/gcc-build-fast/gcc/include/ia32intrin.h":270:3 58 {*pushdi2_rex64}
     (nil))
(insn 7 6 8 2 (set (reg:CC 17 flags)
        (unspec:CC [
                (mem:DI (post_inc:DI (reg/f:DI 7 sp)) [0  S8 A8])
            ] UNSPEC_SET_FLAGS))
"/hdd/uros/gcc-build-fast/gcc/include/ia32intrin.h":270:3 72 {*popfldi1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
(insn 8 7 11 2 (set (reg:CCZ 17 flags)
        (compare:CCZ (reg/v:DI 98 [ flags ])
            (const_int 0 [0]))) "pr112494.c":12:9 8 {*cmpdi_ccno_1}
     (expr_list:REG_EQUAL (compare:CCZ (const_int 215 [0xd7])
            (const_int 0 [0]))
        (nil)))
(insn 11 8 12 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0  S8 A8])
        (unspec:DI [
                (reg:CC 17 flags)
            ] UNSPEC_GET_FLAGS))
"/hdd/uros/gcc-build-fast/gcc/include/ia32intrin.h":262:10 70 {*pushfldi2}
     (expr_list:REG_DEAD (reg:CC 17 flags)
        (nil)))

There is nothing suspicious in target code anymore (IMO, the above patch should
be applied nevertheless, the register modes are now fully correct)

Reply via email to