【发布时间】:2018-02-08 09:05:02
【问题描述】:
LLVM 允许 call 指令和 defines 指定调用约定。 IR 本身是否已经需要遵守指定的约定?例如,当使用ccc 时,我相信返回值需要适合我的操作系统/架构上的 64 位 eax。我是否可以编写返回结构为 3 i32 的 LLVM IR 代码? LLVM 是否将其转换为符合 C 调用约定的内容?我可以在不更改任何其他代码的情况下更改调用约定吗?
当我查看使用 -emit-llvm 编译 C 文件的输出时,IR 生成器已经应用了调用约定,并将在调用站点进行分配,并将返回值转换为指针参数。在现阶段这绝对必要吗? LLVM 如何处理下一阶段使用哪个调用约定的信息-emit-obj?
【问题讨论】: