From: Bill Schmidt Date: Fri, 29 Sep 2017 14:55:14 +0000 (+0000) Subject: re PR tree-optimization/82337 (ICE: SSA corruption at tree-ssa-coalesce.c:1010) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e75210d645630f12bf149043cf6ae51829f5ed78;p=gcc.git re PR tree-optimization/82337 (ICE: SSA corruption at tree-ssa-coalesce.c:1010) [gcc] 2017-09-29 Bill Schmidt PR tree-optimization/82337 * gimple-ssa-strength-reduction.c (find_phi_def): Don't record a phi definition if the PHI result appears in an abnormal PHI. (find_basis_for_base_expr): Don't record a basis if the LHS of the basis appears in an abnormal PHI. [gcc] 2017-09-29 Bill Schmidt PR tree-optimization/82337 * gcc.c-torture/compile/pr82337.c: New file. From-SVN: r253293 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6212c81966..63fbd5910aa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-09-29 Bill Schmidt + + PR tree-optimization/82337 + * gimple-ssa-strength-reduction.c (find_phi_def): Don't record a + phi definition if the PHI result appears in an abnormal PHI. + (find_basis_for_base_expr): Don't record a basis if the LHS of the + basis appears in an abnormal PHI. + 2017-09-29 Richard Biener * graphite-isl-ast-to-gimple.c diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c index b37ce35e36e..42320ff6682 100644 --- a/gcc/gimple-ssa-strength-reduction.c +++ b/gcc/gimple-ssa-strength-reduction.c @@ -488,7 +488,8 @@ find_phi_def (tree base) c = base_cand_from_table (base); - if (!c || c->kind != CAND_PHI) + if (!c || c->kind != CAND_PHI + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (gimple_phi_result (c->cand_stmt))) return 0; return c->cand_num; @@ -557,6 +558,11 @@ find_basis_for_base_expr (slsr_cand_t c, tree base_expr) gimple_bb (one_basis->cand_stmt))) continue; + tree lhs = gimple_assign_lhs (one_basis->cand_stmt); + if (lhs && TREE_CODE (lhs) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs)) + continue; + if (!basis || basis->cand_num < one_basis->cand_num) basis = one_basis; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4cca0604dff..5bb4a2fd47a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-09-29 Bill Schmidt + + PR tree-optimization/82337 + * gcc.c-torture/compile/pr82337.c: New file. + 2017-09-29 Javier Miranda * gnat.dg/unchecked_union3.adb: New testcase. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr82337.c b/gcc/testsuite/gcc.c-torture/compile/pr82337.c new file mode 100644 index 00000000000..f8afa746adb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr82337.c @@ -0,0 +1,25 @@ +/* PR82337: SLSR needs to prevent abnormal SSA names from + serving as a basis. */ +char *a, *b, *c; + +struct d { + short e; + char f[]; +}; + +extern void j (void); + +void +g() { + struct d *h; + char *i; + int d; + do { + i = h->f + d; + 20 ? j() : 0; + i = c; + if (__builtin_setjmp (h)) + b = h->f + d; + d = (int)(*i); + } while (a); +}