【问题标题】:LLVM: Disable some instructions while generating machine codeLLVM:在生成机器代码时禁用一些指令
【发布时间】:2015-06-20 10:14:03
【问题描述】:

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

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

【问题讨论】:

  • 什么指令你不想用,​​为什么不想用?
  • 它用于一些研究目的。我想禁用 bt(位测试)指令。
  • 您可以先从 lib/target/X86/X86InstrInfo.td 中删除位测试指令并重新构建。我不确定是否需要其他任何东西。

标签: clang llvm


【解决方案1】:

一种解决方案是向 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::...)
  • Expand 意思是“尝试扩展到另一个操作”(还有其他操作,例如CustomLibcall...)

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

希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2021-08-25
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2016-02-16
    相关资源
    最近更新 更多