From f33ca092daf0e6303b3f7cd0786998da9f0d71c1 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Tue, 30 Mar 2021 11:48:10 +0200 Subject: broadcom/compiler: add a NOP count stat to shader-db MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Alejandro PiƱeiro Part-of: --- 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 +#include #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 -- cgit v1.2.3