Add getStore() helper function to create ISD::STORE nodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30758 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2006-10-05 22:57:11 +00:00
parent 9c78ecb511
commit ad071e1cd1
2 changed files with 21 additions and 1 deletions

View 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);

View 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!");