intel/compiler: add a NIR pass to lower conversions
authorIago Toral Quiroga <itoral@igalia.com>
Mon, 17 Dec 2018 08:17:06 +0000 (09:17 +0100)
committerJuan A. Suarez Romero <jasuarez@igalia.com>
Thu, 18 Apr 2019 09:05:18 +0000 (11:05 +0200)
commit3e377c68f879be05059c3c8871ffc4ea752523f2
tree24dac11bddfb5aacf1b37a715967b9e8a8ac1fe1
parent829f278ad0042b0bb5026b10e7393fa3e11498b2
intel/compiler: add a NIR pass to lower conversions

Some conversions are not directly supported in hardware and need to be
split in two conversion instructions going through an intermediary type.
Doing this at the NIR level simplifies a bit the complexity in the backend.

v2:
 - Consider fp16 rounding conversion opcodes
 - Properly handle swizzles on conversion sources.

v3
 - Run the pass earlier, right after nir_opt_algebraic_late (Jason)
 - NIR alu output types already have the bit-size (Jason)
 - Use 'is_conversion' to identify conversion operations (Jason)

v4:
 - Be careful about the intermediate types we use so we don't lose
   range and avoid incorrect rounding semantics (Jason)

Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com> (v1)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/Makefile.sources
src/intel/compiler/brw_nir.c
src/intel/compiler/brw_nir.h
src/intel/compiler/brw_nir_lower_conversions.c [new file with mode: 0644]
src/intel/compiler/meson.build