From c29d9f118465bfe38177b56bdbae0b7ea768c199 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Fri, 12 Jul 2024 19:36:33 +0100 Subject: [PATCH] aco: only remove branch jumping over SMEM/barrier if it's never taken MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SMEM might be an invalid access, and barriers are probably expensive. fossil-db (navi21): Totals from 126 (0.16% of 79395) affected shaders: Instrs: 2764965 -> 2765377 (+0.01%) CodeSize: 15155348 -> 15156788 (+0.01%) Latency: 17604293 -> 17604296 (+0.00%) Branches: 105211 -> 105623 (+0.39%) Signed-off-by: Rhys Perry Reviewed-by: Timur Kristóf Reviewed-by: Daniel Schürmann Backport-to: 24.1 Backport-to: 24.2 Part-of: --- src/amd/compiler/aco_lower_to_hw_instr.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/amd/compiler/aco_lower_to_hw_instr.cpp b/src/amd/compiler/aco_lower_to_hw_instr.cpp index ddc9daa1bb3..94781ba8d71 100644 --- a/src/amd/compiler/aco_lower_to_hw_instr.cpp +++ b/src/amd/compiler/aco_lower_to_hw_instr.cpp @@ -2889,9 +2889,9 @@ lower_to_hw_instr(Program* program) can_remove = prefer_remove; } else if (inst->isSMEM()) { /* SMEM are at least as expensive as branches */ - can_remove = prefer_remove; + can_remove = prefer_remove && branch->never_taken; } else if (inst->isBarrier()) { - can_remove = prefer_remove; + can_remove = prefer_remove && branch->never_taken; } else { can_remove = false; assert(false && "Pseudo instructions should be lowered by this point.");