broadcom/compiler: add a NOP count stat to shader-db
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9918>
This commit is contained in:

committed by
Marge Bot

parent
062eee7d33
commit
f33ca092da
@@ -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
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user