[LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'

Duncan Sands baldrick at free.fr
Mon Feb 14 01:11:02 PST 2011


Hi António,

> Thanks for your comments and suggestions. I was puzzled because
> assigning to a local variable in the tutorial example works. For
> example:
>
> var a = cos(1) in (
> 2 * a );
>
> emits
>
> declare double @cos(double)
> define double @0() {
> entry:
>    ret double 0x3FF14A280FB5068C
> }
>
> and we get the right answer 1.08060461.

note that it did not declare a global variable "a".  Probably it initialized
"a" (however it was defined) with a call of "cos(1)" which the optimizers
evaluated as the constant 0x3FF14A280FB5068C.

Ciao, Duncan.
>
>
>
> On Sun, Feb 13, 2011 at 5:09 PM, Duncan Sands<baldrick at free.fr>  wrote:
>>
>> Hi Anton,
>>
>>> Oh, I thought that after "codegening" cos(0) would get me double 1.0
>>> (assigment is working for anything like: global a = 1/3 + 2 /3 for
>>> example)   What would be the best way to make assigments involving
>>> functions, like  global a = cos(0);
>>> without getting the assertion arising from  InitVal =
>>> cast<Constant>(Init->Codegen()); ?
>>
>> the problem is that you are performing a function call (to "cos").  A function
>> call is simply not a constant in the sense of LLVM (even if it is a constant in
>> the sense of mathematics): it needs to be executed to work out what the return
>> value is, and something that needs to be executed is not a Constant.
>>
>> Probably you should have a constructor call "cos" and assign the return value
>> to your global.  To work out how to do this I suggest you write the C code
>> corresponding to assigning cos(0) to a and stick it in http://llvm.org/demo to
>> see how it is handled.
>>
>> Ciao, Duncan.
>> _______________________________________________
>> 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