From 759bafb906ba3addc5ab470ca41455ef452f30ab Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 23 Apr 2016 18:10:05 -0700 Subject: vacuum dead code after unconditional brs --- src/passes/Vacuum.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/passes/Vacuum.cpp b/src/passes/Vacuum.cpp index 863d78f14..ed868f2f9 100644 --- a/src/passes/Vacuum.cpp +++ b/src/passes/Vacuum.cpp @@ -32,14 +32,25 @@ struct Vacuum : public WalkerPass>> { int skip = 0; auto& list = curr->list; size_t size = list.size(); + bool needResize = false; for (size_t z = 0; z < size; z++) { if (list[z]->is()) { skip++; - } else if (skip > 0) { - list[z - skip] = list[z]; + needResize = true; + } else { + if (skip > 0) { + list[z - skip] = list[z]; + } + // if this is an unconditional br, the rest is dead code + Break* br = list[z - skip]->dynCast(); + if (br && !br->condition) { + list.resize(z - skip + 1); + needResize = false; + break; + } } } - if (skip > 0) { + if (needResize) { list.resize(size - skip); } if (!curr->name.is()) { -- cgit v1.2.3