Mesa (master): broadcom/compiler: add a NOP count stat to shader-db

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Mar 31 06:09:24 UTC 2021


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

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Tue Mar 30 11:48:10 2021 +0200

broadcom/compiler: add a NOP count stat to shader-db

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9918>

---

 src/broadcom/compiler/v3d_compiler.h |  1 +
 src/broadcom/compiler/vir.c          |  5 +++--
 src/broadcom/compiler/vir_to_qpu.c   |  3 +++
 src/broadcom/qpu/qpu_instr.c         | 17 +++++++++++++++++
 src/broadcom/qpu/qpu_instr.h         |  1 +
 5 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h
index 1a2134c6137..a741c1785ec 100644
--- a/src/broadcom/compiler/v3d_compiler.h
+++ b/src/broadcom/compiler/v3d_compiler.h
@@ -760,6 +760,7 @@ struct v3d_compile {
         uint32_t qpu_inst_count;
         uint32_t qpu_inst_size;
         uint32_t qpu_inst_stalled_count;
+        uint32_t nop_count;
 
         /* For the FS, the number of varying inputs not counting the
          * point/line varyings payload
diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c
index 45453a6b42e..e4fbf1b880e 100644
--- a/src/broadcom/compiler/vir.c
+++ b/src/broadcom/compiler/vir.c
@@ -1238,7 +1238,7 @@ int v3d_shaderdb_dump(struct v3d_compile *c,
         return asprintf(shaderdb_str,
                         "%s shader: %d inst, %d threads, %d loops, "
                         "%d uniforms, %d max-temps, %d:%d spills:fills, "
-                        "%d sfu-stalls, %d inst-and-stalls",
+                        "%d sfu-stalls, %d inst-and-stalls, %d nops",
                         vir_get_stage_name(c),
                         c->qpu_inst_count,
                         c->threads,
@@ -1248,7 +1248,8 @@ int v3d_shaderdb_dump(struct v3d_compile *c,
                         c->spills,
                         c->fills,
                         c->qpu_inst_stalled_count,
-                        c->qpu_inst_count + c->qpu_inst_stalled_count);
+                        c->qpu_inst_count + c->qpu_inst_stalled_count,
+                        c->nop_count);
 }
 
 uint64_t *v3d_compile(const struct v3d_compiler *compiler,
diff --git a/src/broadcom/compiler/vir_to_qpu.c b/src/broadcom/compiler/vir_to_qpu.c
index 1332f2e9163..aa33545420e 100644
--- a/src/broadcom/compiler/vir_to_qpu.c
+++ b/src/broadcom/compiler/vir_to_qpu.c
@@ -425,6 +425,9 @@ v3d_vir_to_qpu(struct v3d_compile *c, struct qpu_reg *temp_registers)
                         c->compilation_result = V3D_COMPILATION_FAILED;
                         return;
                 }
+
+                if (v3d_qpu_is_nop(&inst->qpu))
+                        c->nop_count++;
         }
         assert(i == c->qpu_inst_count);
 
diff --git a/src/broadcom/qpu/qpu_instr.c b/src/broadcom/qpu/qpu_instr.c
index 9f517874d1f..0bda9a42c51 100644
--- a/src/broadcom/qpu/qpu_instr.c
+++ b/src/broadcom/qpu/qpu_instr.c
@@ -22,6 +22,7 @@
  */
 
 #include <stdlib.h>
+#include <string.h>
 #include "util/macros.h"
 #include "broadcom/common/v3d_device_info.h"
 #include "qpu_instr.h"
@@ -1017,3 +1018,19 @@ v3d_qpu_unpacks_f16(const struct v3d_qpu_instr *inst)
 
         return false;
 }
+
+bool
+v3d_qpu_is_nop(struct v3d_qpu_instr *inst)
+{
+        static const struct v3d_qpu_sig nosig = { 0 };
+
+        if (inst->type != V3D_QPU_INSTR_TYPE_ALU)
+                return false;
+        if (inst->alu.add.op != V3D_QPU_A_NOP)
+                return false;
+        if (inst->alu.mul.op != V3D_QPU_M_NOP)
+                return false;
+        if (memcmp(&inst->sig, &nosig, sizeof(nosig)))
+                return false;
+        return true;
+}
diff --git a/src/broadcom/qpu/qpu_instr.h b/src/broadcom/qpu/qpu_instr.h
index c2885d73525..a87ed9ff3a9 100644
--- a/src/broadcom/qpu/qpu_instr.h
+++ b/src/broadcom/qpu/qpu_instr.h
@@ -479,4 +479,5 @@ bool v3d_qpu_sig_writes_address(const struct v3d_device_info *devinfo,
 bool v3d_qpu_unpacks_f32(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST;
 bool v3d_qpu_unpacks_f16(const struct v3d_qpu_instr *inst) ATTRIBUTE_CONST;
 
+bool v3d_qpu_is_nop(struct v3d_qpu_instr *inst) ATTRIBUTE_CONST;
 #endif



More information about the mesa-commit mailing list