From 3a715cc9d2f2635e72edc307dc5ce671923fbfb3 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Sun, 13 Aug 2023 00:14:29 +0200 Subject: [PATCH] nir: add nir_scalar_equal Reviewed-by: Rhys Perry Part-of: --- src/compiler/nir/nir.h | 6 ++++++ src/compiler/nir/nir_opt_if.c | 4 ++-- src/compiler/nir/nir_opt_intrinsics.c | 2 +- src/compiler/nir/nir_opt_load_store_vectorize.c | 6 ++---- src/compiler/nir/nir_opt_shrink_vectors.c | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index cbbea1e389a..c109fe355ee 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -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) { diff --git a/src/compiler/nir/nir_opt_if.c b/src/compiler/nir/nir_opt_if.c index a359239e1ba..1215f962616 100644 --- a/src/compiler/nir/nir_opt_if.c +++ b/src/compiler/nir/nir_opt_if.c @@ -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; diff --git a/src/compiler/nir/nir_opt_intrinsics.c b/src/compiler/nir/nir_opt_intrinsics.c index 95644ffe1c8..94a2e4da334 100644 --- a/src/compiler/nir/nir_opt_intrinsics.c +++ b/src/compiler/nir/nir_opt_intrinsics.c @@ -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; } diff --git a/src/compiler/nir/nir_opt_load_store_vectorize.c b/src/compiler/nir/nir_opt_load_store_vectorize.c index 4bea8fbea6f..9144e6ead07 100644 --- a/src/compiler/nir/nir_opt_load_store_vectorize.c +++ b/src/compiler/nir/nir_opt_load_store_vectorize.c @@ -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; diff --git a/src/compiler/nir/nir_opt_shrink_vectors.c b/src/compiler/nir/nir_opt_shrink_vectors.c index 40289505fd7..f2a4732821f 100644 --- a/src/compiler/nir/nir_opt_shrink_vectors.c +++ b/src/compiler/nir/nir_opt_shrink_vectors.c @@ -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; }