This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR82217
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 15 Sep 2017 11:18:38 +0200 (CEST)
- Subject: [PATCH] Fix PR82217
- Authentication-results: sourceware.org; auth=none
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
2017-09-15 Richard Biener <rguenther@suse.de>
PR tree-optimization/82217
* tree-ssa-sccvn.c (visit_phi): Properly handle all VN_TOP
but not undefined case.
* gcc.dg/torture/pr82217.c: New testcase.
Index: gcc/tree-ssa-sccvn.c
===================================================================
--- gcc/tree-ssa-sccvn.c (revision 252780)
+++ gcc/tree-ssa-sccvn.c (working copy)
@@ -3901,13 +3901,10 @@ visit_phi (gimple *phi)
if only a single edge is exectuable use its value. */
if (n_executable <= 1)
result = seen_undef ? seen_undef : sameval;
- /* If we saw only undefined values create a new undef SSA name to
- avoid false equivalences. */
+ /* If we saw only undefined values and VN_TOP use one of the
+ undefined values. */
else if (sameval == VN_TOP)
- {
- gcc_assert (seen_undef);
- result = seen_undef;
- }
+ result = seen_undef ? seen_undef : sameval;
/* First see if it is equivalent to a phi node in this block. We prefer
this as it allows IV elimination - see PRs 66502 and 67167. */
else if ((result = vn_phi_lookup (phi)))
Index: gcc/testsuite/gcc.dg/torture/pr82217.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr82217.c (nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr82217.c (working copy)
@@ -0,0 +1,32 @@
+/* { dg-do compile } */
+
+int a, b, c;
+
+void fn1 ()
+{
+ while (1)
+ {
+ if (c)
+ goto L2;
+ break;
+ }
+ if (c)
+ {
+L1:
+ {
+ int g[1];
+ if (b)
+ goto L1;
+ goto L1;
+L2:
+ for (a = 0; a;)
+ goto L1;
+ }
+ }
+}
+
+int main ()
+{
+ fn1 ();
+ return 0;
+}