[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp

Evan Cheng evan.cheng at apple.com
Mon Oct 9 14:39:39 PDT 2006



Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.272 -> 1.273
---
Log message:

Don't convert to MOVLP if using shufps etc. may allow load folding.


---
Diffs of the changes:  (+6 -2)

 X86ISelLowering.cpp |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.272 llvm/lib/Target/X86/X86ISelLowering.cpp:1.273
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.272	Mon Oct  9 15:57:25 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp	Mon Oct  9 16:39:25 2006
@@ -3053,9 +3053,13 @@
 /// V1 (and in order), and the upper half elements should come from the upper
 /// half of V2 (and in order). And since V1 will become the source of the
 /// MOVLP, it must be either a vector load or a scalar load to vector.
-static bool ShouldXformToMOVLP(SDNode *V1, SDNode *Mask) {
+static bool ShouldXformToMOVLP(SDNode *V1, SDNode *V2, SDNode *Mask) {
   if (!ISD::isNON_EXTLoad(V1) && !isScalarLoadToVector(V1))
     return false;
+  // Is V2 is a vector load, don't do this transformation. We will try to use
+  // load folding shufps op.
+  if (ISD::isNON_EXTLoad(V2))
+    return false;
 
   unsigned NumElems = Mask->getNumOperands();
   if (NumElems != 2 && NumElems != 4)
@@ -3497,7 +3501,7 @@
       return Op;
 
     if (ShouldXformToMOVHLPS(PermMask.Val) ||
-        ShouldXformToMOVLP(V1.Val, PermMask.Val))
+        ShouldXformToMOVLP(V1.Val, V2.Val, PermMask.Val))
       return CommuteVectorShuffle(Op, DAG);
 
     bool V1IsSplat = isSplatVector(V1.Val);






More information about the llvm-commits mailing list