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)
 {

Reply via email to