aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r--gcc/config/i386/i386.md7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index b575d42..37fe29b 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -23873,13 +23873,18 @@
[(set_attr "type" "ssecvt")
(set_attr "mode" "DF")])
+;; ??? We ought to be using ix86_binary_operator_ok on this pattern, so
+;; that we enforce the whole matching memory thing through combine et al.
+;; But that requires that things be set up properly when invoked via an
+;; intrinsic, which we don't do. Which leads to instantiate virtual regs
+;; lossage, as seen compiling gcc.dg/i386-sse-2.c for x86_64 at -O0.
(define_insn "sse2_movsd"
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,m")
(vec_merge:V2DF
(match_operand:V2DF 1 "nonimmediate_operand" "0,0,0")
(match_operand:V2DF 2 "nonimmediate_operand" "x,m,x")
(const_int 2)))]
- "TARGET_SSE2 && ix86_binary_operator_ok (UNKNOWN, V2DFmode, operands)"
+ "TARGET_SSE2"
"@movsd\t{%2, %0|%0, %2}
movlpd\t{%2, %0|%0, %2}
movlpd\t{%2, %0|%0, %2}"