[LLVMdev] A problem creating operands for a new IR instruction to the mailing list

seventh moon suigintou_ at hotmail.com
Tue May 5 20:59:11 PDT 2009

Thank you for your answer.  But there is still a problem.

You seem correct about how to define a constant operand.  So I added it into my code, like so:
       Builder.SetInsertPoint(LLVMBB, I);
       Constant *C = ConstantInt::get(APInt(32, 5, false));
        Instruction *newI=Builder.CreateLoad(C,"");

It compiles. But it still aborts at runtime with a complaint that the type is not right.
This leads me to think that immediate loads are not generated with the CreateLoad 

Another person's reply to my question indicated that a way to avoid inserting the 
immediate load entirely; but that is also not what I want, because my explicit purpose 
in inserting this load is to claim a register.

Thank you,
Kao Chang

Date: Tue, 5 May 2009 16:07:33 +0200
From: meurant.olivier at gmail.com
To: llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] A problem creating operands for a new IR instruction	to the mailing list

If you want an immediate constant value, ConstantInt::get(APInt(32, 5, false)) will perhaps help you ?


2009/5/5 seventh moon <suigintou_ at hotmail.com>

I have a question about inserting instructions into the LLVM IR.  I can insert instructions, but my operands do not have the right type, so it fails an assertion at runtime.

I am trying to insert an immediate load instructions, as a means of claiming a new register.

Here is what I do:
    Builder.SetInsertPoint(LLVMBB, I);

// The following line looks to me like it would have a chance o!
 f loading either
// address 5, or else immediate value 5. Unfortunately, it does neither. It compiles

// but crashes at runtime, that the type of the operand is incompatible
        Instruction *newI=Builder.CreateLoad(5,"");

// I also tested this, just to do a little sanity check. It also compiles then

// crashes, for the obvious reason that the operand is a register, but an address
// or an immediate value is expected.

        //Instruction *newI=Builder.CreateLoad(I->getOperand(1),""); // also wrong

So to say it simply, my question is, "How can I create a new Value*, which indicates
an immediate value, such as immediate value 5?"

Thank you for your assistance,
Kao Chang

 你自己 — Windows Live Spaces


LLVM Developers mailing list

LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu


隨身的 Windows Live Messenger 和 Hotmail,不限時地掌握資訊盡在指間 — Windows Live for Mobile
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090506/3a96d73d/attachment.html>

More information about the llvm-dev mailing list