If a call to getTruncStore is for a normal store,
authorDuncan Sands <baldrick@free.fr>
Tue, 30 Oct 2007 12:40:58 +0000 (12:40 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 30 Oct 2007 12:40:58 +0000 (12:40 +0000)
offload to getStore rather than trying to handle
both cases at once (the assertions for example
assume the store really is truncating).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43498 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 5b7f1b6e3b8b511ac48898410761b64b4f7a7ecf..d92bb9cbd282ce1c2719b30db6a5732376cf231a 100644 (file)
@@ -2460,7 +2460,9 @@ SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
                                       int SVOffset, MVT::ValueType SVT,
                                       bool isVolatile, unsigned Alignment) {
   MVT::ValueType VT = Val.getValueType();
-  bool isTrunc = VT != SVT;
+
+  if (VT == SVT)
+    return getStore(Chain, Val, Ptr, SV, SVOffset, isVolatile, Alignment);
 
   assert(MVT::getSizeInBits(VT) > MVT::getSizeInBits(SVT) &&
          "Not a truncation?");
@@ -2485,7 +2487,7 @@ SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
   FoldingSetNodeID ID;
   AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
   ID.AddInteger(ISD::UNINDEXED);
-  ID.AddInteger(isTrunc);
+  ID.AddInteger(1);
   ID.AddInteger((unsigned int)SVT);
   ID.AddPointer(SV);
   ID.AddInteger(SVOffset);
@@ -2494,7 +2496,7 @@ SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
   void *IP = 0;
   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
     return SDOperand(E, 0);
-  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, isTrunc,
+  SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, true,
                               SVT, SV, SVOffset, Alignment, isVolatile);
   CSEMap.InsertNode(N, IP);
   AllNodes.push_back(N);