【问题标题】:Are there any interfaces in LLVM to compile inline function into internal representation?LLVM 中是否有任何接口可以将内联函数编译为内部表示?
【发布时间】:2013-07-08 03:40:18
【问题描述】:

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

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

------------jitted代码

jitted_function(){
  f();
}

我想要的是: --------------------jit的代码

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

jitted_function(){
  f();
}

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

【问题讨论】:

    标签: compiler-construction clang llvm libclang


    【解决方案1】:

    这只是代码:-)

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

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

    【讨论】:

    • 因为我在嵌套循环中调用原始函数,所以函数调用开销很大。这就是为什么我想让它内联。
    猜你喜欢
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多