diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td index 268bfe70673a2..fe85d4b074c87 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -2136,23 +2136,6 @@ multiclass VPseudoBinaryRoundingMode TargetConstraintType = 1, - bit Commutable = 0> { - let VLMul = MInfo.value, isCommutable = Commutable in { - def "_" # MInfo.MX : VPseudoBinaryNoMask; - let ForceTailAgnostic = true in - def "_" # MInfo.MX # "_MASK" : VPseudoBinaryMOutMask, - RISCVMaskedPseudo; - } -} - multiclass VPseudoBinaryEmul TargetConstraintType = 1, - bit Commutable = 0> { - defm _VV : VPseudoBinaryM { + let VLMul = m.value, isCommutable = Commutable in { + def "_" # m.MX : + VPseudoBinaryNoMask; + let ForceTailAgnostic = true in + def "_" # m.MX # "_MASK" : + VPseudoBinaryMOutMask; + TargetConstraintType = 2>, + RISCVMaskedPseudo; + } } -multiclass VPseudoBinaryM_VX TargetConstraintType = 1> { - defm "_VX" : - VPseudoBinaryM; +multiclass VPseudoBinaryM_VV { + defm _VV : VPseudoBinaryM; } -multiclass VPseudoBinaryM_VF TargetConstraintType = 1> { - defm "_V" # f.FX : - VPseudoBinaryM; +multiclass VPseudoBinaryM_VX { + defm _VX : VPseudoBinaryM; } -multiclass VPseudoBinaryM_VI TargetConstraintType = 1> { - defm _VI : VPseudoBinaryM; +multiclass VPseudoBinaryM_VF { + defm "_V" # f.FX : VPseudoBinaryM; +} + +multiclass VPseudoBinaryM_VI { + defm _VI : VPseudoBinaryM; } multiclass VPseudoVGTR_VV_VX_VI { @@ -3397,11 +3387,11 @@ multiclass VPseudoVWMAC_VV_VF_BF_RM { multiclass VPseudoVCMPM_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defm "" : VPseudoBinaryM_VV, + defm "" : VPseudoBinaryM_VV, SchedBinary<"WriteVICmpV", "ReadVICmpV", "ReadVICmpV", mx>; - defm "" : VPseudoBinaryM_VX, + defm "" : VPseudoBinaryM_VX, SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; - defm "" : VPseudoBinaryM_VI, + defm "" : VPseudoBinaryM_VI, SchedUnary<"WriteVICmpI", "ReadVICmpV", mx>; } } @@ -3409,22 +3399,32 @@ multiclass VPseudoVCMPM_VV_VX_VI { multiclass VPseudoVCMPM_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defm "" : VPseudoBinaryM_VV, + defm "" : VPseudoBinaryM_VV, SchedBinary<"WriteVICmpV", "ReadVICmpV", "ReadVICmpV", mx>; - defm "" : VPseudoBinaryM_VX, + defm "" : VPseudoBinaryM_VX, + SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; + } +} + +multiclass VPseudoVCMPM_VX_VI { + foreach m = MxList in { + defvar mx = m.MX; + defm "" : VPseudoBinaryM_VX, SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; + defm "" : VPseudoBinaryM_VI, + SchedUnary<"WriteVICmpI", "ReadVICmpV", mx>; } } multiclass VPseudoVCMPM_VV_VF { foreach m = MxListF in { - defm "" : VPseudoBinaryM_VV, + defm "" : VPseudoBinaryM_VV, SchedBinary<"WriteVFCmpV", "ReadVFCmpV", "ReadVFCmpV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defm "" : VPseudoBinaryM_VF, + defm "" : VPseudoBinaryM_VF, SchedBinary<"WriteVFCmpF", "ReadVFCmpV", "ReadVFCmpF", m.MX>; } } @@ -3433,22 +3433,12 @@ multiclass VPseudoVCMPM_VV_VF { multiclass VPseudoVCMPM_VF { foreach f = FPList in { foreach m = f.MxList in { - defm "" : VPseudoBinaryM_VF, + defm "" : VPseudoBinaryM_VF, SchedBinary<"WriteVFCmpF", "ReadVFCmpV", "ReadVFCmpF", m.MX>; } } } -multiclass VPseudoVCMPM_VX_VI { - foreach m = MxList in { - defvar mx = m.MX; - defm "" : VPseudoBinaryM_VX, - SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; - defm "" : VPseudoBinaryM_VI, - SchedUnary<"WriteVICmpI", "ReadVICmpV", mx>; - } -} - multiclass VPseudoVRED_VS { foreach m = MxList in { defvar mx = m.MX;