LLVM:在生成机器代码时禁用某些指令

时间:2015-06-20 10:14:04

标签: clang llvm

我不想在llvm生成的汇编代码中使用特定的机器指令。

有没有办法禁用相同的?我也可以修改llvm代码。

1 个答案:

答案 0 :(得分:2)

一种解决方案是指定llvm该指令不能“降低”......可能会发生两件事:

  • 编译器可以使用另一组指令执行相同的操作......一切都会好的
  • 编译器离不开它,在这种情况下你必须修改目标生成器来建议一个变通方法(如果你不熟悉llvm那么不容易)

要搜索 XXXISelDAGToDAG.cpp ,其中 XXX 是您的目标计算机,并向构造函数指定如下内容:

setOperationAction(ISD::YYY, MVT::i8, Expand);
setOperationAction(ISD::YYY, MVT::i16, Expand);
setOperationAction(ISD::YYY, MVT::i32, Expand);
setOperationAction(ISD::YYY, MVT::i64, Expand);

其中 ISD :: YYY 是您不想使用的指令。 浏览源代码时很容易找到它。

大致是:

  • setOperationAction 指定您要更改给定操作的默认操作以及类型(MVT :: ...)
  • 展开表示“尝试扩展到其他操作”(还有其他操作,例如自定义 Libcall ...)< / LI>

玩弄它,你应该能够解决你的问题。

希望它会有所帮助。