[PATCH] D22305: [BasicAA] Strip phi nodes, when all incoming values are the same.

Daniel Berlin via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 14 14:37:58 PDT 2016


This still has a pre-phi named variable in it, which means GVN has been run
on it once (GVN is the only thing in llvm that will create variables with
names that have pre-phi in them) :)

In any case, i've debugged this enough on the existing file, i'll send an
update in a second.


On Thu, Jul 14, 2016 at 2:32 PM, Ehsan A Amiri <amehsan at ca.ibm.com> wrote:

> *(See attached file: t.ll)*
> This one should be correct. (Previous one seems to be something from the
> middle of GVN :P )
>
> [image: Inactive hide details for Daniel Berlin ---07/14/2016 05:12:47
> PM---Note: This already had GVN run once on it, do you have the]Daniel
> Berlin ---07/14/2016 05:12:47 PM---Note: This already had GVN run once on
> it, do you have the one before that? On Thu, Jul 14, 2016 at
>
> From: Daniel Berlin <dberlin at dberlin.org>
> To: Ehsan A Amiri/Toronto/IBM at IBMCA
> Cc: Hal Finkel <hfinkel at anl.gov>, llvm-commits <
> llvm-commits at lists.llvm.org>,
> reviews+D22305+public+92ca108e50bc4651 at reviews.llvm.org
> Date: 07/14/2016 05:12 PM
>
> Subject: Re: [PATCH] D22305: [BasicAA] Strip phi nodes, when all incoming
> values are the same.
> ------------------------------
>
>
>
> Note: This already had GVN run once on it, do you have the one before that?
>
>
> On Thu, Jul 14, 2016 at 1:53 PM, Ehsan A Amiri <*amehsan at ca.ibm.com*
> <amehsan at ca.ibm.com>> wrote:
>
>    I can see the problem with the following command line and attached
>    file
>
>    opt -gvn t.ll
>
> * (See attached file: t.ll)*
>
>    My clang is almost a week old.
>
>    [image: Inactive hide details for Daniel Berlin ---07/14/2016 04:27:43
>    PM---Actually, can you please attach a .ll file and an opt comma]Daniel
>    Berlin ---07/14/2016 04:27:43 PM---Actually, can you please attach a .ll
>    file and an opt command line that reproduces the problem?
>
>    From: Daniel Berlin <*dberlin at dberlin.org* <dberlin at dberlin.org>>
>    To: Ehsan A Amiri/Toronto/IBM at IBMCA
>    Cc: Hal Finkel <*hfinkel at anl.gov* <hfinkel at anl.gov>>, llvm-commits <
>    *llvm-commits at lists.llvm.org* <llvm-commits at lists.llvm.org>>,
>    *reviews+D22305+public+92ca108e50bc4651 at reviews.llvm.org*
>    <reviews%2BD22305%2Bpublic%2B92ca108e50bc4651 at reviews.llvm.org>
>    Date: 07/14/2016 04:27 PM
>    Subject: Re: [PATCH] D22305: [BasicAA] Strip phi nodes, when all
>    incoming values are the same.
>    ------------------------------
>
>
>
>    Actually, can you please attach a .ll file and an opt command line
>    that reproduces the problem?
>    The clang command line you have is very sensitive to versions, etc.
>
>    I cannot get your issue to reproduce with the clang i have installed
>    that can target powerpc-linux (and the issue does not reproduce with your
>    testcase on x86) :)
>
>    While debugging a bit, note that there is at least one obvious bug in
>    GVN that may affect this, by inspection:
>
>    When GVN splits a critical edge, it never adds the new block to the
>    iteration order (at all), even though it inserts into it.
>    So they will not get processed until the next iteration of GVN on the
>    function, even though they have code in them.  While this is okay from a
>    correctness standpoint, it may block optimization of certain things
>    (including the cases you've discovered).  In practice, there is no way to
>    perfectly solve that without pre-splitting all critical edges, but you
>    should get the same effect if we throw the critical edge block and then
>    it's successors (including the current blcok) into bbvect after the current
>    block again.
>
>    It is also missing a real phi simplification.
>    While simplifyinstruction will check if all arguments are trivially
>    the same, that is not the real test that should be performed.
>
>    It should be doing VN.lookup on each argument and seeing if they come
>    up with the the same value number.
>
>    Once you attach the .ll file, i'll fix these and see if it fixes your
>    testcase, and if not, debug further.
>
>
>    On Thu, Jul 14, 2016 at 10:11 AM, Daniel Berlin <*dberlin at dberlin.org*
>    <dberlin at dberlin.org>> wrote:
>
>
>          On Thu, Jul 14, 2016 at 7:09 AM, Ehsan A Amiri <
>          *amehsan at ca.ibm.com* <amehsan at ca.ibm.com>> wrote:
>          This is order of events:
>
>          This order cannot be correct if the solution I gave (or adding
>          simplification to *some place in GVN*) does not work.  Or GVN is broken in
>          other ways.
>
>          1) GVN starts looking at the function. At this point the phi
>          node has two different incoming values.
>          2) GVN performs an RAUW. The phi is converted to the one that
>          has two identincal incoming values.
>
>
>          At this point, it should now process the phi instruction again
>          before it processes the load, because it is doing a reverse postorder
>          traversal.
>          When it did that, the phi should have been simplified
>          So why did that not happen?
>
>          Given the complexity of fixing the real problem,
>
>
>          Look, i understand why you want to just fix this in AA and be
>          done with it.
>          Really, I do.
>
>          I understand you have spent a lot of time on this bug, and I
>          greatly appreciate that.
>          But I really want to understand what is going on before we try
>          to actually fix it.
>          I have a good understanding of what happens once the bad answer
>          gets into memdep (and thank you for that!), but i still have trouble seeing
>          why it lived long enough to get there.
>
>          To that end, so you don't have to spend more time running around
>          for me,  i'll take over this bug, and either figure out why GVN lets this
>          PHI live to the point it gets an AA query about it (and fix it/decide it
>          can't be fixed), or commit the AA patch for you if we decide it can't be
>          fixed.
>
>          My ETA is by friday.
>
>          I assume the testcase in the bug is the one we are still using,
>          right?
>          (If not, if you can attach it, that would be helpful)
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160714/4c3d263f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160714/4c3d263f/attachment.gif>


More information about the llvm-commits mailing list