[Mesa-dev] [PATCH 1/8] nir: Add lowering for bitfieldInsert without using bfi.

Ian Romanick idr at freedesktop.org
Thu May 31 17:41:56 UTC 2018


On 05/31/2018 10:34 AM, Ian Romanick wrote:
> There are GLSL IR lowering passes for a lot (all?) of this that I added
> when I did GL_MESA_shader_integer_functions.  Is there a reason to not
> use those?

Which I now see that you mentioned in the commit messages.  Still, just
curious...

> On 05/08/2018 01:13 PM, Eric Anholt wrote:
>> If you don't have HW to do bfi, then lowering bitfieldInsert to bfi makes
>> things harder than keeping the "bits" argument around.
>>
>> This still uses bfm, but I've added the obvious lowering of bfm if you
>> need it.
>> ---
>>  src/compiler/nir/nir.h                |  5 +++++
>>  src/compiler/nir/nir_opt_algebraic.py | 14 ++++++++++++++
>>  2 files changed, 19 insertions(+)
>>
>> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
>> index a379928cdcd9..ed95dbf955d8 100644
>> --- a/src/compiler/nir/nir.h
>> +++ b/src/compiler/nir/nir.h
>> @@ -1880,7 +1880,12 @@ typedef struct nir_shader_compiler_options {
>>     bool lower_fmod32;
>>     bool lower_fmod64;
>>     bool lower_bitfield_extract;
>> +   /** Lowers bitfield_insert to bfi/bfm */
>>     bool lower_bitfield_insert;
>> +   /** Lowers bitfield_insert to bfm, compares, and shifts. */
>> +   bool lower_bitfield_insert_to_shifts;
>> +   /** Lowers bfm to shifts and subtracts. */
>> +   bool lower_bfm;
>>     bool lower_uadd_carry;
>>     bool lower_usub_borrow;
>>     /** lowers fneg and ineg to fsub and isub. */
>> diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
>> index 96232f0e549c..2824dcebb81b 100644
>> --- a/src/compiler/nir/nir_opt_algebraic.py
>> +++ b/src/compiler/nir/nir_opt_algebraic.py
>> @@ -492,6 +492,20 @@ optimizations = [
>>                ('bfi', ('bfm', 'bits', 'offset'), 'insert', 'base')),
>>      'options->lower_bitfield_insert'),
>>  
>> +   # Alternative lowering that doesn't rely on bfi.
>> +   (('bitfield_insert', 'base', 'insert', 'offset', 'bits'),
>> +    ('bcsel', ('ilt', 31, 'bits'),
>> +     'insert',
>> +     ('ior',
>> +      ('iand', 'base', ('inot', ('bfm', 'bits', 'offset'))),
>> +      ('iand', ('ishl', 'insert', 'offset'), ('bfm', 'bits', 'offset')))),
>> +    'options->lower_bitfield_insert_to_shifts'),
>> +
>> +   # bfm lowering -- note that the NIR opcode is undefined if either arg is 32.
>> +   (('bfm', 'bits', 'offset'),
>> +    ('ishl', ('isub', ('ishl', 1, 'bits'), 1), 'offset'),
>> +    'options->lower_bfm'),
>> +
>>     (('ibitfield_extract', 'value', 'offset', 'bits'),
>>      ('bcsel', ('ilt', 31, 'bits'), 'value',
>>                ('ibfe', 'value', 'offset', 'bits')),
>>
> 
> _______________________________________________
> 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