From: Jason Ekstrand Date: Wed, 7 Nov 2018 23:47:45 +0000 (-0600) Subject: nir: Add a read_mask helper for ALU instructions X-Git-Tag: upstream/19.0.0~1717 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=61e15348c435f0533b5b6b488ed353e16daa5f79;p=platform%2Fupstream%2Fmesa.git nir: Add a read_mask helper for ALU instructions Reviewed-by: Kenneth Graunke --- diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 0be40d2..249b935 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1530,13 +1530,7 @@ nir_ssa_def_components_read(const nir_ssa_def *def) nir_alu_src *alu_src = exec_node_data(nir_alu_src, use, src); int src_idx = alu_src - &alu->src[0]; assert(src_idx >= 0 && src_idx < nir_op_infos[alu->op].num_inputs); - - for (unsigned c = 0; c < NIR_MAX_VEC_COMPONENTS; c++) { - if (!nir_alu_instr_channel_used(alu, src_idx, c)) - continue; - - read_mask |= (1 << alu_src->swizzle[c]); - } + read_mask |= nir_alu_instr_src_read_mask(alu, src_idx); } else { return (1 << def->num_components) - 1; } diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index a0ae9a4..f4f6b10 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -952,6 +952,19 @@ nir_alu_instr_channel_used(const nir_alu_instr *instr, unsigned src, return (instr->dest.write_mask >> channel) & 1; } +static inline nir_component_mask_t +nir_alu_instr_src_read_mask(const nir_alu_instr *instr, unsigned src) +{ + nir_component_mask_t read_mask = 0; + for (unsigned c = 0; c < NIR_MAX_VEC_COMPONENTS; c++) { + if (!nir_alu_instr_channel_used(instr, src, c)) + continue; + + read_mask |= (1 << instr->src[src].swizzle[c]); + } + return read_mask; +} + /* * For instructions whose destinations are SSA, get the number of channels * used for a source