summaryrefslogtreecommitdiff
path: root/src/compiler/nir/nir_range_analysis.c
diff options
context:
space:
mode:
authorTimur Kristóf <timur.kristof@gmail.com>2021-04-23 08:48:46 +0200
committerMarge Bot <eric+marge@anholt.net>2021-05-12 13:47:04 +0000
commite905e0938a7f027e3ccda99ac0dd3cb7c4d46901 (patch)
tree4f29014f5af8be6bca3973b6dc3f23041d0fd193 /src/compiler/nir/nir_range_analysis.c
parent9a2ffe1abbfe287a1aaf5e76b45278d791986e6f (diff)
downloadmesa-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.c15
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;