[Mesa-dev] [PATCH 1/2] nir: optimize min(min(a, b), c) to min3(a, b, c) under an option

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Wed May 30 19:28:59 UTC 2018


On Wed, May 30, 2018 at 7:06 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> 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'),
> +

Interesting that this does better than just letting LLVM doing the lowering.

Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

for the series.
>     (('fmin', a, ('fneg', a)), ('fneg', ('fabs', a))),
>     (('imin', a, ('ineg', a)), ('ineg', ('iabs', a))),
>     (('fmin', a, ('fneg', ('fabs', a))), ('fneg', ('fabs', a))),
> --
> 2.17.0
>
> _______________________________________________
> 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