diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2015-12-18 11:27:00 -0800 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2015-12-23 13:49:56 -0800 |
commit | 86772c24885be27a7fa9473c471a8eaff54b2ee9 (patch) | |
tree | 428de45a850eb3ec90e6684fbe4764df52f81547 /src/glsl | |
parent | 1749e667ea38ec539d29c92c08f94738afcb91ad (diff) | |
download | external_mesa3d-86772c24885be27a7fa9473c471a8eaff54b2ee9.zip external_mesa3d-86772c24885be27a7fa9473c471a8eaff54b2ee9.tar.gz external_mesa3d-86772c24885be27a7fa9473c471a8eaff54b2ee9.tar.bz2 |
nir/control_flow: Handle relinking top-level blocks
This can happen if a function ends in a return instruction and you remove
the return.
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/nir/nir_control_flow.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/glsl/nir/nir_control_flow.c b/src/glsl/nir/nir_control_flow.c index 96395a4..ecd9cbd 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); |