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`