From 4c9b91047bc11c82a02409ded4c16b217858f5d6 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Tue, 29 Jul 2025 16:22:24 +0100 Subject: [PATCH] nir/load_store_vectorize: set is_store for shared append/consume So that check_for_aliasing() doesn't ignore them. Signed-off-by: Rhys Perry Backport-to: 25.1 Reviewed-by: Georg Lehmann Part-of: (cherry picked from commit d3476650f102c72d210cc79579bdb7d1076ffbdf) --- .pick_status.json | 2 +- src/compiler/nir/nir_opt_load_store_vectorize.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 1af0fb95da4..4ed886eddf2 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3484,7 +3484,7 @@ "description": "nir/load_store_vectorize: set is_store for shared append/consume", "nominated": true, "nomination_type": 4, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/compiler/nir/nir_opt_load_store_vectorize.c b/src/compiler/nir/nir_opt_load_store_vectorize.c index ef6ae9efa08..0d73f01c4bf 100644 --- a/src/compiler/nir/nir_opt_load_store_vectorize.c +++ b/src/compiler/nir/nir_opt_load_store_vectorize.c @@ -257,7 +257,9 @@ sort_entries(const void *a_, const void *b_) static unsigned get_bit_size(struct entry *entry) { - unsigned size = entry->is_store ? entry->intrin->src[entry->info->value_src].ssa->bit_size : entry->intrin->def.bit_size; + unsigned size = entry->info->value_src >= 0 + ? entry->intrin->src[entry->info->value_src].ssa->bit_size + : entry->intrin->def.bit_size; return size == 1 ? 32u : size; } @@ -599,11 +601,14 @@ create_entry(void *mem_ctx, bool is_shared2 = intrin->intrinsic == nir_intrinsic_load_shared2_amd || intrin->intrinsic == nir_intrinsic_store_shared2_amd; + bool is_shared_append = intrin->intrinsic == nir_intrinsic_shared_append_amd || + intrin->intrinsic == nir_intrinsic_shared_consume_amd; + struct entry *entry = rzalloc(mem_ctx, struct entry); entry->intrin = intrin; entry->instr = &intrin->instr; entry->info = info; - entry->is_store = entry->info->value_src >= 0; + entry->is_store = entry->info->value_src >= 0 || is_shared_append; entry->num_components = entry->is_store ? intrin->num_components : nir_def_last_component_read(&intrin->def) + 1; if (is_shared2)