[Mesa-dev] [PATCH 1/2] nir: optimize min(min(a, b), c) to min3(a, b, c) under an option
Samuel Pitoiset
samuel.pitoiset at gmail.com
Thu May 31 09:13:01 UTC 2018
On 05/31/2018 01:55 AM, Timothy Arceri wrote:
> On 31/05/18 03:06, Samuel Pitoiset wrote:
>> Similar for max().
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/compiler/nir/nir.h | 3 +++
>> src/compiler/nir/nir_opt_algebraic.py | 8 ++++++++
>> 2 files changed, 11 insertions(+)
>>
>> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
>> index f6086bd6c0..04991b7d04 100644
>> --- a/src/compiler/nir/nir.h
>> +++ b/src/compiler/nir/nir.h
>> @@ -1897,6 +1897,9 @@ typedef struct nir_shader_compiler_options {
>> /* lower b2f to iand */
>> bool lower_b2f;
>> + /* lower min(min(a, b), c) to min3(a, b, c) (same for max()). */
>> + bool lower_minmax3;
>> +
>> /* Does the native fdot instruction replicate its result for four
>> * components? If so, then opt_algebraic_late will turn all fdotN
>> * instructions into fdot_replicatedN instructions.
>> diff --git a/src/compiler/nir/nir_opt_algebraic.py
>> b/src/compiler/nir/nir_opt_algebraic.py
>> index 909ea3daf4..1d67e2d88c 100644
>> --- a/src/compiler/nir/nir_opt_algebraic.py
>> +++ b/src/compiler/nir/nir_opt_algebraic.py
>> @@ -224,6 +224,14 @@ optimizations = [
>> (('imax', a, a), a),
>> (('umin', a, a), a),
>> (('umax', a, a), a),
>> +
>> + (('fmin', ('fmin', a, b), c), ('fmin3', a, b, c),
>> 'options->lower_minmax3'),
>> + (('imin', ('imin', a, b), c), ('imin3', a, b, c),
>> 'options->lower_minmax3'),
>> + (('umin', ('umin', a, b), c), ('umin3', a, b, c),
>> 'options->lower_minmax3'),
>> + (('fmax', ('fmax', a, b), c), ('fmax3', a, b, c),
>> 'options->lower_minmax3'),
>> + (('imax', ('imax', a, b), c), ('imax3', a, b, c),
>> 'options->lower_minmax3'),
>> + (('umax', ('umax', a, b), c), ('umax3', a, b, c),
>> 'options->lower_minmax3'),
>
> These look like they would be better suited in late_optimizations rather
> than optimizations?
Totals from affected shaders:
SGPRS: 104 -> 104 (0.00 %)
VGPRS: 64 -> 64 (0.00 %)
Spilled SGPRs: 0 -> 0 (0.00 %)
Spilled VGPRs: 0 -> 0 (0.00 %)
Private memory VGPRs: 0 -> 0 (0.00 %)
Scratch size: 0 -> 0 (0.00 %) dwords per thread
Code Size: 4652 -> 4644 (-0.17 %) bytes
LDS: 4 -> 4 (0.00 %) blocks
Max Waves: 24 -> 24 (0.00 %)
Wait states: 0 -> 0 (0.00 %)
When moved to late_optimizations.
>
>
>> +
>> (('fmin', a, ('fneg', a)), ('fneg', ('fabs', a))),
>> (('imin', a, ('ineg', a)), ('ineg', ('iabs', a))),
>> (('fmin', a, ('fneg', ('fabs', a))), ('fneg', ('fabs', a))),
>>
More information about the mesa-dev
mailing list