nir: add a way to print the deref chain

Makes debugging easier when we care about the deref chain and not the
deref instruction itself.  To make it take a const pointer, constify
some of the static functions in nir_print.c.

Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Caio Marcelo de Oliveira Filho
2018-12-19 12:13:46 -08:00
parent a2596450ac
commit 7d6babf995
2 changed files with 14 additions and 4 deletions

View File

@@ -2725,6 +2725,7 @@ void nir_index_blocks(nir_function_impl *impl);
void nir_print_shader(nir_shader *shader, FILE *fp); void nir_print_shader(nir_shader *shader, FILE *fp);
void nir_print_shader_annotated(nir_shader *shader, FILE *fp, struct hash_table *errors); void nir_print_shader_annotated(nir_shader *shader, FILE *fp, struct hash_table *errors);
void nir_print_instr(const nir_instr *instr, FILE *fp); void nir_print_instr(const nir_instr *instr, FILE *fp);
void nir_print_deref(const nir_deref_instr *deref, FILE *fp);
nir_shader *nir_shader_clone(void *mem_ctx, const nir_shader *s); nir_shader *nir_shader_clone(void *mem_ctx, const nir_shader *s);
nir_function_impl *nir_function_impl_clone(const nir_function_impl *fi); nir_function_impl *nir_function_impl_clone(const nir_function_impl *fi);

View File

@@ -123,10 +123,10 @@ print_ssa_use(nir_ssa_def *def, print_state *state)
fprintf(fp, "ssa_%u", def->index); fprintf(fp, "ssa_%u", def->index);
} }
static void print_src(nir_src *src, print_state *state); static void print_src(const nir_src *src, print_state *state);
static void static void
print_reg_src(nir_reg_src *src, print_state *state) print_reg_src(const nir_reg_src *src, print_state *state)
{ {
FILE *fp = state->fp; FILE *fp = state->fp;
print_register(src->reg, state); print_register(src->reg, state);
@@ -156,7 +156,7 @@ print_reg_dest(nir_reg_dest *dest, print_state *state)
} }
static void static void
print_src(nir_src *src, print_state *state) print_src(const nir_src *src, print_state *state)
{ {
if (src->is_ssa) if (src->is_ssa)
print_ssa_use(src->ssa, state); print_ssa_use(src->ssa, state);
@@ -577,7 +577,7 @@ print_var_decl(nir_variable *var, print_state *state)
} }
static void static void
print_deref_link(nir_deref_instr *instr, bool whole_chain, print_state *state) print_deref_link(const nir_deref_instr *instr, bool whole_chain, print_state *state)
{ {
FILE *fp = state->fp; FILE *fp = state->fp;
@@ -1386,3 +1386,12 @@ nir_print_instr(const nir_instr *instr, FILE *fp)
print_instr(instr, &state, 0); print_instr(instr, &state, 0);
} }
void
nir_print_deref(const nir_deref_instr *deref, FILE *fp)
{
print_state state = {
.fp = fp,
};
print_deref_link(deref, true, &state);
}