我正在尝试为没有乘法指令的ISA编写后端,因此需要通过添加循环来完成乘法。
我正在关注this guide.
我试过在InstrInfo.td文件中没有定义任何乘法,但这只会导致它到达时失败。 这是一个完全1:1的转换,所以有没有一种方法可以告诉编译器用Multiply()函数调用替换任何mul指令,如果我把它写在某处?
答案 0 :(得分:0)
您可以编写IR到IR转换通道,用您建议的等效函数调用替换mul
指令。这样您就不必更改代码生成器。
答案 1 :(得分:0)
您只需展开目标不支持的操作即可。 如下所示。
setOperationAction(ISD::FDIV, MVT::f32, Expand);
LLVM会将它们扩展为lib调用。 I32乘法将在 glibc 中扩展为__mulsi3
函数。
检查lib/CodeGen/TargetLoweringBase.cpp
中的所有此类lib调用。