shader: Remove invalidated blocks in dead code elimination pass

This commit is contained in:
ReinUsesLisp 2021-04-22 18:29:59 -03:00 committed by ameerj
parent aece958c2b
commit 92a01984e6

View File

@ -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) { auto it{block->end()};
if (!inst.HasUses() && !inst.MayHaveSideEffects()) { while (it != block->begin()) {
inst.Invalidate(); --it;
if (!it->HasUses() && !it->MayHaveSideEffects()) {
it->Invalidate();
it = block->Instructions().erase(it);
} }
} }
} }