From ef88e23d0335c05ebc60a621ee91cd6b22208597 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 14 May 2019 16:24:33 -0700 Subject: [PATCH] freedreno: Log the number of loops in the shader for shader-db. shader-db's report.py will use this to see when we've changed loop unrolling behavior on a shader and skip including other stats like instruction count from being considered for that shader, since they won't be useful as a proxy for real world performance in that case. Reviewed-by: Rob Clark Tested-by: Eduardo Lima Mitev --- src/freedreno/ir3/ir3_compiler_nir.c | 1 + src/freedreno/ir3/ir3_shader.h | 1 + src/gallium/drivers/freedreno/ir3/ir3_gallium.c | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c index c230fbd..4cae442 100644 --- a/src/freedreno/ir3/ir3_compiler_nir.c +++ b/src/freedreno/ir3/ir3_compiler_nir.c @@ -2168,6 +2168,7 @@ static void emit_loop(struct ir3_context *ctx, nir_loop *nloop) { emit_cf_list(ctx, &nloop->body); + ctx->so->loops++; } static void diff --git a/src/freedreno/ir3/ir3_shader.h b/src/freedreno/ir3/ir3_shader.h index c2c1a53..06336ed 100644 --- a/src/freedreno/ir3/ir3_shader.h +++ b/src/freedreno/ir3/ir3_shader.h @@ -401,6 +401,7 @@ struct ir3_shader_variant { unsigned branchstack; unsigned max_sun; + unsigned loops; /* the instructions length is in units of instruction groups * (4 instructions for a3xx, 16 instructions for a4xx.. each diff --git a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c index c189a90..9fd8489 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_gallium.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_gallium.c @@ -52,7 +52,7 @@ dump_shader_info(struct ir3_shader_variant *v, struct pipe_debug_callback *debug pipe_debug_message(debug, SHADER_INFO, "%s shader: %u inst, %u dwords, " "%u half, %u full, %u const, %u constlen, " - "%u (ss), %u (sy), %d max_sun\n", + "%u (ss), %u (sy), %d max_sun, %d loops\n", ir3_shader_stage(v->shader), v->info.instrs_count, v->info.sizedwords, @@ -61,7 +61,7 @@ dump_shader_info(struct ir3_shader_variant *v, struct pipe_debug_callback *debug v->info.max_const + 1, v->constlen, v->info.ss, v->info.sy, - v->max_sun); + v->max_sun, v->loops); } struct ir3_shader_variant * -- 2.7.4