If both operands are loads from stores in memory we can't use movlpd/movlps
authorEric Christopher <echristo@apple.com>
Sun, 20 Feb 2011 05:04:42 +0000 (05:04 +0000)
committerEric Christopher <echristo@apple.com>
Sun, 20 Feb 2011 05:04:42 +0000 (05:04 +0000)
since one needs to be a register operand. Just use movss instead of forcing
an operand into a register.

Fixes PR9239

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126072 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index d1bf08cac2031def371805f478260f1914e5afcc..27024b4e9e5a9b274afc70fbd0b9ad00bd142494 100644 (file)
@@ -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);