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

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at gcc dot gnu.org
          Component|target                      |rtl-optimization

--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> ---
Not a target problem.

It is RTL store motion pass that transforms:

(insn 19 18 20 4 (parallel [
            (set (mem/c:SI (symbol_ref:SI ("bar_arg") [flags 0x2]  <var_decl
0x7f68136f2b40 bar_arg>) [1 bar_arg+0 S4 A32])
                (fix:SI (reg:DF 89)))
            (clobber (scratch:XF))
        ]) "stdarg-3.c":63:7 156 {fix_truncsi_i387_fisttp}
     (expr_list:REG_DEAD (reg:DF 89)
        (nil)))

to an unrecognisable insn:

(insn 33 18 20 4 (set (reg:SI 93 [ bar_arg ])
        (fix:SI (reg:DF 89))) "stdarg-3.c":63:7 -1
     (expr_list:REG_DEAD (reg:DF 89)
        (nil)))

There is the following insn present in the i386.md:

(define_insn "fix_trunc<MODEF:mode><SWI48:mode>_sse"
  [(set (match_operand:SWI48 0 "register_operand" "=r,r")
        (fix:SWI48 (match_operand:MODEF 1 "nonimmediate_operand" "v,m")))]
  "SSE_FLOAT_MODE_P (<MODEF:MODE>mode)
   && (!TARGET_FISTTP || TARGET_SSE_MATH)"
  "%vcvtt<MODEF:ssemodesuffix>2si<SWI48:rex64suffix>\t{%1, %0|%0, %1}"

But with TARGET_FISTTP = 1 and TARGET_SSE_MATH = 0, as is the case with the
above testcase, it should be disabled.

Reply via email to