【问题标题】:Figure out function signatures of precompiled functions during JIT in LLVM在 LLVM 中的 JIT 期间找出预编译函数的函数签名
【发布时间】:2018-03-26 01:17:04
【问题描述】:

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

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

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

【问题讨论】:

标签: llvm llvm-ir


【解决方案1】:

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

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

这适用于我的示例,因为我将 C 调用约定与 LLVM 一起使用。引用 LLVM 主页的 C 调用约定允许不匹配:

"此调用约定(如果未指定其他调用约定,则为默认值)与目标 C 调用约定匹配。此调用约定支持可变参数函数调用,并允许在声明的原型和函数的实现声明中存在一些不匹配(与正常情况一样) C)。” [1]:https://llvm.org/docs/LangRef.html#calling-conventions

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2011-09-03
    • 1970-01-01
    • 2012-08-17
    • 2020-01-31
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多