diff options
author | Timur Kristóf <timur.kristof@gmail.com> | 2021-04-23 08:48:46 +0200 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-05-12 13:47:04 +0000 |
commit | e905e0938a7f027e3ccda99ac0dd3cb7c4d46901 (patch) | |
tree | 4f29014f5af8be6bca3973b6dc3f23041d0fd193 /src/compiler/nir/nir_range_analysis.c | |
parent | 9a2ffe1abbfe287a1aaf5e76b45278d791986e6f (diff) | |
download | mesa-e905e0938a7f027e3ccda99ac0dd3cb7c4d46901.tar.gz |
nir: Support upper bound of unsigned bit size conversions.
These allow us to generate slightly better code in some cases,
eg. multiplications in ACO.
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10740>
Diffstat (limited to 'src/compiler/nir/nir_range_analysis.c')
-rw-r--r-- | src/compiler/nir/nir_range_analysis.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_range_analysis.c b/src/compiler/nir/nir_range_analysis.c index 75632783c10..1d7eb99283e 100644 --- a/src/compiler/nir/nir_range_analysis.c +++ b/src/compiler/nir/nir_range_analysis.c @@ -1457,6 +1457,15 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, case nir_op_f2u32: case nir_op_fmul: break; + case nir_op_u2u1: + case nir_op_u2u8: + case nir_op_u2u16: + case nir_op_u2u32: + if (nir_ssa_scalar_chase_alu_src(scalar, 0).def->bit_size > 32) { + /* If src is >32 bits, return max */ + return max; + } + break; default: return max; } @@ -1570,6 +1579,12 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, memcpy(&res, &max_f, 4); } break; + case nir_op_u2u1: + case nir_op_u2u8: + case nir_op_u2u16: + case nir_op_u2u32: + res = MIN2(src0, max); + break; default: res = max; break; |