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
1 changed files with 6 additions and 3 deletions

View File

@ -14,9 +14,12 @@ void DeadCodeEliminationPass(IR::Program& program) {
// We iterate over the instructions in reverse order.
// 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::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);
}
}
}