[LLVMdev] Updating PHI for Instruction Domination?

Ryan Taylor ryta1203 at gmail.com
Sun Feb 5 20:49:15 PST 2012

On Sun, Feb 5, 2012 at 5:15 PM, Eric Christopher <echristo at apple.com> wrote:

> On Feb 2, 2012, at 5:13 PM, Ryan Taylor wrote:
> > So my best bet is to try and work in reg2mem mode and then go back to
> mem2reg?
> >
> I wouldn't. That sounds painful.
> > I'm curious, it seems though when you split a block that the phis get
> updated, right?
> Sure. There's code in splitBasicBlock to do this. It should just take a
> little bit of work to get what you want done.
> -eric

Yes, the first DOES sound painful (I want to avoid it) and the second is
not an option. I'm adding a second path in a loop.

The old path: BB1->BB2/BB3, BB2->BB1/BB3, BB3->n/a

The new path: BB1->H/BB2, BB2->F/K, H->F, K->F,  F->BB1/G, G->BB3

There are PHI nodes in BB1 that come in from BB2 for values defined in BB2.
With the new possible path: BB1->H->F, BB2. Without adding new PHIs or
Values, there exists a dominance instruction issue. So I want to create
PHIs in F for each value in BB2 that is used in BB1. The update the PHI
Values in BB1 (that used to come from BB2) to the new values in F (which
are getting values from BB2/H).

The problem is that there is no way to copy the value from BB2, since there
exists no Value constructor!?

This seems like a pretty large limitation anytime anyone wants to add a
branch inside a loop? Is there an easier way to get what I want that I'm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120205/a55d6582/attachment.html>

More information about the llvm-dev mailing list