[LLVMdev] [PATCH]: Allow PRE to insert no-cost phi nodes

Philip Reames listmail at philipreames.com
Wed Jan 28 20:21:50 PST 2015


LGTM.  Nice find.

For anyone curious, this case applies to PRE, but not LoadPRE.  We do 
handle full redundancy for loads today.

Philip

On 01/28/2015 03:15 PM, Daniel Berlin wrote:
> Current PRE tries to not increase code size.
> It does this with a check whether or not the number of places it would 
> have to insert is 1 or not.
>
> The problem with this is that the answer could also be "we have to 
> insert in zero places" in the case it's available in all predecessors.
>  :)
>
> Normal dominator based elimination in GVN will not catch these cases 
> because the branches do not dominate the merge point.
>
> A simple example
> int c;
> int d;
> int pre(int foo, int a, int b)
> {
>       int g;
>       if (foo) {
>   c = a+b;
>       } else {
>   d = a+ b;
>       }
> g = a+b;
> return g;
> }
>
> Without this patch, PRE (and GVN) will not eliminate g = a+b.
> With this patch, PRE will create phi(c, d) and eliminate g = a + b.
>
> (It is tremendously more difficult to make current GVN understand the 
> problem, and GCC solves this the same way i'm about to).
>
> The patch looks large because of code movement, but it basically all 
> boils down to changing this check:
>
> if (NumWithout != 1 || NumWith == 0)
>
> to
> if (NumWithout > 1 || NumWith == 0)
>
> and skipping insertion when NumWithout == 0
>
> testcase included.
>
>
>
> _______________________________________________
> 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/20150128/95f8a9be/attachment.html>


More information about the llvm-dev mailing list