Add getStore() helper function to create ISD::STORE nodes.
authorEvan Cheng <evan.cheng@apple.com>
Thu, 5 Oct 2006 22:57:11 +0000 (22:57 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 5 Oct 2006 22:57:11 +0000 (22:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30758 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/SelectionDAG.h
lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index f7ebbf25fbc37df3e0c8a741188be33f75403a61..4ec406107f362407434463b9f0ef6d32d3698ae9 100644 (file)
@@ -307,6 +307,11 @@ public:
                        SDOperand Chain, SDOperand Ptr, SDOperand SV,
                        MVT::ValueType EVT);
 
+  /// getStore - Helper function to build ISD::STORE nodes.
+  ///
+  SDOperand getStore(SDOperand Chain, SDOperand Value, SDOperand Ptr,
+                     SDOperand SV);
+
   // getSrcValue - construct a node to track a Value* through the backend
   SDOperand getSrcValue(const Value* I, int offset = 0);
 
index dc0d00f47e38519b432fc377061ac7baddad0525..e673175172dc1baa2e8e2e921ec39f498986ba2a 100644 (file)
@@ -1490,6 +1490,21 @@ SDOperand SelectionDAG::getExtLoad(ISD::LoadExtType LType, MVT::ValueType VT,
   return getNode(ISD::LOADX, getVTList(VT, MVT::Other), Ops, 5);
 }
 
+SDOperand SelectionDAG::getStore(SDOperand Chain, SDOperand Value,
+                                 SDOperand Ptr, SDOperand SV) {
+  SDVTList VTs = getVTList(MVT::Other);
+  SDOperand Ops[] = { Chain, Value, Ptr, SV };
+  SelectionDAGCSEMap::NodeID ID(ISD::STORE, VTs, Ops, 4);
+  void *IP = 0;
+  if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
+    return SDOperand(E, 0);
+  SDNode *N = new SDNode(ISD::STORE, Chain, Value, Ptr, SV);
+  N->setValueTypes(VTs);
+  CSEMap.InsertNode(N, IP);
+  AllNodes.push_back(N);
+  return SDOperand(N, 0);
+}
+
 SDOperand SelectionDAG::getVAArg(MVT::ValueType VT,
                                  SDOperand Chain, SDOperand Ptr,
                                  SDOperand SV) {
@@ -1523,7 +1538,7 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
     // Also for ConstantFP?
 #endif
     if (Ops[0].getValueType() == EVT)       // Normal store?
-      return getNode(ISD::STORE, VT, Ops[0], Ops[1], Ops[2], Ops[3]);
+      return getStore(Ops[0], Ops[1], Ops[2], Ops[3]);
     assert(Ops[1].getValueType() > EVT && "Not a truncation?");
     assert(MVT::isInteger(Ops[1].getValueType()) == MVT::isInteger(EVT) &&
            "Can't do FP-INT conversion!");