mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-16 12:24:03 +00:00
Allow the ResolveCallSiteModRefInfo method to return a mapping of nodes,
implement the mod/ref bit masking git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4578 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -104,17 +104,28 @@ void FunctionModRefInfo::computeModRef(const Function &func)
|
||||
// 2. It clears all of the mod/ref bits in the cloned graph
|
||||
// 3. It then merges the bottom-up graph(s) for the specified call-site into
|
||||
// the clone (bringing new mod/ref bits).
|
||||
// 4. It returns the clone.
|
||||
// 4. It returns the clone, and a mapping of nodes from the original TDGraph to
|
||||
// the cloned graph with Mod/Ref info for the callsite.
|
||||
//
|
||||
// NOTE: Because this clones a dsgraph and returns it, the caller is responsible
|
||||
// for deleting the returned graph!
|
||||
//
|
||||
DSGraph *FunctionModRefInfo::ResolveCallSiteModRefInfo(const CallInst &CI) {
|
||||
// Step #1: Clone the top-down graph...
|
||||
DSGraph *Result = new DSGraph(funcTDGraph);
|
||||
DSGraph *FunctionModRefInfo::ResolveCallSiteModRefInfo(const CallInst &CI,
|
||||
std::map<const DSNode*, DSNodeHandle> &NodeMap) {
|
||||
|
||||
// Step #1: Clone the top-down graph...
|
||||
std::map<const DSNode*, DSNode*> RawNodeMap;
|
||||
DSGraph *Result = new DSGraph(funcTDGraph, RawNodeMap);
|
||||
|
||||
// Convert the NodeMap from a map to DSNode* to be a map to DSNodeHandle's
|
||||
NodeMap.insert(RawNodeMap.begin(), RawNodeMap.end());
|
||||
|
||||
// We are now done with the old map... so free it's memory...
|
||||
RawNodeMap.clear();
|
||||
|
||||
// Step #2: Clear Mod/Ref information...
|
||||
Result->maskNodeTypes(~(DSNode::Modified | DSNode::Read));
|
||||
|
||||
//const Function &F = *CI.getParent()->getParent();
|
||||
//DSGraph &TDGraph = IPModRefObj.getAnalysis<TDDataStructures>().getDSGraph(F);
|
||||
|
||||
|
||||
return Result;
|
||||
@ -133,7 +144,8 @@ FunctionModRefInfo::computeModRef(const CallInst& callInst)
|
||||
callSiteModRefInfo[&callInst] = callModRefInfo;
|
||||
|
||||
// Get a copy of the graph for the callee with the callee inlined
|
||||
DSGraph* csgp = ResolveCallSiteModRefInfo(callInst);
|
||||
std::map<const DSNode*, DSNodeHandle> NodeMap;
|
||||
DSGraph* csgp = ResolveCallSiteModRefInfo(callInst, NodeMap);
|
||||
|
||||
// For all nodes in the graph, extract the mod/ref information
|
||||
const std::vector<DSNode*>& csgNodes = csgp->getNodes();
|
||||
|
Reference in New Issue
Block a user