From bd7a9b7f4e4ab83dd7c3e77d4411be2aa517f8aa Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Fri, 21 Jul 2023 17:00:06 +0200 Subject: [PATCH] r600/sfn: override slot count for IfInstr We have one slot for the predicate (todo fix this value) Part-of: --- src/gallium/drivers/r600/sfn/sfn_instr_controlflow.cpp | 10 ++++++++++ src/gallium/drivers/r600/sfn/sfn_instr_controlflow.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.cpp b/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.cpp index 44fd4d5cf62..72d9eac92f0 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.cpp @@ -152,6 +152,16 @@ IfInstr::is_equal_to(const IfInstr& rhs) const return m_predicate->equal_to(*rhs.m_predicate); } +uint32_t IfInstr::slots() const +{ + /* If we hava a literal value in the predicate evaluation, then + * we need at most two alu slots, otherwise it's just one. */ + for (auto s : m_predicate->sources()) + if (s->as_literal()) + return 2; + return 1; +}; + void IfInstr::accept(ConstInstrVisitor& visitor) const { diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.h b/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.h index d09f8b20d29..5ad309b6c01 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.h +++ b/src/gallium/drivers/r600/sfn/sfn_instr_controlflow.h @@ -82,6 +82,8 @@ public: AluInstr *predicate() const { return m_predicate; } AluInstr *predicate() { return m_predicate; } + uint32_t slots() const override; + void accept(ConstInstrVisitor& visitor) const override; void accept(InstrVisitor& visitor) override;