diff --git a/src/amd/compiler/aco_live_var_analysis.cpp b/src/amd/compiler/aco_live_var_analysis.cpp index 970451c5180..675d40b32e0 100644 --- a/src/amd/compiler/aco_live_var_analysis.cpp +++ b/src/amd/compiler/aco_live_var_analysis.cpp @@ -95,7 +95,7 @@ void process_live_temps_per_block(live_ctx& ctx, Block* block) { RegisterDemand new_demand; - + block->register_demand = RegisterDemand(); IDSet live = ctx.program->live.live_out[block->index]; /* initialize register demand */ @@ -163,6 +163,7 @@ process_live_temps_per_block(live_ctx& ctx, Block* block) RegisterDemand before_instr = new_demand + get_additional_operand_demand(insn); insn->register_demand.update(before_instr); + block->register_demand.update(insn->register_demand); } /* handle phi definitions */ @@ -250,6 +251,8 @@ process_live_temps_per_block(live_ctx& ctx, Block* block) 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); + ctx.program->max_reg_demand.update(block->register_demand); assert(!block->linear_preds.empty() || (new_demand == RegisterDemand() && live.empty())); } @@ -432,17 +435,6 @@ live_var_analysis(Program* program) process_live_temps_per_block(ctx, &program->blocks[ctx.worklist--]); } - /* update block's register demand */ - for (Block& block : program->blocks) { - if (program->progress < CompilationProgress::after_ra) { - block.register_demand = RegisterDemand(); - for (const aco_ptr& instr : block.instructions) - block.register_demand.update(instr->register_demand); - } - - program->max_reg_demand.update(block.register_demand); - } - /* calculate the program's register demand and number of waves */ if (program->progress < CompilationProgress::after_ra) update_vgpr_sgpr_demand(program, program->max_reg_demand); diff --git a/src/amd/compiler/aco_scheduler.cpp b/src/amd/compiler/aco_scheduler.cpp index 3ad724007bc..436a37381a9 100644 --- a/src/amd/compiler/aco_scheduler.cpp +++ b/src/amd/compiler/aco_scheduler.cpp @@ -1221,7 +1221,7 @@ schedule_block(sched_ctx& ctx, Program* program, Block* block) } /* resummarize the block's register demand */ - block->register_demand = RegisterDemand(); + block->register_demand = block->live_in_demand; for (const aco_ptr& instr : block->instructions) block->register_demand.update(instr->register_demand); }