aco/ra: remove live-in temporary from live_out_per_block when moving it

Otherwise, handle_loop_phis() might pass it to handle_live_in() and then
we could have two phis for this variable.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Fixes: 7c64623e94 ("aco/ra: refactor SSA repairing during register allocation")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10236>
(cherry picked from commit 5b8a4516e6)
This commit is contained in:
Rhys Perry 2021-04-14 14:48:33 +01:00 committed by Eric Engestrom
parent 6b385bf6ad
commit 09151387c5
2 changed files with 6 additions and 1 deletions

View file

@ -1570,7 +1570,7 @@
"description": "aco/ra: remove live-in temporary from live_out_per_block when moving it",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "7c64623e9489a37297808f7346e6e80bd1c78587"
},

View file

@ -2200,6 +2200,11 @@ void register_allocation(Program *program, std::vector<IDSet>& live_out_per_bloc
for (unsigned i = 0; i < preds.size(); i++)
new_phi->operands[i] = Operand(pc.first);
instructions.emplace_back(std::move(new_phi));
/* Remove from live_out_per_block (now used for live-in), because handle_loop_phis()
* would re-create this phi later if this is a loop header.
*/
live_out_per_block[block.index].erase(orig.id());
}
register_file.fill(definition);