Module: Mesa Branch: main Commit: 72a5c659d4005bcedf1090f7e92443a145f1e5f3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=72a5c659d4005bcedf1090f7e92443a145f1e5f3
Author: Daniel Schürmann <dan...@schuermann.dev> Date: Thu Jan 4 12:58:14 2024 +0100 aco: form clauses for LDS instructions No fossil-db changes. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25676> --- src/amd/compiler/aco_ir.cpp | 2 +- src/amd/compiler/aco_ir.h | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_ir.cpp b/src/amd/compiler/aco_ir.cpp index fa377a0f9b2..22f50db4149 100644 --- a/src/amd/compiler/aco_ir.cpp +++ b/src/amd/compiler/aco_ir.cpp @@ -1312,7 +1312,7 @@ should_form_clause(const Instruction* a, const Instruction* b) return false; /* Assume loads which don't use descriptors might load from similar addresses. */ - if (a->isFlatLike()) + if (a->isFlatLike() || a->accessesLDS()) return true; if (a->isSMEM() && a->operands[0].bytes() == 8 && b->operands[0].bytes() == 8) return true; diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index acb93534796..cddc5bd5cfb 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -1287,6 +1287,7 @@ struct Instruction { constexpr bool isVMEM() const noexcept { return isMTBUF() || isMUBUF() || isMIMG(); } + bool accessesLDS() const noexcept; bool isTrans() const noexcept; }; static_assert(sizeof(Instruction) == 16, "Unexpected padding"); @@ -1674,6 +1675,12 @@ struct Pseudo_reduction_instruction : public Instruction { static_assert(sizeof(Pseudo_reduction_instruction) == sizeof(Instruction) + 4, "Unexpected padding"); +inline bool +Instruction::accessesLDS() const noexcept +{ + return (isDS() && !ds().gds) || isLDSDIR() || isVINTRP(); +} + inline void VALU_instruction::swapOperands(unsigned idx0, unsigned idx1) {