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 >
Maybe Matching 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*'