If the result of a BIT_CONVERT is a v1* vector, it doesn't mean its source is a v1...
authorEvan Cheng <evan.cheng@apple.com>
Fri, 16 May 2008 17:19:05 +0000 (17:19 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 16 May 2008 17:19:05 +0000 (17:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51192 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 155b1a33acc4e7a483d8aabb6eff5044b85d1a2d..3290311df2bb99d46529d4ba2166cd1e105c95c8 100644 (file)
@@ -7109,10 +7109,13 @@ SDOperand SelectionDAGLegalize::ScalarizeVectorOp(SDOperand Op) {
     Result = Node->getOperand(0);
     assert(Result.getValueType() == NewVT);
     break;
-  case ISD::BIT_CONVERT:
-    Result = DAG.getNode(ISD::BIT_CONVERT, NewVT,
-                         ScalarizeVectorOp(Op.getOperand(0)));
+  case ISD::BIT_CONVERT: {
+    SDOperand Op0 = Op.getOperand(0);
+    if (MVT::getVectorNumElements(Op0.getValueType()) == 1)
+      Op0 = ScalarizeVectorOp(Op0);
+    Result = DAG.getNode(ISD::BIT_CONVERT, NewVT, Op0);
     break;
+  }
   case ISD::SELECT:
     Result = DAG.getNode(ISD::SELECT, NewVT, Op.getOperand(0),
                          ScalarizeVectorOp(Op.getOperand(1)),