mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
aco/spill: Fix improper handling of exec phis
The "continue" was placed in the wrong loop, leading to exec being counted as a spilled register when it wasn't. Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Fixes:a56ddca4e8('aco: make all exec accesses non-temporaries') Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4533 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10486> (cherry picked from commit741e84f554)
This commit is contained in:
parent
7c2ee1d626
commit
37c88be5ea
2 changed files with 4 additions and 3 deletions
|
|
@ -310,7 +310,7 @@
|
|||
"description": "aco/spill: Fix improper handling of exec phis",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "a56ddca4e80a6ef7bb0c44edb4e5b6169510aaca"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -606,12 +606,13 @@ RegisterDemand init_live_in_vars(spill_ctx& ctx, Block* block, unsigned block_id
|
|||
for (aco_ptr<Instruction>& phi : block->instructions) {
|
||||
if (!is_phi(phi))
|
||||
break;
|
||||
if (!phi->definitions[0].isTemp())
|
||||
continue;
|
||||
|
||||
std::vector<unsigned>& preds = phi->opcode == aco_opcode::p_phi ? block->logical_preds : block->linear_preds;
|
||||
bool spill = true;
|
||||
|
||||
for (unsigned i = 0; i < phi->operands.size(); i++) {
|
||||
if (!phi->definitions[0].isTemp())
|
||||
continue;
|
||||
/* non-temp operands can increase the register pressure */
|
||||
if (!phi->operands[i].isTemp()) {
|
||||
partial_spills.insert(phi->definitions[0].getTemp());
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue