From: Kenneth Graunke Date: Tue, 25 Aug 2015 00:30:08 +0000 (-0700) Subject: nir: Strengthen "no jumps" assertions in instruction insertion API. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c44d50775209266b5c8bad0ab7a7c4ccd7db14a4;p=mesa.git nir: Strengthen "no jumps" assertions in instruction insertion API. Jumps must be the last instruction in a block, so inserting another instruction after a jump is illegal. Previously, we only checked this when the new instruction being inserted was a jump. This is a red herring - inserting *any* kind of instruction after a jump is illegal. Signed-off-by: Kenneth Graunke Reviewed-by: Jason Ekstrand Acked-by: Connor Abbott --- diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c index 77cc4f078a3..ff758f447e8 100644 --- a/src/glsl/nir/nir.c +++ b/src/glsl/nir/nir.c @@ -675,9 +675,10 @@ nir_instr_insert_before(nir_instr *instr, nir_instr *before) void nir_instr_insert_after(nir_instr *instr, nir_instr *after) { + assert(instr->type != nir_instr_type_jump); + if (after->type == nir_instr_type_jump) { assert(instr == nir_block_last_instr(instr->block)); - assert(instr->type != nir_instr_type_jump); } after->block = instr->block; @@ -705,10 +706,9 @@ nir_instr_insert_before_block(nir_block *block, nir_instr *before) void nir_instr_insert_after_block(nir_block *block, nir_instr *after) { - if (after->type == nir_instr_type_jump) { - assert(exec_list_is_empty(&block->instr_list) || - nir_block_last_instr(block)->type != nir_instr_type_jump); - } + nir_instr *last = nir_block_last_instr(block); + assert(last == NULL || last->type != nir_instr_type_jump); + (void) last; after->block = block; add_defs_uses(after);