[Mesa-dev] [PATCH 7/7] nir/opt_algebraic: Add some constant bcsel reductions
Jason Ekstrand
jason at jlekstrand.net
Thu Jan 29 13:43:04 PST 2015
On Thu, Jan 29, 2015 at 12:50 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:
> total instructions in shared programs: 8026469 -> 8026343 (-0.00%)
> instructions in affected programs: 28541 -> 28415 (-0.44%)
> helped: 101
> HURT: 76
>
These numbers are bogus too. The real ones look good for NIR but not for
FS. I'm looking into that.
--Jason
> ---
> src/glsl/nir/nir_opt_algebraic.py | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> diff --git a/src/glsl/nir/nir_opt_algebraic.py
> b/src/glsl/nir/nir_opt_algebraic.py
> index e3b309c..4e1beb4 100644
> --- a/src/glsl/nir/nir_opt_algebraic.py
> +++ b/src/glsl/nir/nir_opt_algebraic.py
> @@ -122,9 +122,35 @@ optimizations = [
> (('ieq', 'a at bool', 0), ('inot', 'a')),
> (('bcsel', 'a at bool', True, False), 'a'),
> (('bcsel', 'a at bool', False, True), ('inot', 'a')),
> + (('bcsel', True, b, c), b),
> + (('bcsel', False, b, c), c),
> + # The result of this should be hit by constant propagation and, in the
> + # next round of opt_algebraic, get picked up by one of the above two.
> + (('bcsel', '#a', b, c), ('bcsel', ('ine', 'a', 0), b, c)),
>
> # This one may not be exact
> (('feq', ('fadd', a, b), 0.0), ('feq', a, ('fneg', b))),
> ]
>
> +# Add optimizations to handle the case where the result of a ternary is
> +# compared to a constant. This way we can take things like
> +#
> +# (a ? 0 : 1) > 0
> +#
> +# and turn it into
> +#
> +# a ? (0 > 0) : (1 > 0)
> +#
> +# which constant folding will eat for lunch. The resulting ternary will
> +# further get cleaned up by the boolean reductions above ane we will be
> +# left with just the original variable "a".
> +for op in ['flt', 'fge', 'feq', 'fne',
> + 'ilt', 'ige', 'ieq', 'ine', 'ult', 'uge']:
> + optimizations += [
> + ((op, ('bcsel', 'a', '#b', '#c'), '#d'),
> + ('bcsel', 'a', (op, 'b', 'd'), (op, 'c', 'd'))),
> + ((op, '#d', ('bcsel', a, '#b', '#c')),
> + ('bcsel', 'a', (op, 'd', 'b'), (op, 'd', 'c'))),
> + ]
> +
> print nir_algebraic.AlgebraicPass("nir_opt_algebraic",
> optimizations).render()
> --
> 2.2.2
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150129/8502aa99/attachment.html>
More information about the mesa-dev
mailing list