[LLVMdev] casting Constant * to value *?

mats petersson mats at planetcatfish.com
Wed Mar 18 10:44:08 PDT 2015


It should work just fine WITHOUT a cast. I use this concept in several
places in my compiler. If you hit an assert, it is likely for some
other reason.

--
Mats

On 18 March 2015 at 17:35, Alexander Poddey <alexander.poddey at gmx.net> wrote:
> 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
>>
>>
>
>
> _______________________________________________
> 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