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>
This commit is contained in:
Rhys Perry 2021-04-14 14:48:33 +01:00 committed by Marge Bot
parent 11fde1247c
commit 5b8a4516e6
1 changed files with 5 additions and 0 deletions

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);