aco: move insert_delay_alu to after insert_NOPs

s_delay_alu doesn't affect any hazards, but hazard workarounds don't
update s_delay_alu and so can make the s_delay_alu affect the wrong
instructions.

fossil-db (navi31):
Totals from 55777 (70.25% of 79395) affected shaders:
Instrs: 40740011 -> 40765017 (+0.06%)
CodeSize: 213768484 -> 213870856 (+0.05%); split: -0.00%, +0.05%
Latency: 283713083 -> 283714959 (+0.00%); split: -0.00%, +0.00%
InvThroughput: 46551791 -> 46551835 (+0.00%); split: -0.00%, +0.00%

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Acked-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23337>
This commit is contained in:
Rhys Perry 2024-08-12 16:05:43 +01:00 committed by Marge Bot
parent 807651561e
commit 30396ba604

View file

@ -185,15 +185,16 @@ aco_postprocess_shader(const struct aco_compiler_options* options,
schedule_ilp(program.get());
insert_waitcnt(program.get());
if (program->gfx_level >= GFX11) {
insert_delay_alu(program.get());
combine_delay_alu(program.get());
}
insert_NOPs(program.get());
if (program->gfx_level >= GFX11)
insert_delay_alu(program.get());
if (program->gfx_level >= GFX10)
form_hard_clauses(program.get());
if (program->gfx_level >= GFX11)
combine_delay_alu(program.get());
if (program->collect_statistics || (debug_flags & DEBUG_PERF_INFO))
collect_preasm_stats(program.get());
@ -319,13 +320,13 @@ aco_compile_rt_prolog(const struct aco_compiler_options* options,
select_rt_prolog(program.get(), &config, options, info, in_args, out_args);
validate(program.get());
insert_waitcnt(program.get());
if (program->gfx_level >= GFX11) {
insert_delay_alu(program.get());
combine_delay_alu(program.get());
}
insert_NOPs(program.get());
if (program->gfx_level >= GFX11)
insert_delay_alu(program.get());
if (program->gfx_level >= GFX10)
form_hard_clauses(program.get());
if (program->gfx_level >= GFX11)
combine_delay_alu(program.get());
if (options->dump_shader)
aco_print_program(program.get(), stderr);