Anton Skvorts
2011-Feb-13 00:03 UTC
[LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
Hi Duncan
Many many thanks, it works now!
But there are still some details I must be missing. I'm getting an assertion
when I try the following assignment in my script:
global c = cos(1);
Assertion failed: isa<X>(Val) && "cast<Ty>() argument
of incompatible
type!", file c:/llvm-source-2.7/include/llvm/Support/Casting.h, line 200
However, running for example
cos(1);
global a = 0.5403023058681398; # cos(1) = 0.5403023058681398
global b = 1 + 1;
works fine
@a = global double 0x3FE14A280FB5068C ; <double*> [#uses=0]
@b = global double 2.000000e+000 ; <double*> [#uses=0]
define double @0() {
entry:
ret double 0x3FE14A280FB5068C
}
The relevant code is
...
Value *InitVal;
InitVal = Init->Codegen();
GlobalVariable * globval = *new* *GlobalVariable*(*TheModule,
InitVal->getType(), *false*,
llvm::GlobalValue::*ExternalLinkage*, cast<Constant>(InitVal),
Twine(GlobalName) );
Any help, as always, would be really much appreciated!
Anton Skvorts
2011/2/12 Duncan Sands <baldrick at free.fr>
> Hi Anton,
>
> > I'm getting the following error
> >
> > error: invalid conversion from `const llvm::Value*' to
> `llvm::Constant*'
> >
> > How may I make this conversion? Any help would be much appreciated!
>
>
> cast<Constant>(whatever)
>
> Ciao, Duncan.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20110213/785d31fe/attachment.html>
Duncan Sands
2011-Feb-13 12:20 UTC
[LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
Hi Anton,> But there are still some details I must be missing. I'm getting an assertion > when I try the following assignment in my script: > global c = cos(1); > Assertion failed: isa<X>(Val) && "cast<Ty>() argument of incompatible type!",I think this is telling you that cos(1) is not a constant. Ciao, Duncan.
Anton Skvorts
2011-Feb-13 16:35 UTC
[LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
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()); ?
I made some changes and now my code basically works, except in
assigments like the one above. It is a little bit frustrating because
is the main thing preventing me finishing my little silly scripting
language for monte carlo simulations.
Value *GlobalExprAST::Codegen() {
for (unsigned i = 0, e = GlobalNames.size(); i != e; ++i) {
const std::string &GlobalName = GlobalNames[i].first;
ExprAST *Init = GlobalNames[i].second;
Constant *InitVal;
InitVal = cast<Constant>(Init->Codegen());
if (InitVal == 0) return 0;
GlobalVariable * globval = new GlobalVariable(*TheModule,
InitVal->getType(), false, llvm::GlobalValue::ExternalLinkage,
InitVal, Twine(GlobalName) );
}
}
Thank you very much for our help
Anton
2011/2/13 Duncan Sands <baldrick at free.fr>:> Hi Anton,
>
>> But there are still some details I must be missing. I'm getting an
assertion
>> when I try the following assignment in my script:
>> global c = cos(1);
>> Assertion failed: isa<X>(Val) && "cast<Ty>()
argument of incompatible type!",
>
> I think this is telling you that cos(1) is not a constant.
>
> Ciao, Duncan.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
Reasonably Related Threads
- [LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
- [LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
- [LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
- [LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'
- [LLVMdev] conversion from 'const llvm::Value*' to 'llvm::Constant*'