aco: fix LdsBranchVmemWARHazard with 2+ branch chains

For example, "DS -> branch -> VMEM -> branch -> DS".

fossil-db (navi10):
Totals from 639 (0.40% of 161220) affected shaders:
Instrs: 629090 -> 628254 (-0.13%); split: -0.19%, +0.06%
CodeSize: 3410164 -> 3406748 (-0.10%); split: -0.14%, +0.04%
Latency: 7834755 -> 7821011 (-0.18%); split: -0.70%, +0.52%
InvThroughput: 1369698 -> 1374495 (+0.35%); split: -0.12%, +0.47%

A lot of the fossil-db changes are noise.
threekingdoms.8db138826c386a62.1.foz/0b222ed175eebad0 is an example of a
shader that actually has this issue.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Fixes: c037ba1bb7 ("aco/gfx10: Mitigate LdsBranchVmemWARHazard.")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17697>
(cherry picked from commit b17e59a03b)
This commit is contained in:
Rhys Perry 2022-07-21 19:23:38 +01:00 committed by Dylan Baker
parent 2c7c5cc016
commit c9d2f45bf2
2 changed files with 4 additions and 1 deletions

View file

@ -220,7 +220,7 @@
"description": "aco: fix LdsBranchVmemWARHazard with 2+ branch chains",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "c037ba1bb7aba99bd15e063bbdbc6d4c68cf2384"
},

View file

@ -787,6 +787,9 @@ handle_instruction_gfx10(State& state, NOP_ctx_gfx10& ctx, aco_ptr<Instruction>&
wait->definitions[0] = Definition(sgpr_null, s1);
wait->imm = 0;
new_instructions.emplace_back(std::move(wait));
ctx.has_VMEM = instr->isVMEM() || instr->isGlobal() || instr->isScratch();
ctx.has_DS = instr->isDS();
}
/* NSAToVMEMBug