From 73c40d6bbbffc5d13e0e3ce823fa349286382c77 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 31 Jul 2019 15:49:30 -0700 Subject: [PATCH] pan/midgard: Use standard list traversal to find initial tag Fixes a hang (and abort) on empty shaders, which you shouldn't have anyway but better safe than sorry. DCE going on the fritz is no reason to freeze the system. Signed-off-by: Alyssa Rosenzweig --- src/panfrost/midgard/midgard_compile.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index d36caa3..a35b43f 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -2229,19 +2229,16 @@ midgard_get_first_tag_from_block(compiler_context *ctx, unsigned block_idx) unsigned first_tag = 0; - do { - midgard_bundle *initial_bundle = util_dynarray_element(&initial_block->bundles, midgard_bundle, 0); + mir_foreach_block_from(ctx, initial_block, v) { + midgard_bundle *initial_bundle = + util_dynarray_element(&v->bundles, midgard_bundle, 0); if (initial_bundle) { first_tag = initial_bundle->tag; break; } + } - /* Initial block is empty, try the next block */ - initial_block = list_first_entry(&(initial_block->link), midgard_block, link); - } while(initial_block != NULL); - - assert(first_tag); return first_tag; } -- 2.7.4