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)