summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorEric Christopher <echristo@apple.com>2011-02-20 05:04:42 +0000
committerEric Christopher <echristo@apple.com>2011-02-20 05:04:42 +0000
commitac6b001f564556dab8f4543f6ed0a47ecd0afaf1 (patch)
tree61b899578ba3992427c6891f2938801569fcf4ca /llvm/lib/Target
parenta32b8d78016e57fd72e86cbf8bf69fb048fdea8c (diff)
downloadbcm5719-llvm-ac6b001f564556dab8f4543f6ed0a47ecd0afaf1.tar.gz
bcm5719-llvm-ac6b001f564556dab8f4543f6ed0a47ecd0afaf1.zip
If both operands are loads from stores in memory we can't use movlpd/movlps
since one needs to be a register operand. Just use movss instead of forcing an operand into a register. Fixes PR9239 llvm-svn: 126072
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index d1bf08cac20..27024b4e9e5 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -5472,6 +5472,10 @@ SDValue getMOVLP(SDValue &Op, DebugLoc &dl, SelectionDAG &DAG, bool HasSSE2) {
if (MayFoldVectorLoad(V1) && MayFoldIntoStore(Op))
CanFoldLoad = true;
+ // Both of them can't be memory operations though.
+ if (MayFoldVectorLoad(V1) && MayFoldVectorLoad(V2))
+ CanFoldLoad = false;
+
if (CanFoldLoad) {
if (HasSSE2 && NumElems == 2)
return getTargetShuffleNode(X86ISD::MOVLPD, dl, VT, V1, V2, DAG);
OpenPOWER on IntegriCloud