From 85d30846dbc5677639a56bdf9120065f1f400df6 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 9 Sep 2020 21:08:49 -0700 Subject: [PATCH] nir: Print divergence status of SSA values if analysis was ever run. After running divergence analysis, we include "div" or "con" for each SSA def's divergence/convergence status: vec1 32 div ssa_35 = fddy ssa_34 vec1 32 con ssa_36 = fddy ssa_6.x We omit this before the first time divergence analysis has been run. Reviewed-by: Iago Toral Quiroga Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 2 ++ src/compiler/nir/nir_print.c | 9 +++++++-- src/compiler/shader_info.h | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 9767dcc04c0..2ba6bcf7c5b 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -993,6 +993,8 @@ visit_cf_list(struct exec_list *list, struct divergence_state *state) void nir_divergence_analysis(nir_shader *shader) { + shader->info.divergence_analysis_run = true; + struct divergence_state state = { .stage = shader->info.stage, .shader = shader, diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index 045d9b4d925..f9847623d49 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -106,8 +106,13 @@ static void print_ssa_def(nir_ssa_def *def, print_state *state) { FILE *fp = state->fp; - fprintf(fp, "%s %u ssa_%u", sizes[def->num_components], def->bit_size, - def->index); + + const char *divergence = ""; + if (state->shader->info.divergence_analysis_run) + divergence = def->divergent ? "div " : "con "; + + fprintf(fp, "%s %2u %sssa_%u", sizes[def->num_components], def->bit_size, + divergence, def->index); } static void diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index b9292e873d1..b651ab15d22 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -254,6 +254,9 @@ typedef struct shader_info { */ bool uses_fddx_fddy:1; + /** Has divergence analysis ever been run? */ + bool divergence_analysis_run:1; + /* Bitmask of bit-sizes used with ALU instructions. */ uint8_t bit_sizes_float; uint8_t bit_sizes_int;