mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 22:07:27 +00:00
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:
parent
5ad907a5e1
commit
d672ab936f
@ -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;
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user