如何使用LLVM传递参数

时间:2013-01-28 13:41:42

标签: compiler-construction llvm

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

首先,您需要write a pass来计算您需要的信息。然后,您需要将该信息注入模块中。一种相对简单的方法是生成函数,当调用它们时,返回计算值。

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

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