[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