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)