[LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
António Saragga Seabra
antseabra at gmail.com
Sun Feb 13 11:45:54 PST 2011
Hi Duncan and Reid,
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.
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
More information about the llvm-dev
mailing list