在LLVM中的JIT期间找出预编译函数的函数签名

问题描述 投票:1回答:1

我目前正在使用LLVM实现JIT编译器。我遇到的问题是编译器运行时的一部分是用C实现的。

从我的中间表示,我可以生成所有本机函数。但是,该语言中的某些操作需要调用这些外部C函数。

我遇到的问题是我没有从我的IR知道传递给这些函数的确切参数类型,它们可能采用int,或者它们可能需要浮点数。之前的代码生成基于C,并且C的弱类型允许调用这些函数而没有麻烦。但是,在生成LLVM-IR时我需要知道这些预编译函数的签名,有没有办法使用orc-API或其他方法来计算签名,或者只是硬编码配置会更好对于每个必要的功能?

llvm llvm-ir
1个回答
0
投票

我为此问题实现的解决方案遵循以下简单方案。

在编译期间,生成对这些函数的调用,该签名简单地基于将哪些参数和返回值传递给所讨论的预编译函数。

这对我的例子非常有用,因为我使用了LLVM的C调用约定。引用LLVM主页的C调用约定容忍不匹配:

“这个调用约定(默认情况下,如果没有指定其他调用约定)匹配目标C调用约定。这个调用约定支持varargs函数调用,并容忍声明原型中的一些不匹配并实现函数的声明(正常C)。 “ [1]:https://llvm.org/docs/LangRef.html#calling-conventions

© www.soinside.com 2019 - 2024. All rights reserved.