我正在开发基于llvm的东西,我想在运行代码时执行JIT,在代码jited中,我在代码中使用了一些函数而不是jited(生成jit代码的程序代码)。但我发现它很昂贵,运行代码需要花费大量时间。有没有办法将原始代码中的函数编译为内部表示,并将其粘贴到jited代码中,类似于内联函数。 例如: 原始代码:
void f(){
//....
}
------------ jitted code
jitted_function(){
f();
}
我想要的是: -------------------- jitted code
inline void f(){
//...
}
jitted_function(){
f();
}
最难的是如果我直接粘贴c ++代码,那么我必须解析f使用的函数和类,并粘贴它们,我不想这样做。
答案 0 :(得分:2)
这只是代码: - )
您希望代码同时出现在主机程序和JITed程序中 - 因此将它放在可从两者访问的位置并调整构建,以便它包含在两个位置。这是一个问题吗?
至于你问题的第一部分,对我来说,从JITed代码调用主机代码“非常慢”听起来很奇怪。只要主机代码也使用优化构建,感谢从JITed代码本身调用函数就不应该慢得多。也许如果它是一个你想要内联的微小功能,可能会有所不同。在这种情况下,只需将它包含在两个地方。