| 380 | } |
| 381 | |
| 382 | std::set<RDNode> RDAnalyzer::pass(RDNode &Node) { |
| 383 | if (Node.isRootDefinition()) |
| 384 | return {Node}; |
| 385 | |
| 386 | auto Prevs = getPrevs(Node); |
| 387 | // There is no path to explore, mark it not to futher tracing. |
| 388 | if (Prevs.empty()) { |
| 389 | RDNode NewNode(Node); |
| 390 | NewNode.setStopTracing(true); |
| 391 | return {NewNode}; |
| 392 | } |
| 393 | |
| 394 | std::set<RDNode> Result; |
| 395 | for (auto &Prev : Prevs) { |
| 396 | for (auto &Found : trace(*const_cast<RDNode *>(&Prev))) { |
| 397 | mergeRDNode(Result, Found); |
| 398 | } |
| 399 | } |
| 400 | return Result; |
| 401 | } |
| 402 | |
| 403 | std::set<RDNode> RDAnalyzer::handleRegister(RDNode &Node, CallBase &CB) { |
| 404 | const auto *CF = util::getCalledFunction(CB); |
nothing calls this directly
no test coverage detected