diff options
Diffstat (limited to 'gcc/gimple-walker.c')
-rw-r--r-- | gcc/gimple-walker.c | 32 |
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); |