mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
aco: mark phi definitions as last-seen phi operands
Totals from 14340 (11.23% of 127638) affected shaders: SGPRs: 1251648 -> 1251512 (-0.01%) VGPRs: 994556 -> 994104 (-0.05%); split: -0.06%, +0.01% CodeSize: 122894528 -> 121099604 (-1.46%); split: -1.49%, +0.03% MaxWaves: 106039 -> 106103 (+0.06%); split: +0.06%, -0.00% Instrs: 23860066 -> 23414317 (-1.87%); split: -1.90%, +0.03% Copies: 2448228 -> 2049305 (-16.29%); split: -16.37%, +0.07% Branches: 789381 -> 757921 (-3.99%); split: -4.62%, +0.64% Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4990>
This commit is contained in:
parent
c1c0cf7a66
commit
138eed45b5
1 changed files with 15 additions and 15 deletions
|
|
@ -1410,9 +1410,10 @@ void register_allocation(Program *program, std::vector<TempSet>& live_out_per_bl
|
|||
for (rit = block.instructions.rbegin(); rit != block.instructions.rend(); ++rit) {
|
||||
aco_ptr<Instruction>& instr = *rit;
|
||||
if (is_phi(instr)) {
|
||||
live.erase(instr->definitions[0].getTemp());
|
||||
if (instr->definitions[0].isKill() || instr->definitions[0].isFixed())
|
||||
if (instr->definitions[0].isKill() || instr->definitions[0].isFixed()) {
|
||||
live.erase(instr->definitions[0].getTemp());
|
||||
continue;
|
||||
}
|
||||
/* collect information about affinity-related temporaries */
|
||||
std::vector<Temp> affinity_related;
|
||||
/* affinity_related[0] is the last seen affinity-related temp */
|
||||
|
|
@ -1425,21 +1426,20 @@ void register_allocation(Program *program, std::vector<TempSet>& live_out_per_bl
|
|||
}
|
||||
}
|
||||
phi_ressources.emplace_back(std::move(affinity_related));
|
||||
continue;
|
||||
}
|
||||
|
||||
/* add vector affinities */
|
||||
if (instr->opcode == aco_opcode::p_create_vector) {
|
||||
for (const Operand& op : instr->operands) {
|
||||
if (op.isTemp() && op.isFirstKill() && op.getTemp().type() == instr->definitions[0].getTemp().type())
|
||||
ctx.vectors[op.tempId()] = instr.get();
|
||||
} else {
|
||||
/* add vector affinities */
|
||||
if (instr->opcode == aco_opcode::p_create_vector) {
|
||||
for (const Operand& op : instr->operands) {
|
||||
if (op.isTemp() && op.isFirstKill() && op.getTemp().type() == instr->definitions[0].getTemp().type())
|
||||
ctx.vectors[op.tempId()] = instr.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* add operands to live variables */
|
||||
for (const Operand& op : instr->operands) {
|
||||
if (op.isTemp())
|
||||
live.emplace(op.getTemp());
|
||||
/* add operands to live variables */
|
||||
for (const Operand& op : instr->operands) {
|
||||
if (op.isTemp())
|
||||
live.emplace(op.getTemp());
|
||||
}
|
||||
}
|
||||
|
||||
/* erase definitions from live */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue