[LLVMdev] casting Constant * to value *?

Alexander Poddey alexander.poddey at gmx.net
Wed Mar 18 10:35:01 PDT 2015


John, you are right.
I 'browsed' the doxygen's inheritance diagram.
Shouldn't I then be able to cast Constant * to Value*?

Plugging the retrieved Constant* (from ConstantExpr::getGetElementPtr)
into Instruction->setOperand compiles, but gives me an assertion failure at 
runtime.
I have no access to the code at the moment. I will gather more information 
possibly tomorrow.

Thanks 
Alex  




John Criswell wrote:

> On 3/17/15 8:40 PM, Alexander Poddey wrote:
>> Hi all,
>>
>> extracting datafields of globals, the API code ends up in a Constant *
>>
>>
>> Constant* const_ptr_103 = ConstantExpr::getGetElementPtr(gvar_struct_foo,
>> const_ptr_103_indices);
>>
>> it can be used to initialize e.g. a new instruction like:
>>
>> StoreInst* void_119 = new StoreInst(const_float_102, const_ptr_103,
>> false, label_entry_113);
>>
>>
>> But how about replacing the operand of an already existing instruction
>> using a Constant *?
>>
>> Instruction->setOperand(1,__needs_a_value*_here__);
> 
> If you look at the inheritance tree, you'll see that an llvm::Constant
> is a subclass of llvm::Value.  Therefore, you can use an llvm::Constant
> anywhere in which an llvm::Value is needed.
> 
> To look at the inheritance tree, look at the LLVM doxygen documentation.
> 
> Regards,
> 
> John Criswell
>>
>>
>> Thx
>> Alex
>>
>>
>>
>>
>>   
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 
> 





More information about the llvm-dev mailing list