0

我正在寻找在编译期间使用 LLVM 提取静态代码特征(如指令数)然后存储这些值以便我可以在程序执行期间使用的方法。

这可以通过 TransformationPasses 来完成吗?我在 LLVM 文档中没有得到这个概念。

4

2 回答 2

0

你的问题太笼统了。TransformationPasses 转换您的代码(例如消除死代码)。对于分析,有分析通行证。您可以编辑这些通行证以获得所需的内容。

首先,您可以编写自己的分析通行证: http: //llvm.org/docs/WritingAnLLVMPass.html。其次,您有 runOnFunction() 之类的函数(您可以在其中使用指令迭代器或基本块迭代器)。对于计数指令的特定示例,只需在 runOnFunction() 或 LLVM 方法中使用计数器。

于 2013-01-28T13:53:00.207 回答
0

首先,您需要编写一个计算所需信息的通行证。然后,您需要将该信息注入到您的模块中。一种相对简单的方法是生成函数,在调用时返回计算值。

如果程序员想要接收这些特殊值,则需要调用这些函数。程序员可能需要自己添加签名,但您的 pass 将替换为declare实际的define,它只返回一个常量值。这些函数也应该被注释为内联。

您也可以通过替换特殊变量或参数或其他任何东西来做到这一点,只是函数调用在我看来是一种优雅的方法。

于 2013-01-28T15:13:46.020 回答