nir: Recognize product of open-coded pow()s.
authorMatt Turner <mattst88@gmail.com>
Thu, 4 Feb 2016 20:00:15 +0000 (12:00 -0800)
committerMatt Turner <mattst88@gmail.com>
Tue, 9 Feb 2016 04:38:17 +0000 (20:38 -0800)
Prevents regressions in the next commit.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/compiler/nir/nir_opt_algebraic.py

index 60df69fadbd0efb20dd84c72088c9b3baa32fb28..9b82bac6f6c9020920049243ff061f8b9a9e4388 100644 (file)
@@ -167,6 +167,8 @@ optimizations = [
    (('flog2', ('fexp2', a)), a), # lg2(2^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
+   (('fexp2', ('fadd', ('fmul', ('flog2', a), b), ('fmul', ('flog2', c), d))),
+    ('fmul', ('fpow', a, b), ('fpow', c, d)), '!options->lower_fpow'), # 2^(lg2(a) * b + lg2(c) + d) = a^b * c^d
    (('fpow', a, 1.0), a),
    (('fpow', a, 2.0), ('fmul', a, a)),
    (('fpow', a, 4.0), ('fmul', ('fmul', a, a), ('fmul', a, a))),