Hi Ryan,<div>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,.</div><div><br></div><div>Thanks </div><div>~Umesh </div><div><br></div>
<div><br><div class="gmail_quote">On Thu, Jul 19, 2012 at 2:37 AM, ryan baird <span dir="ltr"><<a href="mailto:ryanrbaird@gmail.com" target="_blank">ryanrbaird@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I just accidently sent a partially complete email, so this contains the rest (sorry!)<br>I'm working on translating llvm's optimized intermediate code to another
 compiler's intermediate code, and I'm working on the PHI instruction.<br><br>Here's an example phi instruction to help explain what I'm trying to do: %inc25 = phi i32 [ 1, %entry ], [ %inc, %for.body ]<br>


<br>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".<br>
<br>So first, I'm iterating through my function and basicblock: <br>    int phi = 0;<br>    Function::iterator func_bblock_itr = func->begin();<br>    for(; func_bblock_itr != func->end(); ++func_bblock_itr)<br>


    {<br>        BasicBlock::iterator bblock_inst_itr = func_bblock_itr->begin();<br>        for(; bblock_inst_itr != func_bblock_itr->end(); ++bblock_inst_itr)<br>        {<br>Then, I look for PHI instructions: <br>


            if(bblock_inst_itr->getOpcode() == Instruction::PHI) {<br>If I find one, I allocate space: <br>                string name = "phi";<br>                name.insert(3,to_string(phi));<br>                Twine tname= Twine(name);<br>


                AllocaInst alloca = AllocaInst(bblock_inst_itr->getOperand(0)->getType(),tname,func_bblock_itr->begin());<br>and then i go through the operands one by one to find where to put store instructions: <br>


                for(unsigned int i = 0; i < bblock_inst_itr->getNumOperands();i++) {<br>                    Value *v = bblock_inst_itr->getOperand(i);<br>Here's where I don't know what to do: I want to create a store instruction in that place:<br>

                    StoreInst(v, alloca?, func_bblock_itr?);<br>               }<br>          }<br>}<br><br>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!<br>

<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br></div>