nir_algebraic: Add basic optimizations for umul_low and imadsh_mix16
authorEduardo Lima Mitev <elima@igalia.com>
Sun, 12 May 2019 22:09:38 +0000 (00:09 +0200)
committerEduardo Lima Mitev <elima@igalia.com>
Fri, 7 Jun 2019 06:45:05 +0000 (08:45 +0200)
commit3addd7c8d9da9fd050e91738110b6e0a22b9023c
tree134eced3eaa6f82bad9ca51f5fb2d0ea6946f719
parente45de3a6c3380ecffcbfc8034c4b245cc52c7434
nir_algebraic: Add basic optimizations for umul_low and imadsh_mix16

For umul_low (al * bl), zero is returned if the low 16-bits word of either
source is zero.

for imadsh_mix16 (ah * bl << 16 + c), c is returned if either 'ah' or 'bl'
is zero.

A couple of nir_search_helpers are added:

is_upper_half_zero() returns true if the highest word of all components of
an integer NIR alu src are zero.

is_lower_half_zero() returns true if the lowest word of all components of
an integer nir alu src are zero.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/compiler/nir/nir_opt_algebraic.py
src/compiler/nir/nir_search_helpers.h