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.