[LLVMdev] Phi translation
Umesh Kalappa
umesh.kalappa0 at gmail.com
Thu Jul 19 00:52:21 PDT 2012
Hi Ryan,
I may be thinking loud here ,You run the reg2mem pass on the optimized IR
using opt tool,that will remove the phi dependency in the CFG,.
Thanks
~Umesh
On Thu, Jul 19, 2012 at 2:37 AM, ryan baird <ryanrbaird at gmail.com> wrote:
> I just accidently sent a partially complete email, so this contains the
> rest (sorry!)
> I'm working on translating llvm's optimized intermediate code to another
> compiler's intermediate code, and I'm working on the PHI instruction.
>
> Here's an example phi instruction to help explain what I'm trying to do:
> %inc25 = phi i32 [ 1, %entry ], [ %inc, %for.body ]
>
> What I would want to do here is allocate some memory memory (i'm trying to
> use %phi1 = alloca i32, allign 4 ). Then, I want to go to the %entry block
> and say "store i32 1, i32* %phi1", and in the %for.body I want to add
> "store i32 1, i32* %phi1".
>
> So first, I'm iterating through my function and basicblock:
> int phi = 0;
> Function::iterator func_bblock_itr = func->begin();
> for(; func_bblock_itr != func->end(); ++func_bblock_itr)
> {
> BasicBlock::iterator bblock_inst_itr = func_bblock_itr->begin();
> for(; bblock_inst_itr != func_bblock_itr->end(); ++bblock_inst_itr)
> {
> Then, I look for PHI instructions:
> if(bblock_inst_itr->getOpcode() == Instruction::PHI) {
> If I find one, I allocate space:
> string name = "phi";
> name.insert(3,to_string(phi));
> Twine tname= Twine(name);
> AllocaInst alloca =
> AllocaInst(bblock_inst_itr->getOperand(0)->getType(),tname,func_bblock_itr->begin());
> and then i go through the operands one by one to find where to put store
> instructions:
> for(unsigned int i = 0; i <
> bblock_inst_itr->getNumOperands();i++) {
> Value *v = bblock_inst_itr->getOperand(i);
> Here's where I don't know what to do: I want to create a store instruction
> in that place:
> StoreInst(v, alloca?, func_bblock_itr?);
> }
> }
> }
>
> Is this a decent approach to getting the instructions inserted? and what
> do I put to get the pointer in the store instruction and the basicblock,
> the current code gives me a bunch of errors. Any help would be
> appreciated, thanks!
>
> _______________________________________________
> 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/20120719/27135498/attachment.html>
More information about the llvm-dev
mailing list