MCPcopy Create free account
hub / github.com/Samsung/UTopia / traceCaller

Method traceCaller

lib/rootdefanalysis/RDAnalyzer.cpp:325–358  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

323}
324
325std::set<RDNode> RDAnalyzer::traceCaller(RDNode &Node, llvm::Function &F) {
326
327 auto &Target = Node.getTarget().getIR();
328 if (!isa<GlobalVariable>(&Target) && !isa<Argument>(&Target)) {
329 return {Node};
330 }
331
332 std::set<RDNode> Result;
333 for (auto *Caller : Space.nextInCaller(F)) {
334 if (isa<GlobalVariable>(&Target)) {
335 RDNode NewNode(Target, *Caller, &Node);
336 for (auto &Found :
337 traverseFunction(NewNode, *Caller->getFunction(), true, false))
338 mergeRDNode(Result, Found);
339 continue;
340 }
341
342 if (isa<Argument>(&Target)) {
343 auto &Arg = *dyn_cast<Argument>(&Target);
344 assert(Arg.getParent() == &F && "Unexpected Program State");
345
346 RDNode NewNode(Arg.getArgNo(), *Caller, &Node);
347
348 for (auto &Found :
349 traverseFunction(NewNode, *Caller->getFunction(), true, false))
350 mergeRDNode(Result, Found);
351 continue;
352 }
353
354 assert(false && "Unexpected Program State");
355 }
356
357 return Result;
358}
359
360std::set<RDNode> RDAnalyzer::traceLink(RDNode &Node, Function &F) {
361 auto &Target = Node.getTarget().getIR();

Callers

nothing calls this directly

Calls 2

nextInCallerMethod · 0.80
getFunctionMethod · 0.80

Tested by

no test coverage detected