[llvm-bugs] [Bug 32403] New: NewGVN will fail to fixpoint on some phis with undef
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu Mar 23 20:23:56 PDT 2017
https://bugs.llvm.org/show_bug.cgi?id=32403
Bug ID: 32403
Summary: NewGVN will fail to fixpoint on some phis with undef
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: enhancement
Priority: P
Component: Scalar Optimizations
Assignee: unassignedbugs at nondot.org
Reporter: dberlin at dberlin.org
CC: llvm-bugs at lists.llvm.org
Created attachment 18162
--> https://bugs.llvm.org/attachment.cgi?id=18162&action=edit
undef strikes again.ll
The attached will cause newgvn to infinite loop due to undef in a phi.
It requires a very unfortunate series of events.
We use the same check for whether we can use undef in a phi node as simplify*,
and we need to extend it, it turns out.
Here is what happens:
We have a dom tree that looks like this:
A
/ \
B C
|
..
Note that the first requirement is that B not dominate C and C not dominate B.
We also must visit C before B in RPO (note that here, either could be chosen as
the second block in RPO)
Next, in B and C there are two instructions that end up in the same congruence
class.
We visit C first, so the one in C becomes the leader.
The phi nodes eventually resolve to the instruction in B, which, if you look up
the leader, you get the one in C.
On the next iteration:
// We also special case undef, so that if we have an undef, we can't use
the
// common value unless it dominates the phi block.
if (HasUndef) {
// Only have to check for instructions
if (auto *AllSameInst = dyn_cast<Instruction>(AllSameValue))
if (!DT->dominates(AllSameInst, I))
return E;
The instruction in B dominates the phis, but the instruction in C does not.
So we dutily say "whoops, can't value number this phi to this value"
Which resets the resolution of the phi node cycles.
Which starts again, and gets the same result.
I believe the correct check here is in fact, "does any member of the class of
AllSameInst dominate I"
Since we only would replace it with a member that dominates that phis anyway,
this should be correct.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170324/5ec47f74/attachment.html>
More information about the llvm-bugs
mailing list