mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
aco: fix operand kill flags when a temporary is used more than once
Helps create v_mac_f32 from v_mad_f32(b, a, b) Totals from affected shaders: SGPRS: 35824 -> 35824 (0.00 %) VGPRS: 33460 -> 33456 (-0.01 %) Spilled SGPRs: 0 -> 0 (0.00 %) Spilled VGPRs: 0 -> 0 (0.00 %) Private memory VGPRs: 0 -> 0 (0.00 %) Scratch size: 0 -> 0 (0.00 %) dwords per thread Code Size: 2187264 -> 2180976 (-0.29 %) bytes LDS: 127 -> 127 (0.00 %) blocks Max Waves: 3802 -> 3802 (0.00 %) Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3486> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3486>
This commit is contained in:
parent
5b810c7de3
commit
3f96a1ed86
1 changed files with 6 additions and 2 deletions
|
|
@ -111,6 +111,12 @@ void process_live_temps_per_block(Program *program, live& lives, Block* block,
|
|||
if (insn->opcode == aco_opcode::p_logical_end) {
|
||||
new_demand.sgpr += phi_sgpr_ops[block->index];
|
||||
} else {
|
||||
/* we need to do this in a separate loop because the next one can
|
||||
* setKill() for several operands at once and we don't want to
|
||||
* overwrite that in a later iteration */
|
||||
for (Operand& op : insn->operands)
|
||||
op.setKill(false);
|
||||
|
||||
for (unsigned i = 0; i < insn->operands.size(); ++i)
|
||||
{
|
||||
Operand& operand = insn->operands[i];
|
||||
|
|
@ -130,8 +136,6 @@ void process_live_temps_per_block(Program *program, live& lives, Block* block,
|
|||
}
|
||||
}
|
||||
new_demand += temp;
|
||||
} else {
|
||||
operand.setKill(false);
|
||||
}
|
||||
|
||||
if (operand.isFixed() && operand.physReg() == exec)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue