Ich muss herausfinden, die Verschachtelungsebene einer Funktionsaufrufstelle (oder jede Anweisung, für diese Angelegenheit) mit einem LLVM Function-Pass. Ich habe den folgenden Code geschrieben, aber es gibt immer 0 als Verschachtelungsebenen zurück.Wie finde ich die Schleifentiefe einer Call-Site mit einem LLVM Function Pass?
virtual bool runOnFunction(Function &F) {
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
errs() << "Function: " << F.getName() << "\n";
for (User *U : F.users()) {
CallSite CS(dyn_cast<Instruction>(U));
Function *callerFn = CS.getCaller();
if (callerFn && !callerFn->isDeclaration()) {
errs() <<callerFn->getName() << "--> " << F.getName()<<"\n";
Instruction *callInstr = CS.getInstruction();
BasicBlock *callerBB = callInstr->getParent();
callerBB->dump();
bool isLoop = LI.getLoopFor(callerBB);
errs()<<"Is Loop: "<<isLoop<<"\n";
int LoopDepth = LI.getLoopDepth(callerBB);
errs()<<"Loop Depth: "<< LoopDepth <<"\n";
}
}