From 29262f8cf39589c9176bc96ef616e6b912afb0d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Mon, 8 Jul 2024 18:45:11 +0200 Subject: [PATCH] aco: compute live-in variables in addition to live-out variables Part-of: --- src/amd/compiler/aco_ir.h | 2 ++ src/amd/compiler/aco_live_var_analysis.cpp | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index eb74d9da931..c5a7b4b6efe 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -2066,6 +2066,8 @@ public: monotonic_buffer_resource memory; /* live temps out per block */ std::vector live_out; + /* live-in temps per block */ + std::vector live_in; } live; struct { diff --git a/src/amd/compiler/aco_live_var_analysis.cpp b/src/amd/compiler/aco_live_var_analysis.cpp index 52a48d1e314..1e0f9fb4f75 100644 --- a/src/amd/compiler/aco_live_var_analysis.cpp +++ b/src/amd/compiler/aco_live_var_analysis.cpp @@ -246,6 +246,11 @@ process_live_temps_per_block(live_ctx& ctx, Block* block) } } + if (ctx.program->live.live_in[block->index].insert(live)) { + if (block->linear_preds.size()) + ctx.worklist = std::max(ctx.worklist, block->linear_preds.back()); + } + block->live_in_demand = new_demand; block->live_in_demand.sgpr += 2; /* Add 2 SGPRs for potential long-jumps. */ block->register_demand.update(block->live_in_demand); @@ -417,8 +422,10 @@ void live_var_analysis(Program* program) { program->live.live_out.clear(); + program->live.live_in.clear(); program->live.memory.release(); program->live.live_out.resize(program->blocks.size(), IDSet(program->live.memory)); + program->live.live_in.resize(program->blocks.size(), IDSet(program->live.memory)); program->max_reg_demand = RegisterDemand(); program->needs_vcc = program->gfx_level >= GFX10;