Add a new method to make it easy to update graphs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20194 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-02-15 18:40:55 +00:00
parent 5ad907a5e1
commit d672ab936f
2 changed files with 33 additions and 3 deletions

View File

@ -245,8 +245,6 @@ public:
afc_iterator afc_begin() const { return AuxFunctionCalls.begin(); }
afc_iterator afc_end() const { return AuxFunctionCalls.end(); }
/// getInlinedGlobals - Get the set of globals that are have been inlined
/// (from callees in BU or from callers in TD) into the current graph.
///
@ -298,6 +296,16 @@ public:
return Nodes.size();
}
/// addObjectToGraph - This method can be used to add global, stack, and heap
/// objects to the graph. This can be used when updating DSGraphs due to the
/// introduction of new temporary objects. The new object is not pointed to
/// and does not point to any other objects in the graph. Note that this
/// method initializes the type of the DSNode to the declared type of the
/// object if UseDeclaredType is true, otherwise it leaves the node type as
/// void.
DSNode *addObjectToGraph(Value *Ptr, bool UseDeclaredType = true);
/// print - Print a dot graph to the specified ostream...
///
void print(std::ostream &O) const;

View File

@ -147,7 +147,6 @@ void DSNode::addGlobal(GlobalValue *GV) {
std::lower_bound(Globals.begin(), Globals.end(), GV);
if (I == Globals.end() || *I != GV) {
//assert(GV->getType()->getElementType() == Ty);
Globals.insert(I, GV);
NodeType |= GlobalNode;
}
@ -1141,6 +1140,29 @@ void DSGraph::updateFromGlobalGraph() {
}
}
/// addObjectToGraph - This method can be used to add global, stack, and heap
/// objects to the graph. This can be used when updating DSGraphs due to the
/// introduction of new temporary objects. The new object is not pointed to
/// and does not point to any other objects in the graph.
DSNode *DSGraph::addObjectToGraph(Value *Ptr, bool UseDeclaredType) {
assert(isa<PointerType>(Ptr->getType()) && "Ptr is not a pointer!");
const Type *Ty = cast<PointerType>(Ptr->getType())->getElementType();
DSNode *N = new DSNode(UseDeclaredType ? Ty : 0, this);
ScalarMap[Ptr] = N;
if (GlobalValue *GV = dyn_cast<GlobalValue>(Ptr)) {
N->addGlobal(GV);
} else if (MallocInst *MI = dyn_cast<MallocInst>(Ptr)) {
N->setHeapNodeMarker();
} else if (AllocaInst *AI = dyn_cast<AllocaInst>(Ptr)) {
N->setAllocaNodeMarker();
} else {
assert(0 && "Illegal memory object input!");
}
return N;
}
/// cloneInto - Clone the specified DSGraph into the current graph. The
/// translated ScalarMap for the old function is filled into the OldValMap
/// member, and the translated ReturnNodes map is returned into ReturnNodes.