From 0524367e2aa8f4e021a719f5fcfab642dfe62dcb Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 23 Oct 2017 11:14:40 +0000 Subject: [PATCH] re PR tree-optimization/82129 (ICE in compute_antic, at tree-ssa-pre.c:2447) 2017-10-23 Richard Biener PR tree-optimization/82129 Revert 2017-08-01 Richard Biener PR tree-optimization/81181 * tree-ssa-pre.c (compute_antic_aux): Defer clean() to ... (compute_antic): ... end of iteration here. From-SVN: r254005 --- gcc/ChangeLog | 10 ++++++++++ gcc/tree-ssa-pre.c | 12 ++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ebda3cd5500..3ed0c4e42d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2017-10-23 Richard Biener + + PR tree-optimization/82129 + Revert + 2017-08-01 Richard Biener + + PR tree-optimization/81181 + * tree-ssa-pre.c (compute_antic_aux): Defer clean() to ... + (compute_antic): ... end of iteration here. + 2017-10-23 Richard Sandiford * target.def (starting_frame_offset): New hook. diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 4861a4c231f..cad7934f23e 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -2082,8 +2082,7 @@ static sbitmap has_abnormal_preds; ANTIC_OUT[BLOCK] = phi_translate (ANTIC_IN[succ(BLOCK)]) ANTIC_IN[BLOCK] = clean(ANTIC_OUT[BLOCK] U EXP_GEN[BLOCK] - TMP_GEN[BLOCK]) - - Note that clean() is deferred until after the iteration. */ +*/ static bool compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) @@ -2219,8 +2218,7 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) bitmap_value_insert_into_set (ANTIC_IN (block), expression_for_id (bii)); - /* clean (ANTIC_IN (block)) is defered to after the iteration converged - because it can cause non-convergence, see for example PR81181. */ + clean (ANTIC_IN (block)); if (!bitmap_set_equal (old, ANTIC_IN (block))) changed = true; @@ -2453,12 +2451,6 @@ compute_antic (void) gcc_checking_assert (num_iterations < 500); } - /* We have to clean after the dataflow problem converged as cleaning - can cause non-convergence because it is based on expressions - rather than values. */ - FOR_EACH_BB_FN (block, cfun) - clean (ANTIC_IN (block)); - statistics_histogram_event (cfun, "compute_antic iterations", num_iterations); -- 2.30.2