0

您能否告诉我是否可以在 LLVM 中将 aValue*转换为Instruction*/LoadInst*if 例如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

LD100未在 if 语句范围之外定义。这会起作用:

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 回答