aco/optimizer_postRA: Mark a register overwritten when predecessors disagree.

Affects blocks whose some (but not all) predecessors overwrite a register.
This commit fixes glitches in some games which regressed because of the
improved SCC no-compare optimization.

Fossil DB stats on Navi 21:

Totals from 2816 (2.09% of 134906) affected shaders:
CodeSize: 24224276 -> 24241580 (+0.07%)
Instrs: 4570595 -> 4574921 (+0.09%)
Latency: 53680256 -> 53693655 (+0.02%); split: -0.00%, +0.02%
InvThroughput: 9829289 -> 9830573 (+0.01%)

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7257
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7305
Fixes: 2e56e23420
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18488>
(cherry picked from commit 63063dd5ce)
This commit is contained in:
Timur Kristóf 2022-09-16 13:54:54 +02:00 committed by Dylan Baker
parent b133496b10
commit 7c4dd3194a
2 changed files with 2 additions and 2 deletions

View file

@ -2587,7 +2587,7 @@
"description": "aco/optimizer_postRA: Mark a register overwritten when predecessors disagree.",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "2e56e2342094e8ec90afa5265b1c43503f662939"
},

View file

@ -76,7 +76,7 @@ struct pr_opt_ctx {
if (all_same)
instr_idx_by_regs[block->index][i] = instr_idx_by_regs[first_pred][i];
else
instr_idx_by_regs[block->index][i] = not_written_in_block;
instr_idx_by_regs[block->index][i] = written_by_multiple_instrs;
}
}
}