diff --git a/src/freedreno/ir3/ir3.c b/src/freedreno/ir3/ir3.c index a0a2dcbd805..2d2c7f591fc 100644 --- a/src/freedreno/ir3/ir3.c +++ b/src/freedreno/ir3/ir3.c @@ -922,6 +922,9 @@ void * ir3_assemble(struct ir3 *shader, struct ir3_info *info, if (ret) goto fail; info->instrs_count += 1 + instr->repeat + instr->nop; + info->nops_count += instr->nop; + if (instr->opc == OPC_NOP) + info->nops_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 17c4178d963..e1ec7579341 100644 --- a/src/freedreno/ir3/ir3.h +++ b/src/freedreno/ir3/ir3.h @@ -47,6 +47,7 @@ struct ir3_info { uint32_t gpu_id; uint16_t sizedwords; uint16_t instrs_count; /* expanded to account for rpt's */ + uint16_t nops_count; /* # of nop instructions, including nopN */ /* 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/gallium/drivers/freedreno/ir3/ir3_gallium.c b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c index 8b329687978..8d77c7357c3 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c @@ -51,11 +51,13 @@ dump_shader_info(struct ir3_shader_variant *v, bool binning_pass, return; pipe_debug_message(debug, SHADER_INFO, - "%s shader: %u inst, %u dwords, " + "%s shader: %u inst, %u nops, %u non-nops, %u dwords, " "%u half, %u full, %u constlen, " "%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.sizedwords, v->info.max_half_reg + 1, v->info.max_reg + 1,