From 1018d0f9c04c154738a3ebe67c35a055a4908c45 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Fri, 24 Jun 2022 21:12:41 +0200 Subject: [PATCH] nir: Add a nir_test_mask helper nir_ine_imm(b, nir_iand_imm(b, x, mask), 0) and nir_i2b(b, nir_iand_imm(b, x, mask)) are common patterns which become quite messy when they are part of a larger expression. Clang-format does not improve things either and we can end up with some rather interesting looking code. (RADV ray tracing pipeline and query lowering) Signed-off-by: Konstantin Seurer Reviewed-by: Ian Romanick Reviewed-by: Jason Ekstrand Part-of: --- src/compiler/nir/nir_builder.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index bfe27164539..b1051726663 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -740,6 +740,13 @@ nir_iand_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) } } +static inline nir_ssa_def * +nir_test_mask(nir_builder *build, nir_ssa_def *x, uint64_t mask) +{ + assert(mask <= BITFIELD64_MASK(x->bit_size)); + return nir_ine_imm(build, nir_iand_imm(build, x, mask), 0); +} + static inline nir_ssa_def * nir_ior_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) {