gpt4 book ai didi

clang - 在 LLVM 字节码中查找循环

转载 作者:行者123 更新时间:2023-12-04 17:08:36 27 4
gpt4 key购买 nike

我想在 LLVM 字节码中找到简单的循环,并提取基本的
环的信息。

例如:

 for (i=0; i<1000; i++)
sum += i;

我想提取边界 [0, 1000)、循环变量“i”和
循环体(总和 += i)。
我该怎么办?

我阅读了 LLVM API 文档,并找到了一些有用的类,例如“Loop”,
“循环信息”。
但我不知道如何详细使用它们。

你能给我一些帮助吗?详细的用法可能会更有帮助。

最佳答案

如果您不想使用通行证管理器,您可能需要调用 中的分析方法。 llvm::LoopInfoBase IR 中每个函数的类(假设您使用的是 LLVM-3.4)。但是,Analyze 方法将每个函数的 DominatorTree 作为输入,您必须首先生成它。以下代码是我用 测试的LLVM-3.4 (假设您已阅读 IR 文件并将其转换为名为 module 的 Module*):

for(llvm::Module::iterator func = module->begin(), y=module->end(); func!=y; func++){
//get the dominatortree of the current function
llvm::DominatorTree* DT = new llvm::DominatorTree();
DT->DT->recalculate(*func);
//generate the LoopInfoBase for the current function
llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>* KLoop = new llvm::LoopInfoBase<llvm::BasicBlock, llvm::Loop>();
KLoop->releaseMemory();
KLoop->Analyze(DT->getBase());
}

基本上,通过生成 KLoop,您可以在 IR 级别获得各种 LOOP 信息。您可以引用 LoopInfoBase 类中的 API 了解详细信息。顺便说一句,您可能想要添加以下标题:
"llvm/Analysis/LoopInfo.h""llvm/Analysis/Dominators.h" .

关于clang - 在 LLVM 字节码中查找循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32729155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com