0

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

ご提案ありがとうございます。

4

1 に答える 1

1

キャストを実行する正しい方法は次のとおりです。

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

(余分なアスタリスクを捨てる)

于 2013-01-10T13:52:06.780 に答える