我想要一些关于LLVM传递的建议。我的特殊问题是:
有一种方法
bool patternDC::runOnFunction(Function &F) {
...
if ( CC->operEquiv(icmpInstrArray[i], icmpInstrArray[j]) ) {...}
...
}
具有Instruction *。
类型的数组元素被调用的方法是
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
我想对类型为Instruction的对象使用ICmpInst方法。这些方法难以复制/复制。我最好用什么解决方案来解决这个问题?我应该使用访客模式(我不太了解)吗?
感谢您的任何建议!
答案 0 :(得分:1)
执行演员表的正确方法是:
ICmpInst* II1 = dyn_cast<ICmpInst>(I1);
(抛弃额外的星号)