summaryrefslogtreecommitdiff
path: root/gcc/gimple-walker.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/gimple-walker.c')
-rw-r--r--gcc/gimple-walker.c32
1 files changed, 7 insertions, 25 deletions
diff --git a/gcc/gimple-walker.c b/gcc/gimple-walker.c
index b1cf0c3a51d..1a858419c27 100644
--- a/gcc/gimple-walker.c
+++ b/gcc/gimple-walker.c
@@ -169,37 +169,19 @@ GimpleWalker::_walk(basic_block bb)
{
gcc_assert(bb);
bool first = true;
- for (auto gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
+ gimple_stmt_iterator gsi = gsi_start_bb(bb);
+
+ while (!gsi_end_p(gsi))
{
gimple *stmt = gsi_stmt(gsi);
walk(stmt);
-
- if (_deleted && !first)
- {
- unlink_stmt_vdef (stmt);
- gsi_remove(&gsi, true);
- gsi_prev(&gsi);
- }
-
- bool old_deleted = _deleted;
- while (_deleted && first)
- {
- unlink_stmt_vdef (stmt);
- gsi_remove(&gsi, true);
- old_deleted = _deleted;
- _deleted = false;
- stmt = gsi_stmt(gsi);
- if (!stmt) break; // we might have deleted and was end of basic block?
- walk(stmt);
- if (gsi_end_p(gsi)) break;
- }
-
- if (old_deleted && gsi_end_p (gsi)) break;
-
- first = false;
+ if (_deleted) unlink_stmt_vdef (stmt);
+ if (_deleted) { gsi_remove(&gsi, true); }
+ else { gsi_next(&gsi); }
_deleted = false;
}
+
for (gimple_stmt_iterator gsi = gsi_start_phis(bb); !gsi_end_p(gsi); gsi_next(&gsi))
{
gimple *stmt = gsi_stmt(gsi);