diff options
author | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-02-24 20:34:34 +0100 |
---|---|---|
committer | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-04-28 23:35:45 +0200 |
commit | aa5eb521d4c4c0fafeabc2fc3db14e88961ce755 (patch) | |
tree | d0ad3f1420c0b670108220eb1c3d27261987cb2f /gcc | |
parent | 946e7a4483b300fcda426a9cb23b3b51c6fcdfb1 (diff) |
Fixes skipping gimple stmt
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ipa-str-reorg-dead-field-eliminate.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ipa-str-reorg-dead-field-eliminate.c b/gcc/ipa-str-reorg-dead-field-eliminate.c index 09387ff7800..479f02abcbd 100644 --- a/gcc/ipa-str-reorg-dead-field-eliminate.c +++ b/gcc/ipa-str-reorg-dead-field-eliminate.c @@ -2426,12 +2426,28 @@ rewrite_basic_block (basic_block bb, t_map &type_map, t_map &inverse) { gcc_assert (bb); + bool is_first = true; for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple *stmt = gsi_stmt (gsi); bool deleted = rewrite_stmt (stmt, gsi, type_map, inverse); - if (deleted) { test_log("deleted ", 0); } + + if (deleted && !is_first) + { + gsi_prev(&gsi); + } + + while (deleted && is_first) + { + stmt = gsi_stmt(gsi); + deleted = rewrite_stmt (stmt, gsi, type_map, inverse); + if (gsi_end_p(gsi)) break; + } + + if (deleted && gsi_end_p (gsi)) break; + + is_first = false; } for (gimple_stmt_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi)) |