nir: Add a helper for setting up a nir_ssa_scalar struct.
Trivial, but will help users avoid some struct constructions that can be awkward in C. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14865>
This commit is contained in:
parent
d95f9d189a
commit
16c064dfaf
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue