mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
agx: Refactor expressions in agx_nir_lower_address
So we can add more instructions without duplication. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Acked-by: Christian Gmeiner <christian.gmeiner@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23529>
This commit is contained in:
parent
5a55ef2fd1
commit
13535d3f9d
1 changed files with 14 additions and 11 deletions
|
|
@ -293,28 +293,31 @@ pass(struct nir_builder *b, nir_instr *instr, UNUSED void *data)
|
|||
assert(match.shift >= 0);
|
||||
nir_ssa_def *new_base = nir_channel(b, match.base.def, match.base.comp);
|
||||
|
||||
nir_ssa_def *repl = NULL;
|
||||
bool has_dest = (intr->intrinsic != nir_intrinsic_store_global);
|
||||
unsigned num_components = has_dest ? nir_dest_num_components(intr->dest) : 0;
|
||||
unsigned bit_size = has_dest ? nir_dest_bit_size(intr->dest) : 0;
|
||||
|
||||
if (intr->intrinsic == nir_intrinsic_load_global) {
|
||||
nir_ssa_def *repl =
|
||||
nir_load_agx(b, nir_dest_num_components(intr->dest),
|
||||
nir_dest_bit_size(intr->dest), new_base, offset,
|
||||
repl =
|
||||
nir_load_agx(b, num_components, bit_size, new_base, offset,
|
||||
.access = nir_intrinsic_access(intr), .base = match.shift,
|
||||
.format = format, .sign_extend = match.sign_extend);
|
||||
|
||||
nir_ssa_def_rewrite_uses(&intr->dest.ssa, repl);
|
||||
} else if (intr->intrinsic == nir_intrinsic_load_global_constant) {
|
||||
nir_ssa_def *repl = nir_load_constant_agx(
|
||||
b, nir_dest_num_components(intr->dest), nir_dest_bit_size(intr->dest),
|
||||
new_base, offset, .access = nir_intrinsic_access(intr),
|
||||
.base = match.shift, .format = format,
|
||||
.sign_extend = match.sign_extend);
|
||||
|
||||
nir_ssa_def_rewrite_uses(&intr->dest.ssa, repl);
|
||||
repl = nir_load_constant_agx(b, num_components, bit_size, new_base,
|
||||
offset, .access = nir_intrinsic_access(intr),
|
||||
.base = match.shift, .format = format,
|
||||
.sign_extend = match.sign_extend);
|
||||
} else {
|
||||
nir_store_agx(b, intr->src[0].ssa, new_base, offset,
|
||||
.access = nir_intrinsic_access(intr), .base = match.shift,
|
||||
.format = format, .sign_extend = match.sign_extend);
|
||||
}
|
||||
|
||||
if (repl)
|
||||
nir_ssa_def_rewrite_uses(&intr->dest.ssa, repl);
|
||||
|
||||
nir_instr_remove(instr);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue