https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117525
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|middle-end |target
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(insn 14 13 15 3 (set (reg:SI 97 [ _11 ])
(fix:SI (fix:DF (reg/v:DF 99 [ width ])))) "t.cc":5:7 106
{fix_truncdfsi2}
(expr_list:REG_DEAD (reg/v:DF 99 [ width ])
(nil)))
/* With fixed-point machine mode:
Conversion of floating point operand to fixed point value.
Value is defined only when the operand's value is an integer.
With floating-point machine mode (and operand with same mode):
Operand is rounded toward zero to produce an integer value
represented in floating point. */
DEF_RTL_EXPR(FIX, "fix", "e", RTX_UNARY)
`-O3 -fno-trapping-math` is enough to reproduce the ICE.
The way most other targets represent this is just (fix:SI (reg)) without the
inner most `fix:DF/SF`