diff --git a/.pick_status.json b/.pick_status.json index e0f14b11c5f..678362d1753 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -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" }, diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp index 5988b866eed..cc9960b25d6 100644 --- a/src/amd/compiler/aco_spill.cpp +++ b/src/amd/compiler/aco_spill.cpp @@ -606,12 +606,13 @@ RegisterDemand init_live_in_vars(spill_ctx& ctx, Block* block, unsigned block_id for (aco_ptr& phi : block->instructions) { if (!is_phi(phi)) break; + if (!phi->definitions[0].isTemp()) + continue; + std::vector& 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());