From 71daf2ef6771f96aa748caae77c7e6ef31faf43f Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Mon, 19 Aug 2019 18:13:12 +0300 Subject: nir/loop_unroll: Prepare loop for unrolling in wrapper_unroll Without loop_prepare_for_unroll loops are losing phis. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111411 Fixes: 5db98195 "nir: add loop unroll support for wrapper loops" Signed-off-by: Danylo Piliaiev Reviewed-by: Timothy Arceri (cherry picked from commit 84b3ef6a96eabc28b18e8cdf1b0d61826b1a8a67) --- src/compiler/nir/nir_opt_loop_unroll.c | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/src/compiler/nir/nir_opt_loop_unroll.c b/src/compiler/nir/nir_opt_loop_unroll.c index 55075824507..743581f6b34 100644 --- a/src/compiler/nir/nir_opt_loop_unroll.c +++ b/src/compiler/nir/nir_opt_loop_unroll.c @@ -560,31 +560,7 @@ wrapper_unroll(nir_loop *loop) nir_after_block(nir_if_last_else_block(terminator->nif)); } } else { - nir_block *blk_after_loop = - nir_cursor_current_block(nir_after_cf_node(&loop->cf_node)); - - /* There may still be some single src phis following the loop that - * have not yet been cleaned up by another pass. Tidy those up - * before unrolling the loop. - */ - nir_foreach_instr_safe(instr, blk_after_loop) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - assert(exec_list_length(&phi->srcs) == 1); - - nir_phi_src *phi_src = - exec_node_data(nir_phi_src, exec_list_get_head(&phi->srcs), node); - - nir_ssa_def_rewrite_uses(&phi->dest.ssa, phi_src->src); - nir_instr_remove(instr); - } - - /* Remove break at end of the loop */ - nir_block *last_loop_blk = nir_loop_last_block(loop); - nir_instr *break_instr = nir_block_last_instr(last_loop_blk); - nir_instr_remove(break_instr); + loop_prepare_for_unroll(loop); } /* Pluck out the loop body. */ -- cgit v1.2.1