aco/ra: rework linear VGPR allocation
We allocate them at the end of the register file and keep them separate from normal VGPRs. This is for two reasons: - Because we only ever move linear VGPRs into an empty space or a space previously occupied by a linear one, we never have to swap a normal VGPR and a linear one. This simplifies copy lowering. - As linear VGPR's live ranges only start and end on top-level blocks, we never have to move a linear VGPR in control flow. fossil-db (navi31): Totals from 5493 (6.93% of 79242) affected shaders: MaxWaves: 150365 -> 150343 (-0.01%) Instrs: 7974740 -> 7976073 (+0.02%); split: -0.06%, +0.08% CodeSize: 41296024 -> 41299024 (+0.01%); split: -0.06%, +0.06% VGPRs: 283192 -> 329560 (+16.37%) Latency: 64267936 -> 64268414 (+0.00%); split: -0.17%, +0.17% InvThroughput: 10954037 -> 10951735 (-0.02%); split: -0.09%, +0.07% VClause: 132792 -> 132956 (+0.12%); split: -0.06%, +0.18% SClause: 223854 -> 223841 (-0.01%); split: -0.01%, +0.01% Copies: 559574 -> 561395 (+0.33%); split: -0.24%, +0.56% Branches: 179630 -> 179636 (+0.00%); split: -0.02%, +0.02% VALU: 4572683 -> 4574487 (+0.04%); split: -0.03%, +0.07% SALU: 772076 -> 772111 (+0.00%); split: -0.01%, +0.01% VOPD: 1095 -> 1099 (+0.37%); split: +0.73%, -0.37% Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27697>
This commit is contained in:
@@ -176,7 +176,7 @@ aco_postprocess_shader(const struct aco_compiler_options* options,
|
||||
validate(program.get());
|
||||
|
||||
/* Register Allocation */
|
||||
aco::register_allocation(program.get(), live_vars.live_out);
|
||||
aco::register_allocation(program.get(), live_vars);
|
||||
|
||||
if (aco::validate_ra(program.get())) {
|
||||
aco_print_program(program.get(), stderr);
|
||||
|
||||
Reference in New Issue
Block a user