[Mesa-dev] [PATCH] nir/builder: Use nir_after_instr to advance the cursor

Jason Ekstrand jason at jlekstrand.net
Mon Aug 31 18:18:38 PDT 2015


On Mon, Aug 31, 2015 at 5:04 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On Monday, August 31, 2015 04:55:51 PM Jason Ekstrand wrote:
>> This *should* ensure that the cursor gets properly advanced in all cases.
>> We had a problem before where, if the cursor was created using
>> nir_after_cf_node on a non-block cf_node, that would call nir_before_block
>> on the block following the cf node.  Instructions would then get inserted
>> in backwards order at the top of the block which is not at all what you
>> would expect from nir_after_cf_node.  By just resetting to after_instr, we
>> avoid all these problems.
>> ---
>>  src/glsl/nir/nir_builder.h | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/src/glsl/nir/nir_builder.h b/src/glsl/nir/nir_builder.h
>> index 3aa0efd..295a209 100644
>> --- a/src/glsl/nir/nir_builder.h
>> +++ b/src/glsl/nir/nir_builder.h
>> @@ -49,8 +49,7 @@ nir_builder_instr_insert(nir_builder *build, nir_instr *instr)
>>     nir_instr_insert(build->cursor, instr);
>>
>>     /* Move the cursor forward. */
>> -   if (build->cursor.option == nir_cursor_after_instr)
>> -      build->cursor.instr = instr;
>> +   build->cursor = nir_after_instr(instr);
>>  }
>>
>>  static inline void
>>
>
> This seems like the right behavior for the builder to take.
>
> Sorry for the breakage - I hadn't thought through how the
> nir_{before,after}_cf_{node,list} functions translate to blocks.
> Thanks for fixing it.
>
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

Thanks!

> You've regression tested this, I assume?

Just did.  Passes jenkins just fine.
--Jason


More information about the mesa-dev mailing list