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

To"ro"k Edwin edwintorok at gmail.com
Tue May 5 07:07:25 PDT 2009


On 2009-05-05 17:00, seventh moon wrote:
> 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?"

You should use a constant instead of a load:

Constant *C = ConstantInt::get(Type::Int32Ty, 5);

Note that the constant is not an instruction, but it can be used like
any other Value*.

Best regards,
--Edwin



More information about the llvm-dev mailing list