[Bug rtl-optimization/112494] ICE in ix86_cc_mode, at config/i386/i386.cc:16477

2023-11-13 Thread ubizjak at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112494

--- Comment #4 from Uroš Bizjak  ---
(In reply to Andrew Pinski from comment #3)
> I almost want to say this is a bug in the x86 back-end where it pushes the
> flags onto the stack.

Yes, could be - let me look into this a bit more.

[Bug rtl-optimization/112494] ICE in ix86_cc_mode, at config/i386/i386.cc:16477

2023-11-12 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112494

--- Comment #3 from Andrew Pinski  ---
I almost want to say this is a bug in the x86 back-end where it pushes the
flags onto the stack.

That is:
(insn 11 8 12 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0  S8 A8])
(reg:DI 17 flags))
"/opt/compiler-explorer/gcc-trunk-20231112/lib/gcc/x86_64-linux-gnu/14.0.0/include/ia32intrin.h":262:10
70 {*pushfldi2}
 (expr_list:REG_DEAD (reg:DI 17 flags)
(nil)))
(insn 12 11 20 2 (set (reg:DI 102)
(mem:DI (post_inc:DI (reg/f:DI 7 sp)) [0  S8 A8]))
"/opt/compiler-explorer/gcc-trunk-20231112/lib/gcc/x86_64-linux-gnu/14.0.0/include/ia32intrin.h":262:10
66 {*popdi1}
 (expr_list:REG_UNUSED (reg:DI 102)
(nil)))
(insn 20 12 21 2 (set (reg:CCZ 17 flags)
(compare:CCZ (reg/v:DI 98 [ flags1D.40416 ])
(const_int 0 [0]))) "/app/example.cpp":14:15 8 {*cmpdi_ccno_1}
 (expr_list:REG_EQUAL (compare:CCZ (const_int 215 [0xd7])
(const_int 0 [0]))
(expr_list:REG_DEAD (reg/v:DI 98 [ flags1D.40416 ])
(nil

Maybe it should be represented as:
(set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0  S8 A8])
(unspec (reg:CC 17 flags) GET_EFLAGS))

Likewise for poping:
(set (reg:DI 17 flags)
(mem:DI (post_inc:DI (reg/f:DI 7 sp)) [0  S8 A8]))
 (nil)

Should really be:
(set (reg:CC 17 flags)
(unspec:CC (mem:DI (post_inc:DI (reg/f:DI 7 sp)) [0  S8 A8]))
SET_EFLAGS))

[Bug rtl-optimization/112494] ICE in ix86_cc_mode, at config/i386/i386.cc:16477

2023-11-12 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112494

--- Comment #2 from Andrew Pinski  ---
It has failed since __writeeflags/__readeflags was added in 4.9.0.