From: Jason Ekstrand Date: Fri, 18 Dec 2015 19:27:00 +0000 (-0800) Subject: nir/control_flow: Handle relinking top-level blocks X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=86772c24885be27a7fa9473c471a8eaff54b2ee9;p=mesa.git nir/control_flow: Handle relinking top-level blocks This can happen if a function ends in a return instruction and you remove the return. --- diff --git a/src/glsl/nir/nir_control_flow.c b/src/glsl/nir/nir_control_flow.c index 96395a41615..ecd9cbd4173 100644 --- a/src/glsl/nir/nir_control_flow.c +++ b/src/glsl/nir/nir_control_flow.c @@ -336,8 +336,7 @@ block_add_normal_succs(nir_block *block) nir_block *next_block = nir_cf_node_as_block(next); link_blocks(block, next_block, NULL); - } else { - assert(parent->type == nir_cf_node_loop); + } else if (parent->type == nir_cf_node_loop) { nir_loop *loop = nir_cf_node_as_loop(parent); nir_cf_node *head = nir_loop_first_cf_node(loop); @@ -346,6 +345,10 @@ block_add_normal_succs(nir_block *block) link_blocks(block, head_block, NULL); insert_phi_undef(head_block, block); + } else { + assert(parent->type == nir_cf_node_function); + nir_function_impl *impl = nir_cf_node_as_function(parent); + link_blocks(block, impl->end_block, NULL); } } else { nir_cf_node *next = nir_cf_node_next(&block->cf_node);