在C执行LLVM红外代码

问题描述:

我一直在想如何基本上拿一部分LLVM红外代码,并在C中执行内嵌我想要能够内联红外代码,以便不需要虚函数调用(与使用_asm{}可以内联汇编代码的方式相同)。请看下面的例子:在C执行LLVM红外代码

LLVM IR代码来执行:

define i64 @square(i64 %x){ 
    %y = mul i64 %x, %x 
    ret i64 %y 
} 

C程序:

for(i = 0; i < length; i++){ 
    //run LLVM IR Code here 
} 

我知道我可以使用parseIRFile()阅读红外代码,并创建一个函数指针但这不是我所需要的虚拟函数调用。

+0

你在说什么“虚拟电话”?在'for(i = 0; i 2013-04-26 09:21:37

首先,没有涉及虚拟功能 - C没有这样的概念。我认为你的意思是一个间接函数调用,也就是获取一个函数指针并调用它指向的函数。

简短的回答是,没有,没有直接的方法来嵌入LLVM在C中,并得到它与您的代码编译:see this related question and my answer。正如我在那里提到的那样,如果您想让程序员编写LLVM IR并仍然坚持直接函数调用,则应该将IR封装在函数中并将其放入单独的文件中。

如果嵌入IR比性能更重要,则必须使用ParseIR()路由(不需要ParseIRFile()--您可以直接从内存中解析)。

我想你可以在你的构建过程中引入一些脚本,它需要一个混合的C/IR输入文件,将它分解成两个文件,然后将它们编译在一起,并适当修改IR中的调试信息,它真正嵌入在C文件中。但这是一种非常冒险的方法,无论哪种方式,输入文件都不会是合法的C文件。