summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorErick Ochoa <erick.ochoa@theobroma-systems.com>2020-02-24 20:34:34 +0100
committerErick Ochoa <erick.ochoa@theobroma-systems.com>2020-04-28 23:35:45 +0200
commitaa5eb521d4c4c0fafeabc2fc3db14e88961ce755 (patch)
treed0ad3f1420c0b670108220eb1c3d27261987cb2f /gcc
parent946e7a4483b300fcda426a9cb23b3b51c6fcdfb1 (diff)
Fixes skipping gimple stmt
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ipa-str-reorg-dead-field-eliminate.c18
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))