nir: Recognize imul(b2i(a), b2i(b)) as a logical AND.
authorMatt Turner <mattst88@gmail.com>
Wed, 6 May 2015 02:50:58 +0000 (19:50 -0700)
committerMatt Turner <mattst88@gmail.com>
Thu, 7 May 2015 17:51:05 +0000 (10:51 -0700)
Four shaders in Unreal 4's Sun Temple are helped, and gain SIMD16
because we avoid an integer multiplication.

instructions in affected programs:     2353 -> 2245 (-4.59%)
helped:                                4
GAINED:                                4

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Glenn Kennard <glenn.kennard@gmail.com>
src/glsl/nir/nir_opt_algebraic.py

index 2a2b9561efbe66dc9f5882ecec6f32e2f0a452fd..92928cf3a1dc1cd340d5eeb32e901e9d78cadd36 100644 (file)
@@ -101,6 +101,7 @@ optimizations = [
    (('seq', a, b), ('b2f', ('feq', a, b)), 'options->lower_scmp'),
    (('sne', a, b), ('b2f', ('fne', a, b)), 'options->lower_scmp'),
    # Emulating booleans
+   (('imul', ('b2i', a), ('b2i', b)), ('b2i', ('iand', a, b))),
    (('fmul', ('b2f', a), ('b2f', b)), ('b2f', ('iand', a, b))),
    (('fsat', ('fadd', ('b2f', a), ('b2f', b))), ('b2f', ('ior', a, b))),
    (('iand', 'a@bool', 1.0), ('b2f', a)),