0

たとえば、LLVMでaValue*をifにキャストできるかどうか教えてください。私の特定のコードでは:Instruction*/LoadInst*isa<LoadInst>(MyValue)

Value* V1 = icmpInstrArray[i]->getOperand(0);
Value* V2 = icmpInstrArray[i]->getOperand(1);
if (isa<LoadInst>(V1) || isa<LoadInst>(V2)){
...
if(isa<LoadInst>(icmpInstrArray[i]->getOperand(0)))
    LoadInst *LD100 = cast<LoadInst>(icmpInstrArray[i]->getOperand(0));
        Value *C100 = LD100->getPointerOperand(); //HERE COMPILATION ERROR

さらに、作成する必要がありC100->getName()、ロードされた変数を取得します。

コンパイルエラーは次のとおりです。error: ‘LD100’ was not declared in this scope.

そんなキャストは使えないと思います。ICMP命令に対応するLoad命令からロードされた変数を取得する方法を教えてください。または、Load命令をどのように抽出できicmpInstrArray[i]->getOperand(0)ますか?

4

1 に答える 1

4

ifステートメントを囲む中括弧がありません。あなたのコードは現在これと同じです:

if(isa<LoadInst>(icmpInstrArray[i]->getOperand(0))) {
    LoadInst *LD100 = cast<LoadInst>(icmpInstrArray[i]->getOperand(0));
}
Value *C100 = LD100->getPointerOperand(); //HERE COMPILATION ERROR

LD100ifステートメントの範囲外では定義されていません。これはうまくいくでしょう:

if(isa<LoadInst>(icmpInstrArray[i]->getOperand(0))) {
    LoadInst *LD100 = cast<LoadInst>(icmpInstrArray[i]->getOperand(0));
    Value *C100 = LD100->getPointerOperand(); //HERE COMPILATION ERROR
}
于 2013-01-28T10:39:40.207 に答える