mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
As it turns out, we don't need a fully generic mapping copy ctor, we just need
something that maps through a std::map. Since this simplified the client and implementation code, do so now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4250 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -57,8 +57,8 @@ void TDDataStructures::ResolveCallSite(DSGraph &Graph,
|
||||
|
||||
// TD ...Merge the formal arg scalar with the actual arg node
|
||||
DSNodeHandle &NodeForFormal = Graph.getNodeForValue(AI);
|
||||
if (NodeForFormal.getNode())
|
||||
NodeForFormal.mergeWith(CallSite.getPtrArg(i));
|
||||
assert(NodeForFormal.getNode() && "Pointer argument has no dest node!");
|
||||
NodeForFormal.mergeWith(CallSite.getPtrArg(i));
|
||||
}
|
||||
|
||||
// Merge returned node in the caller with the "return" node in callee
|
||||
@@ -67,12 +67,6 @@ void TDDataStructures::ResolveCallSite(DSGraph &Graph,
|
||||
}
|
||||
|
||||
|
||||
static DSNodeHandle copyHelper(const DSNodeHandle* fromNode,
|
||||
std::map<const DSNode*, DSNode*> *NodeMap) {
|
||||
return DSNodeHandle((*NodeMap)[fromNode->getNode()], fromNode->getOffset());
|
||||
}
|
||||
|
||||
|
||||
DSGraph &TDDataStructures::calculateGraph(Function &F) {
|
||||
// Make sure this graph has not already been calculated, or that we don't get
|
||||
// into an infinite loop with mutually recursive functions.
|
||||
@@ -103,12 +97,9 @@ DSGraph &TDDataStructures::calculateGraph(Function &F) {
|
||||
DEBUG(std::cerr << "\t [TD] Inlining caller #" << c << " '"
|
||||
<< Caller.getName() << "' into callee: " << F.getName() << "\n");
|
||||
|
||||
if (&Caller == &F) {
|
||||
// Self-recursive call: this can happen after a cycle of calls is inlined.
|
||||
ResolveCallSite(*Graph, CallSite);
|
||||
} else {
|
||||
// Recursively compute the graph for the Caller. That should
|
||||
// be fully resolved except if there is mutual recursion...
|
||||
if (&Caller != &F) {
|
||||
// Recursively compute the graph for the Caller. It should be fully
|
||||
// resolved except if there is mutual recursion...
|
||||
//
|
||||
DSGraph &CG = calculateGraph(Caller); // Graph to inline
|
||||
|
||||
@@ -133,10 +124,9 @@ DSGraph &TDDataStructures::calculateGraph(Function &F) {
|
||||
|
||||
// Make a temporary copy of the call site, and transform the argument node
|
||||
// pointers.
|
||||
DSCallSite TmpCallSite(CallSite, std::bind2nd(std::ptr_fun(©Helper),
|
||||
&OldNodeMap));
|
||||
ResolveCallSite(*Graph, CallSite);
|
||||
//
|
||||
}
|
||||
ResolveCallSite(*Graph, CallSite);
|
||||
}
|
||||
|
||||
// Recompute the Incomplete markers and eliminate unreachable nodes.
|
||||
|
Reference in New Issue
Block a user