如何让LLVM后端为mul指令生成函数调用?

时间:2017-11-09 23:00:23

标签: compiler-construction llvm backend

我正在尝试为没有乘法指令的ISA编写后端,因此需要通过添加循环来完成乘法。

我正在关注this guide.

我试过在InstrInfo.td文件中没有定义任何乘法,但这只会导致它到达时失败。 这是一个完全1:1的转换,所以有没有一种方法可以告诉编译器用Multiply()函数调用替换任何mul指令,如果我把它写在某处?

2 个答案:

答案 0 :(得分:0)

您可以编写IR到IR转换通道,用您建议的等效函数调用替换mul指令。这样您就不必更改代码生成器。

答案 1 :(得分:0)

您只需展开目标不支持的操作即可。 如下所示。

setOperationAction(ISD::FDIV, MVT::f32, Expand);

LLVM会将它们扩展为lib调用。 I32乘法将在 glibc 中扩展为__mulsi3函数。

检查lib/CodeGen/TargetLoweringBase.cpp中的所有此类lib调用。