nir: Add a flag for lowering fsqrt(x) to frcp(frsqrt(x)).
authorEric Anholt <eric@anholt.net>
Wed, 28 Jan 2015 18:39:29 +0000 (10:39 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 18 Feb 2015 22:47:50 +0000 (14:47 -0800)
vc4 cse/algebraic-disabled stats:
total uniforms in shared programs: 13972 -> 13966 (-0.04%)
uniforms in affected programs:     408 -> 402 (-1.47%)
total instructions in shared programs: 44973 -> 44911 (-0.14%)
instructions in affected programs:     1551 -> 1489 (-4.00%)

v2: Rebase to master (no TGSI->NIR present)

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
src/glsl/nir/nir.h
src/glsl/nir/nir_opt_algebraic.py

index bcc51e88ac8e89ebbc18e6a79a91d4dce3c42818..37e15efa5cf34ba5401c9671d1f2f030aca40ff6 100644 (file)
@@ -1328,6 +1328,7 @@ typedef struct nir_function {
 
 typedef struct nir_shader_compiler_options {
    bool lower_fpow;
+   bool lower_fsqrt;
 } nir_shader_compiler_options;
 
 typedef struct nir_shader {
index b8b28f1d6d18145ad926a3dedcdcbd8655379140..f93757e032505f0c42b59d38628fe5b1df0b45d3 100644 (file)
@@ -128,7 +128,8 @@ optimizations = [
    (('fdiv', 1.0, a), ('frcp', a)),
    (('frcp', ('frcp', a)), a),
    (('frcp', ('fsqrt', a)), ('frsq', a)),
-   (('frcp', ('frsq', a)), ('fsqrt', a)),
+   (('fsqrt', a), ('frcp', ('frsq', a)), 'options->lower_fsqrt'),
+   (('frcp', ('frsq', a)), ('fsqrt', a), '!options->lower_fsqrt'),
    # Boolean simplifications
    (('ine', 'a@bool', 0), 'a'),
    (('ieq', 'a@bool', 0), ('inot', 'a')),