From 450e79c1e6c5e338502380ba96b18d4e38a78bfe Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 22 Feb 2024 08:41:39 -0400 Subject: [PATCH] agx: add SSA reindexing pass spilling and SSA repair will generate piles of dead SSA defs. add a reindexing pass to keep memory usag emanagable on large shaders. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_compiler.h | 1 + src/asahi/compiler/agx_reindex_ssa.c | 33 ++++++++++++++++++++++++++++ src/asahi/compiler/meson.build | 1 + 3 files changed, 35 insertions(+) create mode 100644 src/asahi/compiler/agx_reindex_ssa.c diff --git a/src/asahi/compiler/agx_compiler.h b/src/asahi/compiler/agx_compiler.h index d83b032b69b..e568af65b27 100644 --- a/src/asahi/compiler/agx_compiler.h +++ b/src/asahi/compiler/agx_compiler.h @@ -938,6 +938,7 @@ void agx_lower_uniform_sources(agx_context *ctx); void agx_opt_cse(agx_context *ctx); void agx_dce(agx_context *ctx, bool partial); void agx_pressure_schedule(agx_context *ctx); +void agx_reindex_ssa(agx_context *ctx); void agx_ra(agx_context *ctx); void agx_lower_64bit_postra(agx_context *ctx); void agx_insert_waits(agx_context *ctx); diff --git a/src/asahi/compiler/agx_reindex_ssa.c b/src/asahi/compiler/agx_reindex_ssa.c new file mode 100644 index 00000000000..5b2967adfb2 --- /dev/null +++ b/src/asahi/compiler/agx_reindex_ssa.c @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Valve Corporation + * SPDX-License-Identifier: MIT + */ + +#include +#include "agx_compiler.h" + +/* Reindex SSA to reduce memory usage */ + +void +agx_reindex_ssa(agx_context *ctx) +{ + unsigned *remap = calloc(ctx->alloc, sizeof(*remap)); + + ctx->alloc = 0; + + agx_foreach_instr_global(ctx, I) { + agx_foreach_ssa_dest(I, d) { + assert(!remap[I->dest[d].value] && "input is SSA"); + remap[I->dest[d].value] = ctx->alloc++; + I->dest[d].value = remap[I->dest[d].value]; + } + } + + agx_foreach_instr_global(ctx, I) { + agx_foreach_ssa_src(I, s) { + I->src[s].value = remap[I->src[s].value]; + } + } + + free(remap); +} diff --git a/src/asahi/compiler/meson.build b/src/asahi/compiler/meson.build index 88ce1769fec..89524cf47a0 100644 --- a/src/asahi/compiler/meson.build +++ b/src/asahi/compiler/meson.build @@ -34,6 +34,7 @@ libasahi_agx_files = files( 'agx_opt_empty_else.c', 'agx_opt_jmp_none.c', 'agx_optimizer.c', + 'agx_reindex_ssa.c', 'agx_register_allocate.c', 'agx_validate.c', )