On 2/12/19 12:58 AM, Juan A. Suarez Romero wrote: > 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.
I'm assuming you found this by inspection? Since this pass only operates when the first block of the loop only has two predecessors (the block before the loop and the implicit continue at the end of the loop), this shouldn't be a a problem in practice... or were you able to trigger it somehow? > 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); _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev