mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
nir: add nir_scalar_equal
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24656>
This commit is contained in:
parent
bce9bba90d
commit
3a715cc9d2
5 changed files with 12 additions and 8 deletions
|
|
@ -2682,6 +2682,12 @@ nir_scalar_resolved(nir_def *def, unsigned channel)
|
|||
return nir_scalar_chase_movs(nir_get_scalar(def, channel));
|
||||
}
|
||||
|
||||
static inline bool
|
||||
nir_scalar_equal(nir_scalar s1, nir_scalar s2)
|
||||
{
|
||||
return s1.def == s2.def && s1.comp == s2.comp;
|
||||
}
|
||||
|
||||
static inline uint64_t
|
||||
nir_alu_src_as_uint(nir_alu_src src)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1422,11 +1422,11 @@ opt_if_rewrite_uniform_uses(nir_builder *b, nir_if *nif, nir_scalar cond, bool a
|
|||
nir_scalar intrin_src = { intrin->src[0].ssa, src_uni.comp };
|
||||
nir_scalar resolved_intrin_src = nir_scalar_resolved(intrin_src.def, intrin_src.comp);
|
||||
|
||||
if (resolved_intrin_src.comp != src_div.comp || resolved_intrin_src.def != src_div.def)
|
||||
if (!nir_scalar_equal(resolved_intrin_src, src_div))
|
||||
continue;
|
||||
|
||||
progress |= rewrite_comp_uses_within_if(b, nif, op == nir_op_ine, resolved_intrin_src, src_uni);
|
||||
if (intrin_src.comp != resolved_intrin_src.comp || intrin_src.def != resolved_intrin_src.def)
|
||||
if (!nir_scalar_equal(intrin_src, resolved_intrin_src))
|
||||
progress |= rewrite_comp_uses_within_if(b, nif, op == nir_op_ine, intrin_src, src_uni);
|
||||
|
||||
return progress;
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ try_opt_exclusive_scan_to_inclusive(nir_intrinsic_instr *intrin)
|
|||
nir_scalar op_scalar = nir_scalar_resolved(alu->src[!src_index].src.ssa,
|
||||
alu->src[!src_index].swizzle[0]);
|
||||
|
||||
if (scan_scalar.def != op_scalar.def || scan_scalar.comp != op_scalar.comp)
|
||||
if (!nir_scalar_equal(scan_scalar, op_scalar))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -196,8 +196,7 @@ entry_key_equals(const void *a_, const void *b_)
|
|||
return false;
|
||||
|
||||
for (unsigned i = 0; i < a->offset_def_count; i++) {
|
||||
if (a->offset_defs[i].def != b->offset_defs[i].def ||
|
||||
a->offset_defs[i].comp != b->offset_defs[i].comp)
|
||||
if (!nir_scalar_equal(a->offset_defs[i], b->offset_defs[i]))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -326,8 +325,7 @@ add_to_entry_key(nir_scalar *offset_defs, uint64_t *offset_defs_mul,
|
|||
offset_defs[i] = def;
|
||||
offset_defs_mul[i] = mul;
|
||||
return 1;
|
||||
} else if (def.def == offset_defs[i].def &&
|
||||
def.comp == offset_defs[i].comp) {
|
||||
} else if (nir_scalar_equal(def, offset_defs[i])) {
|
||||
/* merge with offset_def at i */
|
||||
offset_defs_mul[i] += mul;
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ opt_shrink_vector(nir_builder *b, nir_alu_instr *instr)
|
|||
/* Try reuse a component with the same value */
|
||||
unsigned j;
|
||||
for (j = 0; j < num_components; j++) {
|
||||
if (scalar.def == srcs[j].def && scalar.comp == srcs[j].comp) {
|
||||
if (nir_scalar_equal(scalar, srcs[j])) {
|
||||
reswizzle[i] = j;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue