LLVM ICmpInst 到指令转换

Posted

技术标签:

【中文标题】LLVM ICmpInst 到指令转换【英文标题】:LLVM ICmpInst to Instruction casting 【发布时间】:2013-01-10 13:33:10 【问题描述】:

我想要一些关于 LLVM 通行证的建议。我的特殊问题是:

有办法

bool patternDC::runOnFunction(Function &F) 
...
    if ( CC->operEquiv(icmpInstrArray[i], icmpInstrArray[j]) ) ...
...

具有指令*类型的数组元素。

调用的方法是

bool ifChecker::operEquiv(Instruction *I1, Instruction *I2)

...

但我想在 operEquiv 中使用 ICmpInst 类中的方法。我不能做类似的事情

ICmpInst** II1 = dyn_cast<ICmpInst*>(I1); 

(一种来自 Java 的 instanceOf()),存在转换编译问题。

ICmpInst 类在 http://llvm.org/doxygen/Instructions_8h_source.html 的第 913 行定义 继承图在http://llvm.org/doxygen/classllvm_1_1ICmpInst.html

我想对指令类型的对象使用 ICmpInst 方法。这些方法很难复制/复制。我最好使用什么解决方案来解决这个问题?我应该使用访问者模式(我不太了解)吗?

感谢您的任何建议!

【问题讨论】:

【参考方案1】:

执行强制转换的正确方法是:

ICmpInst* II1 = dyn_cast<ICmpInst>(I1);

(去掉多余的星号)

【讨论】:

以上是关于LLVM ICmpInst 到指令转换的主要内容,如果未能解决你的问题,请参考以下文章

Llvm 移除终结者指令

LLVM IR:具有可变 BasicBlock 目标的分支指令?

如何在 LLVM 中提取 Icmp inst 或 binaryOperator Inst 的目标位置?

如何获得 LLVM 中两条指令之间的距离?

LLVM - 我可以从例如我的指令格式访问变量吗?延迟槽填充?

LLVM的IR指令及代码生成技术应用详解