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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ra
          Component|target                      |rtl-optimization

--- Comment #16 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to H.J. Lu from comment #13)
> The matching pattern for:
> 
> (insn 26 25 27 4 (set (reg:SF 147 [ D.2421 ])
>         (float:SF (reg/v:SI 154 [ z ]))) 203 {*floatsisf2_i387}
>      (expr_list:REG_DEAD (reg/v:SI 154 [ z ])
>         (nil)))
> 
> was removed by r208587. Without SSE math, MMX is used in *movsf_internal.

This has nothing to do with SSE math, but register preferences.

In i386.md, it is said for the above RTX that:

;; Even though we only accept memory inputs, the backend _really_
;; wants to be able to do this between registers.  Thankfully, LRA
;; will fix this up for us during register allocation.

LRA fixes this in a wrong way and puts the value in %mm register, see also
comment #10.

Reconfirmed on mainline as RA problem using "-O2 -ftree-vectorize
-march=pentium4 -m32" with Jakub's test from Comment #1.

Reply via email to