[LLVMdev] Updating value from PHI

Ryan Taylor ryta1203 at gmail.com
Wed Mar 7 16:08:17 PST 2012


Here is the code snippet that I am using to create the PHIs in the loop
according to the PHIs in the new preheader. At this point I have already
redirected the loop backedge and removed the preheader from the loop.

            for (BasicBlock::iterator II = loopHeaderBB->begin();
(PN=dyn_cast<PHINode>(II)); ++II) {
               // remove loop back PHI and add it to split BB
               errs()<<*II<<"\n";
               PHINode *newPHIvalue = PHINode::Create(PN->getType(), 2,
PN->getName().str(), splitBB->getFirstInsertionPt());
               int IDX = PN->getBasicBlockIndex(splitBB);
               while (IDX != -1) {
                  Value *oldValue = PN->getIncomingValue((unsigned(IDX)));
                  PN->removeIncomingValue(IDX, false);
                  newPHIvalue->addIncoming(oldValue, loopLatchBB);
                  newPHIvalue->addIncoming(PN, loopHeaderBB);
                  IDX = PN->getBasicBlockIndex(splitBB);
               }
            }

On Wed, Mar 7, 2012 at 4:04 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:

> I have attached a case of what I am trying to do, I'm pretty sure I'm just
> missing some simple API call. In the cfg you can see that although Im
> setting "lsr.iv441" as "lsr.iv44" from for.body.387.i it's not propagating
> that through the block or graph.
>
>
> On Wed, Mar 7, 2012 at 12:03 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:
>
>> I am splitting a one BB loop into two BB.
>>
>> Basically, the one loop BB has 3 incoming values, one form back edge two
>> from other edges. I want to extract the PHIs from the other two edges out
>> into it's own BB and delete that from the loop, then redirect the backedge
>> to the loopbody (non extracted portion) and create a new PHI coming from
>> the extracted BB and the backedge.
>>
>> I can do this; however, the PHIs following in all the other BBs are not
>> getting updated, neither are the statements in the loopbody.
>>
>> What is the easieset way to propagate these changes downward?
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120307/33f31947/attachment.html>


More information about the llvm-dev mailing list