我不太了解llvm中传递的定义。这是否意味着我只能使用opt命令来运行程序?
我的情况就像我想在基本块的CFG中找到循环,我想使用LLVM API而不是自己编写代码。我找到了一个名为Loopinfo http://llvm.org/docs/doxygen/html/LoopInfo_8h_source.html的文件,其中包含pass.h和继承自Functionpass的类passinfo。这是否意味着我只能使用opt命令来调用而不是编写一个使用某些类函数并构建和执行的普通项目?我希望我能清楚地澄清我的问题。
答案 0 :(得分:0)
最简单的方法是添加通过opt
命令执行的传递。但是,你应该能够创建专用的可执行文件来读取LLVM bitcode,执行你的传递并写回bitcode。
见这里的例子:
Parsing and Modifying LLVM IR code
opt
命令的来源也可能有用:
https://llvm.org/svn/llvm-project/llvm/trunk/tools/opt/opt.cpp
答案 1 :(得分:0)
你可以很好地分析和操作LLVM IR,而不需要了解任何关于传球的信息。只需使用LLVM API就可以了。
那么传球的优惠是什么?好吧,如果你以传递形式编写分析或转换 - 通过跟随this guide - 您仍然可以将它用作任何常规C ++类 1 ,但是你会获得一些优势:
您可以使用opt
工具来运行通行证。它将为您处理其他所有事情(例如加载IR),这使得在传递之前或之后运行其他传递非常容易(包括有用的验证传递),可以轻松启用/禁用调试模式等。
您可以使用pass manager轻松地将传球与其他传球相结合,这非常方便(例如,将照顾传球依赖关系)。
因此,一般来说,建议以通行证的形式写东西,但不是必需的。
<子>
1如果您定义其他通行证的要求,那么如果您不使用opt
或通行证管理员,您必须自己运行这些通行证
子>