Only to vector shuffle for {x,x,y,y} cases when SCALAR_TO_VECTOR is free.
authorEvan Cheng <evan.cheng@apple.com>
Fri, 24 Mar 2006 18:45:20 +0000 (18:45 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 24 Mar 2006 18:45:20 +0000 (18:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27071 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index dfafb70585f218a67fe554d02f21332ab42707ec..6acadc1349d83a5a85c1c0c2fc5316ffd53cd111 100644 (file)
@@ -3209,7 +3209,8 @@ SDOperand SelectionDAGLegalize::ExpandBUILD_VECTOR(SDNode *Node) {
     SDOperand ShuffleMask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
 
     // If the target supports VECTOR_SHUFFLE and this shuffle mask, use it.
-    if (TLI.isShuffleLegal(Node->getValueType(0), ShuffleMask)) {
+    if (TLI.isShuffleLegal(Node->getValueType(0), ShuffleMask) &&
+        TLI.isOperationLegal(ISD::SCALAR_TO_VECTOR, Node->getValueType(0))) {
       std::vector<SDOperand> Ops;
       for(std::map<SDOperand,std::vector<unsigned> >::iterator I=Values.begin(),
             E = Values.end(); I != E; ++I) {