[Mesa-dev] [PATCH v2 7/7] i965/nir: Use signed integer type for booleans

Jason Ekstrand jason at jlekstrand.net
Fri Mar 20 13:37:48 PDT 2015


On Fri, Mar 20, 2015 at 1:12 PM, Matt Turner <mattst88 at gmail.com> wrote:
> On Fri, Mar 20, 2015 at 11:24 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
>> FS instructions with NIR on i965:
>> total instructions in shared programs: 2663561 -> 2619051 (-1.67%)
>> instructions in affected programs:     1612965 -> 1568455 (-2.76%)
>> helped:                                5455
>> HURT:                                  12
>>
>> FS instructions with NIR on g4x:
>> total instructions in shared programs: 2352633 -> 2307908 (-1.90%)
>> instructions in affected programs:     1441842 -> 1397117 (-3.10%)
>> helped:                                5463
>> HURT:                                  11
>>
>> FS instructions with NIR on ilk:
>> total instructions in shared programs: 3997305 -> 3934278 (-1.58%)
>> instructions in affected programs:     2189409 -> 2126382 (-2.88%)
>> helped:                                8969
>> HURT:                                  22
>>
>> FS instructions with NIR on hsw (snb and ivb were similar):
>> total instructions in shared programs: 4109389 -> 4109242 (-0.00%)
>> instructions in affected programs:     109869 -> 109722 (-0.13%)
>> helped:                                339
>> HURT:                                  190
>>
>> No SIMD16 programs were gained or lost on any platform
>> ---
>>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> index 5fa528c..f79143d 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> @@ -522,7 +522,7 @@ fs_visitor::nir_emit_if(nir_if *if_stmt)
>>     /* first, put the condition into f0 */
>>     fs_inst *inst = emit(MOV(reg_null_d,
>>                              retype(get_nir_src(if_stmt->condition),
>> -                                   BRW_REGISTER_TYPE_UD)));
>> +                                   BRW_REGISTER_TYPE_D)));
>>     inst->conditional_mod = BRW_CONDITIONAL_NZ;
>>
>>     emit(IF(BRW_PREDICATE_NORMAL));
>> @@ -598,9 +598,9 @@ static brw_reg_type
>>  brw_type_for_nir_type(nir_alu_type type)
>>  {
>>     switch (type) {
>> -   case nir_type_bool:
>>     case nir_type_unsigned:
>>        return BRW_REGISTER_TYPE_UD;
>> +   case nir_type_bool:
>>     case nir_type_int:
>>        return BRW_REGISTER_TYPE_D;
>>     case nir_type_float:
>> @@ -1280,7 +1280,7 @@ fs_visitor::nir_emit_alu(nir_alu_instr *instr)
>>        fs_reg masked = vgrf(glsl_type::int_type);
>>        emit(AND(masked, result, fs_reg(1)));
>>        masked.negate = true;
>> -      emit(MOV(result, masked));
>> +      emit(MOV(retype(result, BRW_REGISTER_TYPE_D), masked));
>
> This hunk isn't necessary. masked is vgrf(glsl_type::int_type).

This hunk retypes result, not masked.
--Jason

>
> With that hunk dropped,
>
> Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the mesa-dev mailing list