[LLVMdev] Assertion `InReg && "Value not in map!"' failed
bhavani krishnan
bhavi63 at yahoo.com
Sun Nov 16 22:41:59 PST 2008
Thanks Nick! ok. I ran through the verifier and this is the issue:
verifying... Instruction does not dominate all uses!
%tmp3 = add i32 %b, %a ; <i32> [#uses=2]
store i32 %tmp3, i32* %0, align 4
Broken module found, compilation aborted!
add is existing instruction in function. store is the instruction I have added to the function. How do I fix this now :(?
Thanks,
Bhavani
--- On Mon, 11/17/08, Nick Lewycky <nicholas at mxc.ca> wrote:
> From: Nick Lewycky <nicholas at mxc.ca>
> Subject: Re: Assertion `InReg && "Value not in map!"' failed
> To: bhavi63 at yahoo.com
> Cc: "LLVM Developers Mailing List" <llvmdev at cs.uiuc.edu>
> Date: Monday, November 17, 2008, 6:17 AM
> bhavani krishnan wrote:
> > Ah! I get it now. Thanks a lot !
> > I changed it to
> BitCastInst(AI,VoidPtrTy,"",j);
> >
> > And now I am getting the following error :(. I have
> been stuck with this error before also. I know I am missing
> out something silly. What is the cause of this error and
> Please let me know how to fix it.
> >
> >
> /home/bhavani/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1130:
> llvm::SDOperand llvm::SelectionDAGLowering::getValue(const
> llvm::Value*): Assertion `InReg && "Value not
> in map!"' failed.
> >
> > I know I am asking lot of questions but I am new to
> LLVM and am finding it hard to figure things out. Appreciate
> any help!
>
> This assertion is late, in the codegen phase. I suspect
> you're sending
> the codegen invalid IR. Try running the your code through
> the verifier.
>
> Nick
>
> > Thanks,
> > Bhavani
> >
> >
> >
> >
> > --- On Mon, 11/17/08, Nick Lewycky
> <nicholas at mxc.ca> wrote:
> >
> >> From: Nick Lewycky <nicholas at mxc.ca>
> >> Subject: Re: [LLVMdev] Assertion
> `castIsValid(getOpcode(), S, Ty) && "Illegal
> BitCast"' failed.
> >> To: bhavi63 at yahoo.com, "LLVM Developers
> Mailing List" <llvmdev at cs.uiuc.edu>
> >> Date: Monday, November 17, 2008, 5:54 AM
> >> bhavani krishnan wrote:
> >>> ok.. So I am trying out what you have
> suggested. I
> >> have written the below code which basically tries
> to write
> >> the constant 10 to a file. myprint is a function
> pointer to
> >> a function which takes char * parameter and writes
> it to
> >> file.
> >>> Value *Ten = ConstantInt::get(Type::Int32Ty,
> 10);
> >>> const Type *VoidPtrTy =
> >> PointerType::getUnqual(Type::Int8Ty);
> >>> AllocaInst *AI = new
> AllocaInst(Type::Int32Ty);
> >>> Value *ST = new StoreInst(Ten,AI,false,4,j);
> >> Realize that StoreInst's don't have a
> result. A
> >> 'store' does not evaluate to a particular
> value at
> >> run time. Its type is Void.
> >>
> >>> Value *BT = new
> >> BitCastInst(ST,VoidPtrTy,"",j);
> >>
> >> Trying to cast (void) to (void*) is invalid.
> Instead, you
> >> should cast the AllocaInst, ala:
> >>
> >> Value *BT = new
> BitCastInst(AI,VoidPtrTy,"",j);
> >>
> >> Nick
> >>
> >>> CallInst *CallPrint =
> CallInst::Create(myprint, BT,
> >> "", j);
> >>> CallPrint->setTailCall(true);
> >>>
> >>> I am getting the following error while
> executing.
> >>> Assertion `castIsValid(getOpcode(), S, Ty)
> &&
> >> "Illegal BitCast"' failed.
> >>> What am I doing wrong :(? I always get stuck
> badly
> >> when these assertions fail :(. Please help me out
> here.
> >> Thanks,
> >>> Bhavani
> >>>
> >>>
> >>>
> >>> --- On Sun, 11/16/08, Eli Friedman
> >> <eli.friedman at gmail.com> wrote:
> >>>> From: Eli Friedman
> <eli.friedman at gmail.com>
> >>>> Subject: Re: [LLVMdev] How do I get the
> result of
> >> an instruction?
> >>>> To: bhavi63 at yahoo.com
> >>>> Cc: "LLVM Developers Mailing
> List"
> >> <llvmdev at cs.uiuc.edu>, "John
> Criswell"
> >> <criswell at uiuc.edu>
> >>>> Date: Sunday, November 16, 2008, 9:22 PM
> >>>> On Sun, Nov 16, 2008 at 7:54 AM, bhavani
> krishnan
> >>>> <bhavi63 at yahoo.com> wrote:
> >>>>> Hi,
> >>>>>
> >>>>> I am writing an optimization pass
> where I need
> >> to
> >>>> instrument the code such that I need to
> store the
> >> results of
> >>>> some instructions in file. Using llc
> -march=cpp
> >> option I
> >>>> figured out how to add a function(say
> writeToFile)
> >> which
> >>>> takes char* parameter and writes to file.
> Now, I
> >> need put in
> >>>> a CallInst which calls writeToFile passing
> the
> >> Instruction
> >>>> result as parameter. How do I do this?
> >>>>> So, in my optimization pass...
> >>>>> Func *myprint = makewriteToFile()
> //creates a
> >> function
> >>>> which writes to file
> >>>>> for (Function::iterator i =
> func->begin(),
> >> e =
> >>>> func->end(); i != e; ++i)
> >>>>> {
> >>>>> blk=i;
> >>>>> for (BasicBlock::iterator j =
> >> blk->begin(),
> >>>> k = blk->end(); j != k; ++j){
> >>>>> Instruction *inst = j;
> >>>>> //if inst satisfies my
> condition,
> >> write
> >>>> reults to file
> >>>>> CallInst *CallPrint =
> >>>> CallInst::Create(myprint, ???,
> "", j);
> >>>>>
> CallPrint->setTailCall(true);
> >>>>> }
> >>>>> }
> >>>>> What do I put in the ???. How do I
> cast
> >> Instruction
> >>>> *inst into char * which can be passed into
> the
> >> function?
> >>>> Well, you can do something like the
> following:
> >>>> define i32 @f() nounwind {
> >>>> entry:
> >>>> %x = alloca i32
> >>>> %resulttoprint = call i32 (...)* @a()
> nounwind
> >>>> ;start instrumentation
> >>>> store i32 %resulttoprint, i32* %x, align
> 4
> >>>> %x1 = bitcast i32* %x to i8*
> >>>> call void @print(i8* %x1) nounwind
> >>>> ;end instrumentation
> >>>> ret i32 %resulttoprint
> >>>> }
> >>>>
> >>>> That said, you might need to do something
> >> that's aware
> >>>> of the type of
> >>>> the result; printing a value in
> human-readable
> >> form
> >>>> requires calling
> >>>> something like printf.
> >>>>
> >>>> -Eli
> >>>
> >>>
> >>>
> _______________________________________________
> >>> 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