From f534c2c539f1a4722c03c63a257e99b052e6f1a8 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 26 May 2023 11:10:58 -0400 Subject: [PATCH] nir/builder: Add nir_replicate helper Splat a scalar to all components of a vector. Signed-off-by: Alyssa Rosenzweig Acked-by: Jesse Natalie Part-of: --- src/compiler/nir/nir_builder.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index c6a476fa6b8..c1d676896ba 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -707,6 +707,19 @@ nir_vector_insert(nir_builder *b, nir_ssa_def *vec, nir_ssa_def *scalar, } } +static inline nir_ssa_def * +nir_replicate(nir_builder *b, nir_ssa_def *scalar, unsigned num_components) +{ + assert(scalar->num_components == 1); + assert(num_components < NIR_MAX_VEC_COMPONENTS); + + nir_ssa_def *copies[NIR_MAX_VEC_COMPONENTS] = {NULL}; + for (unsigned i = 0; i < num_components; ++i) + copies[i] = scalar; + + return nir_vec(b, copies, num_components); +} + static inline nir_ssa_def * nir_iadd_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) {