我是 LLVM 的新手,我需要分析程序(控制流和数据流分析)。我在 LLVM 中找不到 PDG 或任务图。我怎样才能做到这一点?
我通过以下代码在LLVM中提取Def_Use链:
for (Value::use_iterator i = F->use_begin(), e = F->use_end(); i != e; ++i)
if (Instruction *Inst = dyn_cast<Instruction>(*i)) {
errs() << "F is used in instruction:\n";
errs() << *Inst << "\n";
}
Run Code Online (Sandbox Code Playgroud)
现在,我想区分导致此数据依赖性的寄存器名称或内存变量.
谢谢
*我会删除循环.我使用了以下代码:
cout << "begin to delete loop" << endl;
for (Loop::block_iterator bi = L->block_begin(), bi2; bi != L->block_end(); bi = bi2) {
bi2 = bi;
bi2++;
BasicBlock * BB = *bi;
for (BasicBlock::iterator ii = BB->begin(), ii2; ii != BB->end(); ii= ii2) {
ii2 = ii;
ii2++;
Instruction *inst = ii;
inst->eraseFromParent();
}
BB->eraseFromParent();
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
在销毁Def后仍然使用:%t1 = icmp sle i32%t0,9 opt:/home/llvm/src/lib/VMCore/Value.cpp:75:virtual llvm :: Value :: ~Value():断言`use_empty()&&"当值被破坏时仍然使用!"'失败.0 opt 0x0848e569堆栈转储:
你有什么建议来解决这个问题?*