2015-06-20 23 views
0

我不想在由llvm生成的汇编代码中使用特定的机器指令。LLVM:在生成机器代码时禁用某些指令

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

+0

你不想使用的指令是什么,为什么你不想使用它? – davmac

+0

它用于某些研究目的。我想禁用bt(位测试)指令。 –

+0

您可以从lib/target/X86/X86InstrInfo.td中删除位测试指令并重新构建。我不确定是否有其他需要。 – davmac

回答

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 ...)

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

希望它会有所帮助。