在LLVM中的JIT期间计算预编译函数的函数签名

在LLVM中的JIT期间计算预编译函数的函数签名,llvm,llvm-ir,Llvm,Llvm Ir,我目前正在使用LLVM实现JIT编译器。 我遇到的问题是编译器运行时的一部分是用C实现的 通过我的中间表示,我可以生成所有本机函数。但是,该语言中的某些操作需要调用这些外部C函数 我的问题是,我不知道传递给这些函数的参数的确切类型,它们可能是int,也可能是float。以前的代码生成是基于C的,C的弱类型允许轻松调用这些函数。但是,在生成LLVM-IR时,我需要知道这些预编译函数的签名,是否有任何方法可以使用orc API或其他方法来确定签名,或者最好只对每个必需函数的配置进行硬编码 我为这个问

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

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


我的问题是,我不知道传递给这些函数的参数的确切类型,它们可能是int,也可能是float。以前的代码生成是基于C的,C的弱类型允许轻松调用这些函数。但是,在生成LLVM-IR时,我需要知道这些预编译函数的签名,是否有任何方法可以使用orc API或其他方法来确定签名,或者最好只对每个必需函数的配置进行硬编码

我为这个问题实施的解决方案遵循以下简单方案

在编译过程中,生成对这些函数的调用,签名仅基于传递给相关预编译函数的参数和返回值

这在我的示例中效果很好,因为我在LLVM中使用了C调用约定。引用LLVM主页的C调用约定允许不匹配:

“此调用约定(如果未指定其他调用约定,则为默认值)与目标C调用约定相匹配。此调用约定支持varargs函数调用,并允许在声明的原型和实现的函数声明中出现某些不匹配(与普通C一样)。”[1]:

这与,orc没有被使用,我的目标是为运行时中已经存在的函数生成调用指令。