mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 23:50:11 +01:00
aco: disable mul(cndmask(0, 1, b), a) optimization sometimes
This optimization doesn't work for SDWA or DPP multiplications and we can't do it if denormal flushing is required because v_cndmask_b32 doesn't do that and we can't do it if we can't assume operands are finite because 0.0 * inf is NaN, not 0. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13434>
This commit is contained in:
parent
86b3d8c66c
commit
9bc0fc89c8
1 changed files with 2 additions and 1 deletions
|
|
@ -3453,7 +3453,8 @@ combine_instruction(opt_ctx& ctx, aco_ptr<Instruction>& instr)
|
|||
}
|
||||
}
|
||||
/* v_mul_f32(v_cndmask_b32(0, 1.0, cond), a) -> v_cndmask_b32(0, a, cond) */
|
||||
else if (instr->opcode == aco_opcode::v_mul_f32 && !instr->isVOP3()) {
|
||||
else if (instr->opcode == aco_opcode::v_mul_f32 && !ctx.fp_mode.preserve_signed_zero_inf_nan32 &&
|
||||
!instr->usesModifiers() && !ctx.fp_mode.must_flush_denorms32) {
|
||||
for (unsigned i = 0; i < 2; i++) {
|
||||
if (instr->operands[i].isTemp() && ctx.info[instr->operands[i].tempId()].is_b2f() &&
|
||||
ctx.uses[instr->operands[i].tempId()] == 1 && instr->operands[!i].isTemp() &&
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue