[Mesa-dev] [PATCH 2/6] nir: Turn bcsel of +/- 1.0 and 0.0 into b2f sequences.

Ian Romanick idr at freedesktop.org
Wed Aug 10 18:02:46 UTC 2016


On 08/09/2016 07:30 PM, Kenneth Graunke wrote:
> On Haswell (GL 3.3):
> 
> total instructions in shared programs: 6208759 -> 6203860 (-0.08%)
> instructions in affected programs: 856541 -> 851642 (-0.57%)
> helped: 3157
> HURT: 113
> LOST:   7
> GAINED: 15
> 
> On Broadwell (GL 4.4):
> 
> total instructions in shared programs: 11637854 -> 11632016 (-0.05%)
> instructions in affected programs: 1055693 -> 1049855 (-0.55%)
> helped: 3900
> HURT: 176
> LOST:   1
> GAINED: 18
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/compiler/nir/nir_opt_algebraic.py | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
> index 1cf614c..4e9896f 100644
> --- a/src/compiler/nir/nir_opt_algebraic.py
> +++ b/src/compiler/nir/nir_opt_algebraic.py
> @@ -251,6 +251,10 @@ optimizations = [
>     (('ieq', 'a at bool', False), ('inot', 'a')),
>     (('bcsel', a, True, False), ('ine', a, 0)),
>     (('bcsel', a, False, True), ('ieq', a, 0)),
> +   (('bcsel at 32', a, 1.0, 0.0), ('b2f', ('ine', a, 0))),
> +   (('bcsel at 32', a, 0.0, 1.0), ('b2f', ('ieq', a, 0))),
> +   (('bcsel at 32', a, -1.0, -0.0), ('fneg', ('b2f', ('ine', a, 0)))),
> +   (('bcsel at 32', a, -0.0, -1.0), ('fneg', ('b2f', ('ieq', a, 0)))),

One of the other things I was experimenting with, that had mixed
results, was rearranging larger sequences like  x * bcsel(b, 1.0, 0.0).
There were a few different ways to handle it, and the optimal way was
dependent on the way the Boolean value was generated and on the way the
result was used.  This dovetailed into my work in removing spurious b2f
(and f2i) expressions.

>     (('bcsel', True, b, c), b),
>     (('bcsel', False, b, c), c),
>     # The result of this should be hit by constant propagation and, in the
> 



More information about the mesa-dev mailing list