nir: Add lowering of POW instructions if the lower flag is set.
authorEric Anholt <eric@anholt.net>
Wed, 28 Jan 2015 18:32:57 +0000 (10:32 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 18 Feb 2015 22:47:50 +0000 (14:47 -0800)
This could be done in a separate pass like we do in GLSL IR, but it seems
to me like having the definitions of the transformations in the two
directions next to each other makes a lot of sense.

v2: Reorder the comment about the transformation.

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

index 76917f53a4606e1b4ea3a83dc538ab821dfa1a8f..b8b28f1d6d18145ad926a3dedcdcbd8655379140 100644 (file)
@@ -118,6 +118,7 @@ optimizations = [
    (('fexp',  ('flog',  a)), a), # e^ln(a)  = a
    (('flog2', ('fexp2', a)), a), # lg2(2^a) = a
    (('flog',  ('fexp',  a)), a), # ln(e^a)  = a
+   (('fpow', a, b), ('fexp2', ('fmul', ('flog2', a), b)), 'options->lower_fpow'), # a^b = 2^(lg2(a)*b)
    (('fexp2', ('fmul', ('flog2', a), b)), ('fpow', a, b), '!options->lower_fpow'), # 2^(lg2(a)*b) = a^b
    (('fexp',  ('fmul', ('flog', a), b)),  ('fpow', a, b), '!options->lower_fpow'), # e^(ln(a)*b) = a^b
    (('fpow', a, 1.0), a),