diff options
author | Michael Matz <matz@suse.de> | 2012-05-03 02:32:08 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2012-05-03 02:32:08 +0000 |
commit | 0285a18ecdb2cb32b6fa00b31eff14673b5e1116 (patch) | |
tree | fdd5f2155279c26ca348fa3a4790e73f240582ec /gcc/tree-ssa-dse.c | |
parent | f5c1a6331201bf9f305deeeb8ddd16f6c0cb75c0 (diff) | |
download | gcc-0285a18ecdb2cb32b6fa00b31eff14673b5e1116.zip gcc-0285a18ecdb2cb32b6fa00b31eff14673b5e1116.tar.gz gcc-0285a18ecdb2cb32b6fa00b31eff14673b5e1116.tar.bz2 |
re PR bootstrap/53197 (bootstrap comparison failure)
PR bootstrap/53197
* tree-ssa-dse.c (dse_optimize_stmt): Take pointer to
iterator.
(dse_enter_block): Properly iterate the whole sequence even
if the last statement was removed.
From-SVN: r187074
Diffstat (limited to 'gcc/tree-ssa-dse.c')
-rw-r--r-- | gcc/tree-ssa-dse.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c index bf44580..5fdba8c 100644 --- a/gcc/tree-ssa-dse.c +++ b/gcc/tree-ssa-dse.c @@ -199,9 +199,9 @@ dse_possible_dead_store_p (gimple stmt, gimple *use_stmt) post dominates the first store, then the first store is dead. */ static void -dse_optimize_stmt (gimple_stmt_iterator gsi) +dse_optimize_stmt (gimple_stmt_iterator *gsi) { - gimple stmt = gsi_stmt (gsi); + gimple stmt = gsi_stmt (*gsi); /* If this statement has no virtual defs, then there is nothing to do. */ @@ -252,7 +252,7 @@ dse_optimize_stmt (gimple_stmt_iterator gsi) if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, " Deleted dead store '"); - print_gimple_stmt (dump_file, gsi_stmt (gsi), dump_flags, 0); + print_gimple_stmt (dump_file, gsi_stmt (*gsi), dump_flags, 0); fprintf (dump_file, "'\n"); } @@ -261,7 +261,7 @@ dse_optimize_stmt (gimple_stmt_iterator gsi) /* Remove the dead store. */ bb = gimple_bb (stmt); - if (gsi_remove (&gsi, true)) + if (gsi_remove (gsi, true)) bitmap_set_bit (need_eh_cleanup, bb->index); /* And release any SSA_NAMEs set in this statement back to the @@ -277,8 +277,14 @@ dse_enter_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED, { gimple_stmt_iterator gsi; - for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi_prev (&gsi)) - dse_optimize_stmt (gsi); + for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi);) + { + dse_optimize_stmt (&gsi); + if (gsi_end_p (gsi)) + gsi = gsi_last_bb (bb); + else + gsi_prev (&gsi); + } } /* Main entry point. */ |