mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 13:10:10 +01:00
aco/optimizer: optimize s_and(exec, s_and(x, y)) more aggressively
It is enough if either of the two operands is respecting the current exec mask. Totals from 1680 (1.25% of 134913) affected shaders: (GFX10.3) CodeSize: 3929436 -> 3922372 (-0.18%); split: -0.18%, +0.00% Instrs: 730305 -> 728536 (-0.24%); split: -0.24%, +0.00% Latency: 6839314 -> 6835154 (-0.06%); split: -0.07%, +0.01% InvThroughput: 1371351 -> 1371267 (-0.01%); split: -0.01%, +0.00% SClause: 32819 -> 32802 (-0.05%); split: -0.09%, +0.04% Copies: 33264 -> 33271 (+0.02%); split: -0.01%, +0.03% Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18253>
This commit is contained in:
parent
79a8e8b5b2
commit
cf5f9854bc
1 changed files with 7 additions and 2 deletions
|
|
@ -1218,8 +1218,13 @@ can_eliminate_and_exec(opt_ctx& ctx, Temp tmp, unsigned pass_flags)
|
|||
return false;
|
||||
if (!(instr->operands[0].isTemp() && instr->operands[1].isTemp()))
|
||||
return false;
|
||||
return can_eliminate_and_exec(ctx, instr->operands[0].getTemp(), pass_flags) &&
|
||||
can_eliminate_and_exec(ctx, instr->operands[1].getTemp(), pass_flags);
|
||||
if (instr->opcode == aco_opcode::s_and_b32 || instr->opcode == aco_opcode::s_and_b64) {
|
||||
return can_eliminate_and_exec(ctx, instr->operands[0].getTemp(), pass_flags) ||
|
||||
can_eliminate_and_exec(ctx, instr->operands[1].getTemp(), pass_flags);
|
||||
} else {
|
||||
return can_eliminate_and_exec(ctx, instr->operands[0].getTemp(), pass_flags) &&
|
||||
can_eliminate_and_exec(ctx, instr->operands[1].getTemp(), pass_flags);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue