opt_split_alu_of_phi moves ALU instruction to the end of continue block.

But if the continue block ends with a jump instruction (an explicit
"continue" instruction) then the ALU must be inserted before the jump,
as it is illegal to add instructions after the jump.

CC: Ian Romanick <ian.d.roman...@intel.com>
Fixes: 0881e90c099 ("nir: Split ALU instructions in loops that read phis")
---
 src/compiler/nir/nir_opt_if.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/compiler/nir/nir_opt_if.c b/src/compiler/nir/nir_opt_if.c
index 9afb901be14..932af9e37ab 100644
--- a/src/compiler/nir/nir_opt_if.c
+++ b/src/compiler/nir/nir_opt_if.c
@@ -488,7 +488,7 @@ opt_split_alu_of_phi(nir_builder *b, nir_loop *loop)
           *
           * Insert the new instruction at the end of the continue block.
           */
-         b->cursor = nir_after_block(continue_block);
+         b->cursor = nir_after_block_before_jump(continue_block);
 
          nir_ssa_def *const alu_copy =
             clone_alu_and_replace_src_defs(b, alu, continue_srcs);
-- 
2.20.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to