Commit a2ec7888 authored by Timothy Arceri's avatar Timothy Arceri
Browse files

nir: fix opt_if_loop_last_continue()

The pass did not correctly handle loops ending in:

	if ssa_7 {
		block block_8:
		/* preds: block_7 */
		continue
		/* succs: block_1 */
	} else {
		block block_9:
		/* preds: block_7 */
		break
		/* succs: block_11 */
	}

The break will get eliminated by another opt but if this pass gets
called first (as it does on RADV) we ended up inserting
instructions after the break.

Fixes: 5921a19d

 ("nir: add if opt opt_if_loop_last_continue()")
Reviewed-by: default avatarDave Airlie <airlied@redhat.com>
parent 0ac5acae
...@@ -318,9 +318,13 @@ opt_if_loop_last_continue(nir_loop *loop) ...@@ -318,9 +318,13 @@ opt_if_loop_last_continue(nir_loop *loop)
nir_cf_extract(&tmp, nir_after_cf_node(if_node), nir_cf_extract(&tmp, nir_after_cf_node(if_node),
nir_after_block(last_block)); nir_after_block(last_block));
if (then_ends_in_continue) { if (then_ends_in_continue) {
nir_cf_reinsert(&tmp, nir_after_cf_list(&nif->else_list)); nir_cursor last_blk_cursor = nir_after_cf_list(&nif->else_list);
nir_cf_reinsert(&tmp,
nir_after_block_before_jump(last_blk_cursor.block));
} else { } else {
nir_cf_reinsert(&tmp, nir_after_cf_list(&nif->then_list)); nir_cursor last_blk_cursor = nir_after_cf_list(&nif->then_list);
nir_cf_reinsert(&tmp,
nir_after_block_before_jump(last_blk_cursor.block));
} }
/* In order to avoid running nir_lower_regs_to_ssa_impl() every time an if /* In order to avoid running nir_lower_regs_to_ssa_impl() every time an if
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment