nir/glsl: Add another way of doing lower_imul64 for gen8+
authorSagar Ghuge <sagar.ghuge@intel.com>
Fri, 15 Feb 2019 07:08:39 +0000 (23:08 -0800)
committerSagar Ghuge <sagar.ghuge@intel.com>
Mon, 4 Mar 2019 23:50:25 +0000 (15:50 -0800)
commite551040c602d392019e68f54d9a3a310d2a937a3
treed36046c91c6f69f2a8b9fd561add2b1cc9e820b2
parent1d363d440f261fbadc1db3c17acc514b7130d505
nir/glsl: Add another way of doing lower_imul64 for gen8+

On Gen 8 and 9, "mul" instruction supports 64 bit destination type. We
can reduce our 64x64 int multiplication from 4 instructions to 3.

Also instead of emitting two mul instructions, we can emit single mul
instuction and extract low/high 32 bits from 64 bit result for
[i/u]mulExtended

v2: 1) Allow lower_mul_high64 to use new opcode (Jason Ekstrand)
    2) Add lower_mul_2x32_64 flag (Matt Turner)
    3) Remove associative property as bit size is different (Connor
       Abbott)

v3: Fix indentation and variable naming convention (Jason Ekstrand)

Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir.h
src/compiler/nir/nir_lower_int64.c
src/compiler/nir/nir_opcodes.py
src/compiler/nir/nir_opt_algebraic.py
src/intel/compiler/brw_compiler.c
src/intel/compiler/brw_fs_nir.cpp