[LLVMdev] Value* to Instruction*/LoadInst* casting

Stephan Falke falke at iti.uka.de
Mon Jan 28 02:53:03 PST 2013


Hi Alexandru,

> The compilation error is : `error: ‘LD100’ was not declared in this scope.`
> 
> On Mon, Jan 28, 2013 at 11:31 AM, Alexandru Ionut Diaconescu <
> alexandruionutdiaconescu at gmail.com> wrote:
> 
>> Hello everyone,
>>
>> Can you please tell me if it is possible in LLVM to cast a `Value*` to an
>> `Instruction*/LoadInst*` if for example `isa<LoadInst>(MyValue)` is true?
>> In my particular piece of code:
>>
>>     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
>> Further, I just need to make `C100->getName()` and I will get the loaded
>> variable.

Looks like you meant to write

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

(i.e., you were missing "{...}" after the "if").

>> I don't think that I can use cast like that. Can you tell me a method to
>> obtain the loaded variable from a Load instruction correspondent to my ICMP
>> instructions? Or better how I can extract the Load instruction from
>> `icmpInstrArray[i]->getOperand(0)`?
>>
>> Thank you a lot !

Hope this helps,
Stephan




More information about the llvm-dev mailing list