Value* to Instruction*/LoadInst* casting

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(V1) || isa(V2)){

if(isa(icmpInstrArray[i]->getOperand(0)))
LoadInst *LD100 = cast(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.

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 !

The compilation error is : error: ‘LD100’ was not declared in this scope.

Hi Alexandru,

The compilation error is : `error: ‘LD100’ was not declared in this scope.`

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

Alexandru Ionut Diaconescu 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?

http://llvm.org/docs/ProgrammersManual.html#the-isa-cast-and-dyn-cast-templates

  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

You're missing braces after the if-statement.

Nick

Hello,

Thank you for answering. I copy paste-it not precisely (I had the bracket), but the array was not ok. Not it is solved.

Thank you a lot !

Hi,

Thank you Stephan,

I solved it already. I copy paste it wrongly. The problem was with an array not well filled.

Thank you !