From 36bc3afb8b36c4f77ab955c624f1db29ed192c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Wed, 17 Aug 2022 10:05:51 +0200 Subject: [PATCH] aco/optimizer_postRA: Delete dead instructions more efficiently. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Timur Kristóf Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_optimizer_postRA.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/amd/compiler/aco_optimizer_postRA.cpp b/src/amd/compiler/aco_optimizer_postRA.cpp index a850b9876ad..8ced375dd63 100644 --- a/src/amd/compiler/aco_optimizer_postRA.cpp +++ b/src/amd/compiler/aco_optimizer_postRA.cpp @@ -581,10 +581,17 @@ optimize_postRA(Program* program) * no longer have any uses. */ for (auto& block : program->blocks) { - auto new_end = std::remove_if(block.instructions.begin(), block.instructions.end(), - [&ctx](const aco_ptr& instr) - { return !instr || is_dead(ctx.uses, instr.get()); }); - block.instructions.resize(new_end - block.instructions.begin()); + std::vector> instructions; + instructions.reserve(block.instructions.size()); + + for (aco_ptr& instr : block.instructions) { + if (!instr || is_dead(ctx.uses, instr.get())) + continue; + + instructions.emplace_back(std::move(instr)); + } + + block.instructions = std::move(instructions); } }