0

我想要一些关于 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 方法。这些方法很难复制/复制。我最好使用什么解决方案来解决这个问题?我应该使用访客模式(我不太了解)吗?

感谢您的任何建议!

4

1 回答 1

1

执行演员表的正确方法是:

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

(去掉多余的星号)

于 2013-01-10T13:52:06.780 回答