From 4638de8b1b3e362b356587622b1178f2d83bc619 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 12 Aug 2020 23:01:03 -0500 Subject: [PATCH] nir/lower_goto_if: Add some debug prints Reviewed-by: Karol Herbst Part-of: --- src/compiler/nir/nir_lower_goto_ifs.c | 74 +++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/compiler/nir/nir_lower_goto_ifs.c b/src/compiler/nir/nir_lower_goto_ifs.c index b00b2cd8bec..de8c33a7332 100644 --- a/src/compiler/nir/nir_lower_goto_ifs.c +++ b/src/compiler/nir/nir_lower_goto_ifs.c @@ -25,6 +25,8 @@ #include "nir_builder.h" #include "nir_vla.h" +#define NIR_LOWER_GOTO_IFS_DEBUG 0 + struct path { /** Set of blocks which this path represents * @@ -88,6 +90,21 @@ nir_block_ptr_cmp(const void *_a, const void *_b) return (int)(*a)->index - (int)(*b)->index; } +static void +print_block_set(const struct set *set) +{ + printf("{ "); + if (set != NULL) { + unsigned count = 0; + set_foreach(set, entry) { + if (count++) + printf(", "); + printf("%u", ((nir_block *)entry->key)->index); + } + } + printf(" }\n"); +} + /** Return a sorted array of blocks for a set * * Hash set ordering is non-deterministic. We hash based on pointers and so, @@ -276,6 +293,25 @@ loop_routing_start(struct routes *routing, nir_builder *b, struct path loop_path, struct set *reach, struct set *outside, void *mem_ctx) { + if (NIR_LOWER_GOTO_IFS_DEBUG) { + printf("loop_routing_start:\n"); + printf(" reach = "); + print_block_set(reach); + printf(" outside = "); + print_block_set(outside); + printf(" loop_path.reachable = "); + print_block_set(loop_path.reachable); + printf(" routing->outside = "); + print_block_set(routing->outside); + printf(" routing->regular.reachable = "); + print_block_set(routing->regular.reachable); + printf(" routing->brk.reachable = "); + print_block_set(routing->brk.reachable); + printf(" routing->cont.reachable = "); + print_block_set(routing->cont.reachable); + printf("\n"); + } + struct routes *routing_backup = ralloc(mem_ctx, struct routes); *routing_backup = *routing; bool break_needed = false; @@ -411,6 +447,20 @@ inside_outside(nir_block *block, struct set *loop_heads, struct set *outside, _mesa_set_add(remaining, block->dom_children[i]); } + + if (NIR_LOWER_GOTO_IFS_DEBUG) { + printf("inside_outside(%u):\n", block->index); + printf(" loop_heads = "); + print_block_set(loop_heads); + printf(" reach = "); + print_block_set(reach); + printf(" brk_reach = "); + print_block_set(brk_reachable); + printf(" remaining = "); + print_block_set(remaining); + printf("\n"); + } + bool progress = true; while (remaining->entries && progress) { progress = false; @@ -456,6 +506,13 @@ inside_outside(nir_block *block, struct set *loop_heads, struct set *outside, _mesa_set_add(reach, block->successors[i]); } } + + if (NIR_LOWER_GOTO_IFS_DEBUG) { + printf("outside(%u) = ", block->index); + print_block_set(outside); + printf("reach(%u) = ", block->index); + print_block_set(reach); + } } static struct path_fork * @@ -615,6 +672,14 @@ organize_levels(struct list_head *levels, struct set *children, struct set *reach, struct routes *routing, nir_function_impl *impl, bool is_domminated, void *mem_ctx) { + if (NIR_LOWER_GOTO_IFS_DEBUG) { + printf("organize_levels:\n"); + printf(" children = "); + print_block_set(children); + printf(" reach = "); + print_block_set(reach); + } + /* Duplicate remaining because we're going to destroy it */ struct set *remaining = _mesa_set_clone(children, mem_ctx); @@ -711,6 +776,15 @@ organize_levels(struct list_head *levels, struct set *children, list_addtail(&curr_level->link, levels); } + if (NIR_LOWER_GOTO_IFS_DEBUG) { + printf(" levels:\n"); + list_for_each_entry(struct strct_lvl, level, levels, link) { + printf(" "); + print_block_set(level->blocks); + } + printf("\n"); + } + if (skip_targets->entries) list_last_entry(levels, struct strct_lvl, link)->skip_end = 1; -- 2.30.2