[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
instruction?
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 ?
Olivier.
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
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
_________________________________________________________________
隨身的 Windows Live Messenger 和 Hotmail,不限時地掌握資訊盡在指間 — Windows Live for Mobile
http://3c.msn.com.tw/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