Mesa (master): freedreno/ir3: add mov/cov stats

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Apr 13 21:06:29 UTC 2020


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

Author: Rob Clark <robdclark at chromium.org>
Date:   Mon Mar 16 06:41:41 2020 -0700

freedreno/ir3: add mov/cov stats

While not always avoidable, cov instructions are a useful thing to look
at to see if we could fold into src.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4440>

---

 src/freedreno/ir3/ir3.c                         | 11 ++++++++---
 src/freedreno/ir3/ir3.h                         |  2 ++
 src/freedreno/ir3/ir3_shader.c                  |  3 ++-
 src/gallium/drivers/freedreno/ir3/ir3_gallium.c |  6 ++++--
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/freedreno/ir3/ir3.c b/src/freedreno/ir3/ir3.c
index 6b6b83b62cf..f2dbc88f3bb 100644
--- a/src/freedreno/ir3/ir3.c
+++ b/src/freedreno/ir3/ir3.c
@@ -917,13 +917,11 @@ void * ir3_assemble(struct ir3 *shader, struct ir3_info *info,
 {
 	uint32_t *ptr, *dwords;
 
+	memset(info, 0, sizeof(*info));
 	info->gpu_id        = gpu_id;
 	info->max_reg       = -1;
 	info->max_half_reg  = -1;
 	info->max_const     = -1;
-	info->instrs_count  = 0;
-	info->sizedwords    = 0;
-	info->ss = info->sy = 0;
 
 	foreach_block (block, &shader->block_list) {
 		foreach_instr (instr, &block->instr_list) {
@@ -958,6 +956,13 @@ void * ir3_assemble(struct ir3 *shader, struct ir3_info *info,
 			info->nops_count += instr->nop;
 			if (instr->opc == OPC_NOP)
 				info->nops_count += 1 + instr->repeat;
+			if (instr->opc == OPC_MOV) {
+				if (instr->cat1.src_type == instr->cat1.dst_type) {
+					info->mov_count += 1 + instr->repeat;
+				} else {
+					info->cov_count += 1 + instr->repeat;
+				}
+			}
 			dwords += 2;
 
 			if (instr->flags & IR3_INSTR_SS) {
diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h
index 4dfcdf0da51..65c16791e62 100644
--- a/src/freedreno/ir3/ir3.h
+++ b/src/freedreno/ir3/ir3.h
@@ -48,6 +48,8 @@ struct ir3_info {
 	uint16_t sizedwords;
 	uint16_t instrs_count;   /* expanded to account for rpt's */
 	uint16_t nops_count;     /* # of nop instructions, including nopN */
+	uint16_t mov_count;
+	uint16_t cov_count;
 	/* NOTE: max_reg, etc, does not include registers not touched
 	 * by the shader (ie. vertex fetched via VFD_DECODE but not
 	 * touched by shader)
diff --git a/src/freedreno/ir3/ir3_shader.c b/src/freedreno/ir3/ir3_shader.c
index e42f7713e09..80a56a53aa9 100644
--- a/src/freedreno/ir3/ir3_shader.c
+++ b/src/freedreno/ir3/ir3_shader.c
@@ -508,11 +508,12 @@ ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin, FILE *out)
 	fprintf(out, "\n");
 
 	/* print generic shader info: */
-	fprintf(out, "; %s prog %d/%d: %u instr, %u nops, %u non-nops, %u dwords\n",
+	fprintf(out, "; %s prog %d/%d: %u instr, %u nops, %u non-nops, %u mov, %u cov, %u dwords\n",
 			type, so->shader->id, so->id,
 			so->info.instrs_count,
 			so->info.nops_count,
 			so->info.instrs_count - so->info.nops_count,
+			so->info.mov_count, so->info.cov_count,
 			so->info.sizedwords);
 
 	fprintf(out, "; %s prog %d/%d: %u last-baryf, %d half, %d full, %u constlen\n",
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
index 8fff7da0c5e..158869a6101 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c
@@ -51,13 +51,15 @@ dump_shader_info(struct ir3_shader_variant *v, bool binning_pass,
 		return;
 
 	pipe_debug_message(debug, SHADER_INFO,
-			"%s shader: %u inst, %u nops, %u non-nops, %u dwords, "
-			"%u last-baryf, %u half, %u full, %u constlen, "
+			"%s shader: %u inst, %u nops, %u non-nops, %u mov, %u cov, "
+			"%u dwords, %u last-baryf, %u half, %u full, %u constlen, "
 			"%u sstall, %u (ss), %u (sy), %d max_sun, %d loops\n",
 			ir3_shader_stage(v),
 			v->info.instrs_count,
 			v->info.nops_count,
 			v->info.instrs_count - v->info.nops_count,
+			v->info.mov_count,
+			v->info.cov_count,
 			v->info.sizedwords,
 			v->info.last_baryf,
 			v->info.max_half_reg + 1,



More information about the mesa-commit mailing list