From 16c064dfaf98d36777a73aa140d3e8c46b8c4611 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 3 Feb 2022 11:15:59 -0800 Subject: [PATCH] nir: Add a helper for setting up a nir_ssa_scalar struct. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trivial, but will help users avoid some struct constructions that can be awkward in C. Reviewed-by: Ian Romanick Reviewed-by: Daniel Schürmann Part-of: --- src/compiler/nir/nir.h | 10 ++++++++-- src/compiler/nir/nir_opt_offsets.c | 2 +- src/compiler/nir/nir_range_analysis.c | 16 ++++++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 83f426276aa..a48fbb2007d 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2554,12 +2554,18 @@ nir_ssa_scalar_chase_alu_src(nir_ssa_scalar s, unsigned alu_src_idx) nir_ssa_scalar nir_ssa_scalar_chase_movs(nir_ssa_scalar s); +static inline nir_ssa_scalar +nir_get_ssa_scalar(nir_ssa_def *def, unsigned channel) +{ + nir_ssa_scalar s = { def, channel }; + return s; +} + /** Returns a nir_ssa_scalar where we've followed the bit-exact mov/vec use chain to the original definition */ static inline nir_ssa_scalar nir_ssa_scalar_resolved(nir_ssa_def *def, unsigned channel) { - nir_ssa_scalar s = { def, channel }; - return nir_ssa_scalar_chase_movs(s); + return nir_ssa_scalar_chase_movs(nir_get_ssa_scalar(def, channel)); } diff --git a/src/compiler/nir/nir_opt_offsets.c b/src/compiler/nir/nir_opt_offsets.c index 2c235224c0c..b81ec74c6ea 100644 --- a/src/compiler/nir/nir_opt_offsets.c +++ b/src/compiler/nir/nir_opt_offsets.c @@ -98,7 +98,7 @@ try_extract_const_addition(nir_builder *b, nir_ssa_scalar val, opt_offsets_state nir_ssa_def *r = nir_iadd(b, nir_channel(b, src[0].def, src[0].comp), nir_channel(b, src[1].def, src[1].comp)); - return (nir_ssa_scalar){r, 0}; + return nir_get_ssa_scalar(r, 0); } static bool diff --git a/src/compiler/nir/nir_range_analysis.c b/src/compiler/nir/nir_range_analysis.c index 7fa52fe5ba4..29b2903ca54 100644 --- a/src/compiler/nir/nir_range_analysis.c +++ b/src/compiler/nir/nir_range_analysis.c @@ -1223,8 +1223,8 @@ search_phi_bcsel(nir_ssa_scalar scalar, nir_ssa_scalar *buf, unsigned buf_size, unsigned total_added = 0; nir_foreach_phi_src(src, phi) { num_sources_left--; - unsigned added = search_phi_bcsel( - (nir_ssa_scalar){src->src.ssa, 0}, buf + total_added, buf_size - num_sources_left, visited); + unsigned added = search_phi_bcsel(nir_get_ssa_scalar(src->src.ssa, 0), + buf + total_added, buf_size - num_sources_left, visited); assert(added <= buf_size); buf_size -= added; total_added += added; @@ -1347,7 +1347,7 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, break; case nir_intrinsic_mbcnt_amd: { uint32_t src0 = config->max_subgroup_size - 1; - uint32_t src1 = nir_unsigned_upper_bound(shader, range_ht, (nir_ssa_scalar){intrin->src[1].ssa, 0}, config); + uint32_t src1 = nir_unsigned_upper_bound(shader, range_ht, nir_get_ssa_scalar(intrin->src[1].ssa, 0), config); if (src0 + src1 < src0) res = max; /* overflow */ @@ -1388,7 +1388,7 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, case nir_intrinsic_exclusive_scan: { nir_op op = nir_intrinsic_reduction_op(intrin); if (op == nir_op_umin || op == nir_op_umax || op == nir_op_imin || op == nir_op_imax) - res = nir_unsigned_upper_bound(shader, range_ht, (nir_ssa_scalar){intrin->src[0].ssa, 0}, config); + res = nir_unsigned_upper_bound(shader, range_ht, nir_get_ssa_scalar(intrin->src[0].ssa, 0), config); break; } case nir_intrinsic_read_first_invocation: @@ -1403,11 +1403,11 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, case nir_intrinsic_quad_swap_diagonal: case nir_intrinsic_quad_swizzle_amd: case nir_intrinsic_masked_swizzle_amd: - res = nir_unsigned_upper_bound(shader, range_ht, (nir_ssa_scalar){intrin->src[0].ssa, 0}, config); + res = nir_unsigned_upper_bound(shader, range_ht, nir_get_ssa_scalar(intrin->src[0].ssa, 0), config); break; case nir_intrinsic_write_invocation_amd: { - uint32_t src0 = nir_unsigned_upper_bound(shader, range_ht, (nir_ssa_scalar){intrin->src[0].ssa, 0}, config); - uint32_t src1 = nir_unsigned_upper_bound(shader, range_ht, (nir_ssa_scalar){intrin->src[1].ssa, 0}, config); + uint32_t src0 = nir_unsigned_upper_bound(shader, range_ht, nir_get_ssa_scalar(intrin->src[0].ssa, 0), config); + uint32_t src1 = nir_unsigned_upper_bound(shader, range_ht, nir_get_ssa_scalar(intrin->src[1].ssa, 0), config); res = MAX2(src0, src1); break; } @@ -1441,7 +1441,7 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, } else { nir_foreach_phi_src(src, nir_instr_as_phi(scalar.def->parent_instr)) { res = MAX2(res, nir_unsigned_upper_bound( - shader, range_ht, (nir_ssa_scalar){src->src.ssa, 0}, config)); + shader, range_ht, nir_get_ssa_scalar(src->src.ssa, 0), config)); } }