相当于LLVM IR的#include

时间:2017-09-12 11:41:19

标签: llvm llvm-ir

我发现自己在LLVM的IR中编写了大量有用的函数和常量。我可以通过将它与手写IR结合使用这个伪库,前提是手写的IR以可能冗长的声明列表开头。我知道IR并不一定被设计为通用编程语言来编写内容。

这就像在一个文件中编写大量C函数,然后在任何使用它们的地方重新声明它们。在C中,这可以使用#include和头文件。这并不完美,但它反复写出原型。

在IR中实现类似的最不可靠的方法是什么?它只需要一遍又一遍地打败这些东西(我现在以复制和粘贴的方式做)并使用cat作为自定义构建步骤。

谢谢!

2 个答案:

答案 0 :(得分:2)

遗憾的是LLVM IR中没有这样的东西。

LLVM IR的设计目的不是手写大量的。因此它没有#include机制。使用LLVM API处理这类东西的工作就落到了编译器上。

如果你想达到同样的效果,你可以做的一件事就是试着看看别人的预处理器是否适用于你想要做的事情或自己编写自定义预处理器。

答案 1 :(得分:1)

您可以使用llvm-link将不同的IR组合在一起。

例如,您有以下顺序。

// file : f1.ll
; Function Attrs: nounwind readnone
define i32 @f1(i32 %a) #0 {
entry:
  ret i32 %a
}

// file : f2.ll
; Function Attrs: nounwind
define i32 @f2(i32 %a) #0 {
entry:
%call = tail call i32 @f1(i32 %a) #2
 ret i32 %call
}

然后你可以打电话

llvm-link f1.ll f2.ll -S -o ffinal.ll

ffinal.ll将包含两个IR代码。