[PATCH] D22305: [BasicAA] Strip phi nodes, when all incoming values are the same.
Ehsan A Amiri via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 14 14:46:07 PDT 2016
Yes, IIUC that is from an inlined function that has GVN run on it earlier.
all those pre variables has "i" suffix which I believe are created by
inlining.
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:38 PM
Subject: Re: [PATCH] D22305: [BasicAA] Strip phi nodes, when all
incoming values are the same.
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 )
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>
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.
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>
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 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> wrote:
On Thu, Jul 14, 2016 at 7:09 AM, Ehsan A Amiri <
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/0cbca0bb/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/0cbca0bb/attachment.gif>
More information about the llvm-commits
mailing list