Mesa (master): pan/mdg: emit REGISTER_UNUSED on unused ALU src2

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 31 00:39:42 UTC 2020


Module: Mesa
Branch: master
Commit: a91011c9eca0e561475e476b7b6ab5da48a412c7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a91011c9eca0e561475e476b7b6ab5da48a412c7

Author: Italo Nicola <italonicola at collabora.com>
Date:   Thu Jul 30 23:24:06 2020 +0000

pan/mdg: emit REGISTER_UNUSED on unused ALU src2

This saves power and time by skipping a roundtrip to the register file.

Signed-off-by: Italo Nicola <italonicola at collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6128>

---

 src/panfrost/midgard/helpers.h      |  3 +++
 src/panfrost/midgard/midgard_emit.c | 10 +++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/panfrost/midgard/helpers.h b/src/panfrost/midgard/helpers.h
index 36d64957f47..6f6f82cc70a 100644
--- a/src/panfrost/midgard/helpers.h
+++ b/src/panfrost/midgard/helpers.h
@@ -143,6 +143,9 @@
 /* Uniforms are begin at (REGISTER_UNIFORMS - uniform_count) */
 #define REGISTER_UNIFORMS 24
 
+/* r24 and r25 are special registers that only exist during the pipeline,
+ * by using them when we don't care about the register we skip a roundtrip
+ * to the register file. */
 #define REGISTER_UNUSED 24
 #define REGISTER_CONSTANT 26
 #define REGISTER_LDST_BASE 26
diff --git a/src/panfrost/midgard/midgard_emit.c b/src/panfrost/midgard/midgard_emit.c
index 2882fae1e9e..8c08818214c 100644
--- a/src/panfrost/midgard/midgard_emit.c
+++ b/src/panfrost/midgard/midgard_emit.c
@@ -736,15 +736,19 @@ emit_alu_bundle(compiler_context *ctx,
                 /* Check if this instruction has registers */
                 if (ins->compact_branch) continue;
 
+                unsigned src2_reg = REGISTER_UNUSED;
+                if (ins->has_inline_constant)
+                        src2_reg = ins->inline_constant >> 11;
+                else if (ins->src[1] != ~0)
+                        src2_reg = SSA_REG_FROM_FIXED(ins->src[1]);
+
                 /* Otherwise, just emit the registers */
                 uint16_t reg_word = 0;
                 midgard_reg_info registers = {
                         .src1_reg = (ins->src[0] == ~0 ?
                                         REGISTER_UNUSED :
                                         SSA_REG_FROM_FIXED(ins->src[0])),
-                        .src2_reg = (ins->src[1] == ~0 ?
-                                        ins->inline_constant >> 11 :
-                                        SSA_REG_FROM_FIXED(ins->src[1])),
+                        .src2_reg = src2_reg,
                         .src2_imm = ins->has_inline_constant,
                         .out_reg = (ins->dest == ~0 ?
                                         REGISTER_UNUSED :



More information about the mesa-commit mailing list