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 メソッドを使用したいと考えています。メソッドをコピー/複製するのは困難です。この問題を解決するには、どのソリューションを使用するのがよいでしょうか? ビジターパターンを使用する必要がありますか (私はあまり知りません) ?
ご提案ありがとうございます。