Don't bother storing undef elements of BUILD_VECTOR's
authorChris Lattner <sabre@nondot.org>
Sun, 19 Mar 2006 05:46:04 +0000 (05:46 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 19 Mar 2006 05:46:04 +0000 (05:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26858 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index a0c10a09f72393155b9c93ea1dc3397669de9ad6..d594cfe7efaf22ef4733a07f730857fa51d64860 100644 (file)
@@ -794,6 +794,9 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
       unsigned VectorSize = MVT::getSizeInBits(VT)/8;
       // Store (in the right endianness) the elements to memory.
       for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
+        // Ignore undef elements.
+        if (Node->getOperand(i).getOpcode() == ISD::UNDEF) continue;
+        
         unsigned Offset;
         if (isLittleEndian) 
           Offset = TypeByteSize*i;
@@ -807,7 +810,12 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
                                      Node->getOperand(i), Idx, 
                                      DAG.getSrcValue(NULL)));
       }
-      SDOperand StoreChain = DAG.getNode(ISD::TokenFactor, MVT::Other, Stores);
+      
+      SDOperand StoreChain;
+      if (!Stores.empty())    // Not all undef elements?
+        StoreChain = DAG.getNode(ISD::TokenFactor, MVT::Other, Stores);
+      else
+        StoreChain = DAG.getEntryNode();
       
       // Result is a load from the stack slot.
       Result = DAG.getLoad(VT, StoreChain, FIPtr, DAG.getSrcValue(0));