[Mesa-dev] [PATCH] nir: move ALU instruction before the jump instruction

Jason Ekstrand jason at jlekstrand.net
Wed Feb 13 01:43:03 UTC 2019


On February 12, 2019 18:22:36 Ian Romanick <idr at freedesktop.org> wrote:

> 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?

What if you have

loop {
   if (....) {
       /* Stuff*/
       continue;
   }
   break;
}

Or, for that matter, if the break and continue are flipped and this runs 
before the pass that gets rid of trivial continues.

Sorry, on my phone and not looking at the code so I could be way off base.

>
>> CC: Ian Romanick <ian.d.romanick at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev





More information about the mesa-dev mailing list