|
@@ -14,9 +14,12 @@ void DeadCodeEliminationPass(IR::Program& program) {
|
|
|
// We iterate over the instructions in reverse order.
|
|
// We iterate over the instructions in reverse order.
|
|
|
// This is because removing an instruction reduces the number of uses for earlier instructions.
|
|
// This is because removing an instruction reduces the number of uses for earlier instructions.
|
|
|
for (IR::Block* const block : program.post_order_blocks) {
|
|
for (IR::Block* const block : program.post_order_blocks) {
|
|
|
- for (IR::Inst& inst : block->Instructions() | std::views::reverse) {
|
|
|
|
|
- if (!inst.HasUses() && !inst.MayHaveSideEffects()) {
|
|
|
|
|
- inst.Invalidate();
|
|
|
|
|
|
|
+ auto it{block->end()};
|
|
|
|
|
+ while (it != block->begin()) {
|
|
|
|
|
+ --it;
|
|
|
|
|
+ if (!it->HasUses() && !it->MayHaveSideEffects()) {
|
|
|
|
|
+ it->Invalidate();
|
|
|
|
|
+ it = block->Instructions().erase(it);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|