[Mesa-dev] [PATCH v2 6/7] nir: Teach nir_opt_algebraic about adding and subtracting the same thing
Matt Turner
mattst88 at gmail.com
Wed Dec 16 17:38:34 PST 2015
On Wed, Dec 16, 2015 at 3:47 PM, Kristian HÃ¸gsberg <krh at bitplanet.net> wrote:
> From: Kristian HÃ¸gsberg Kristensen <krh at bitplanet.net>
>
> This optimizes a + b - b to just a. Modest shader-db results (BDW):
>
> total instructions in shared programs: 7842452 -> 7841862 (-0.01%)
> instructions in affected programs: 61938 -> 61348 (-0.95%)
> total loops in shared programs: 2131 -> 2131 (0.00%)
> helped: 263
> HURT: 0
> GAINED: 0
> LOST: 0
>
> but the optimization turns
>
> gl_VertexID - gl_BaseVertexARB
>
> into just a reference to SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, which the
> i965 hardware supports natively. That means we can avoid using the
> internal vertex buffer for gl_BaseVertexARB in this case.
>
> Reviewed-by: Eduardo Lima Mitev <elima at igalia.com>
> Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/glsl/nir/nir_opt_algebraic.py | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/src/glsl/nir/nir_opt_algebraic.py b/src/glsl/nir/nir_opt_algebraic.py
> index cb715c0..1fdad3d 100644
> --- a/src/glsl/nir/nir_opt_algebraic.py
> +++ b/src/glsl/nir/nir_opt_algebraic.py
> @@ -62,6 +62,10 @@ optimizations = [
> (('iadd', ('imul', a, b), ('imul', a, c)), ('imul', a, ('iadd', b, c))),
> (('fadd', ('fneg', a), a), 0.0),
> (('iadd', ('ineg', a), a), 0),
> + (('iadd', ('ineg', a), ('iadd', a, b)), b),
> + (('iadd', a, ('iadd', ('ineg', a), b)), b),
> + (('fadd', ('fneg', a), ('fadd', a, b)), b),
> + (('fadd', a, ('fadd', ('fneg', a), b)), b),
a + b - b isn't equal to a for floating point numbers in general.
There are other technically unsafe algebraic optimizations we do today
that we'll probably have to predicate on some flag.
I think it's fine to add them at this point.
Reviewed-by: Matt Turner <mattst88 at gmail.com>
More information about the mesa-dev
mailing list