Don't do all the lowering stuff for 2-wide build_vector's. Also, minor optimization...
authorEvan Cheng <evan.cheng@apple.com>
Sat, 22 Apr 2006 08:34:05 +0000 (08:34 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sat, 22 Apr 2006 08:34:05 +0000 (08:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27946 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index 248393b899339d7aad456666e591f55beaaf4f6b..db2b5dd5c68965de8ce5687ca3c4c48490113dd0 100644 (file)
@@ -2977,8 +2977,8 @@ SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
         ShouldXformToMOVLP(V1.Val, PermMask.Val))
       return CommuteVectorShuffle(Op, DAG);
 
-    bool V1IsSplat = isSplatVector(V1.Val);
-    bool V2IsSplat = isSplatVector(V2.Val);
+    bool V1IsSplat = isSplatVector(V1.Val) || V1.getOpcode() == ISD::UNDEF;
+    bool V2IsSplat = isSplatVector(V2.Val) || V2.getOpcode() == ISD::UNDEF;
     if (V1IsSplat && !V2IsSplat) {
       Op = CommuteVectorShuffle(Op, DAG);
       V1 = Op.getOperand(0);
@@ -3137,6 +3137,9 @@ SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
       return Op;
 
     unsigned NumElems = Op.getNumOperands();
+    if (NumElems == 2)
+      return SDOperand();
+
     unsigned Half = NumElems/2;
     MVT::ValueType VT = Op.getValueType();
     MVT::ValueType EVT = MVT::getVectorBaseType(VT);