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>