LLVM IR의 경우 Loop API를 보면 getStartLoc과 같은 관련 호출이 있습니다. 이제 여기에 소스 코드 라인에서
llvm::SmallVector<llvm::Loop *> workList;
auto &LI = getAnalysis<llvm::LoopInfoWrapperPass>(CurFunc).getLoopInfo();
std::for_each(LI.begin(), LI.end(), [&workList](llvm::Loop *e) { workList.push_back(e); });
for(auto *e : workList) {
auto line = e->getStartLoc().getLine();
auto *scope = llvm::dyn_cast<llvm::DIScope>(e->getStartLoc().getScope());
auto filename = scope->getFilename();
// do stuff here
}
을 당신은이 루프의 종류를 식별 할 수 있습니다 그래서 당신은, (예를 들어, llvm::Function
패스의 runOn
방법 내부) 같은 것을 할 수 있습니다.
LoopInfo & LoopInfo = getAnalysis (* F) .getLoopInfo(); –
정확히 같은 LLVM 코드를 생성하기 때문에 while 루프와 LLVM 레벨의 동등한 for 루프를 구분할 방법이 없습니다. – sepp2k
@ sepp2k 고맙습니다. –