LLVM中是否有任何接口将内联函数编译为内部表示?

时间:2013-07-08 03:40:18

标签: compiler-construction clang llvm libclang

我正在开发基于llvm的东西,我想在运行代码时执行JIT,在代码jited中,我在代码中使用了一些函数而不是jited(生成jit代码的程序代码)。但我发现它很昂贵,运行代码需要花费大量时间。有没有办法将原始代码中的函数编译为内部表示,并将其粘贴到jited代码中,类似于内联函数。 例如: 原始代码:

void f(){
//....
}

------------ jitted code

jitted_function(){
  f();
}

我想要的是: -------------------- jitted code

inline void f(){
//...
}

jitted_function(){
  f();
}

最难的是如果我直接粘贴c ++代码,那么我必须解析f使用的函数和类,并粘贴它们,我不想这样做。

1 个答案:

答案 0 :(得分:2)

这只是代码: - )

您希望代码同时出现在主机程序和JITed程序中 - 因此将它放在可从两者访问的位置并调整构建,以便它包含在两个位置。这是一个问题吗?

至于你问题的第一部分,对我来说,从JITed代码调用主机代码“非常慢”听起来很奇怪。只要主机代码也使用优化构建,感谢从JITed代码本身调用函数就不应该慢得多。也许如果它是一个你想要内联的微小功能,可能会有所不同。在这种情况下,只需将它包含在两个地方。