mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-25 05:50:25 +01:00
aco/ra: use a switch to check vop2acc instruction support
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29512>
This commit is contained in:
parent
fdc2fb6835
commit
60f3f0fdbb
1 changed files with 23 additions and 9 deletions
|
|
@ -2554,15 +2554,29 @@ vop3_can_use_vop2acc(ra_ctx& ctx, Instruction* instr)
|
|||
if (!instr->isVOP3() && !instr->isVOP3P())
|
||||
return false;
|
||||
|
||||
if ((instr->opcode != aco_opcode::v_mad_f32 &&
|
||||
(instr->opcode != aco_opcode::v_fma_f32 || ctx.program->gfx_level < GFX10) &&
|
||||
instr->opcode != aco_opcode::v_mad_f16 && instr->opcode != aco_opcode::v_mad_legacy_f16 &&
|
||||
(instr->opcode != aco_opcode::v_fma_f16 || ctx.program->gfx_level < GFX10) &&
|
||||
(instr->opcode != aco_opcode::v_pk_fma_f16 || ctx.program->gfx_level < GFX10) &&
|
||||
(instr->opcode != aco_opcode::v_mad_legacy_f32 || !ctx.program->dev.has_mac_legacy32) &&
|
||||
(instr->opcode != aco_opcode::v_fma_legacy_f32 || !ctx.program->dev.has_fmac_legacy32) &&
|
||||
(instr->opcode != aco_opcode::v_dot4_i32_i8 || ctx.program->family == CHIP_VEGA20)) ||
|
||||
!instr->operands[2].isOfType(RegType::vgpr) || !instr->operands[2].isKillBeforeDef() ||
|
||||
switch (instr->opcode) {
|
||||
case aco_opcode::v_mad_f32:
|
||||
case aco_opcode::v_mad_f16:
|
||||
case aco_opcode::v_mad_legacy_f16: break;
|
||||
case aco_opcode::v_fma_f32:
|
||||
case aco_opcode::v_pk_fma_f16:
|
||||
case aco_opcode::v_fma_f16:
|
||||
case aco_opcode::v_dot4_i32_i8:
|
||||
if (ctx.program->gfx_level < GFX10)
|
||||
return false;
|
||||
break;
|
||||
case aco_opcode::v_mad_legacy_f32:
|
||||
if (!ctx.program->dev.has_mac_legacy32)
|
||||
return false;
|
||||
break;
|
||||
case aco_opcode::v_fma_legacy_f32:
|
||||
if (!ctx.program->dev.has_fmac_legacy32)
|
||||
return false;
|
||||
break;
|
||||
default: return false;
|
||||
}
|
||||
|
||||
if (!instr->operands[2].isOfType(RegType::vgpr) || !instr->operands[2].isKillBeforeDef() ||
|
||||
(!instr->operands[0].isOfType(RegType::vgpr) && !instr->operands[1].isOfType(RegType::vgpr)))
|
||||
return false;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue