diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -1942,12 +1942,7 @@ } } -multiclass VPseudoBinaryV_VV { - foreach m = MxList in - defm _VV : VPseudoBinary; -} - -multiclass VPseudoBinaryV_VV_LMUL { +multiclass VPseudoBinaryV_VV { defm _VV : VPseudoBinary; } @@ -1976,12 +1971,7 @@ } } -multiclass VPseudoBinaryV_VX { - foreach m = MxList in - defm "_VX" : VPseudoBinary; -} - -multiclass VPseudoBinaryV_VX_LMUL { +multiclass VPseudoBinaryV_VX { defm "_VX" : VPseudoBinary; } @@ -2017,12 +2007,7 @@ } } -multiclass VPseudoBinaryV_VI { - foreach m = MxList in - defm _VI : VPseudoBinary; -} - -multiclass VPseudoBinaryV_VI_LMUL { +multiclass VPseudoBinaryV_VI { defm _VI : VPseudoBinary; } @@ -2046,18 +2031,12 @@ // * The destination EEW is greater than the source EEW, the source EMUL is // at least 1, and the overlap is in the highest-numbered part of the // destination register group is legal. Otherwise, it is illegal. -multiclass VPseudoBinaryW_VV mxlist = MxListW> { - foreach m = mxlist in - defm _VV : VPseudoBinary; -} - -multiclass VPseudoBinaryW_VV_LMUL { +multiclass VPseudoBinaryW_VV { defm _VV : VPseudoBinary; } -multiclass VPseudoBinaryW_VX_LMUL { +multiclass VPseudoBinaryW_VX { defm "_VX" : VPseudoBinary; } @@ -2068,23 +2047,14 @@ "@earlyclobber $rd">; } -multiclass VPseudoBinaryW_WV mxlist = MxListW> { - foreach m = mxlist in { - defm _WV : VPseudoBinary; - defm _WV : VPseudoTiedBinary; - } -} - -multiclass VPseudoBinaryW_WV_LMUL { +multiclass VPseudoBinaryW_WV { defm _WV : VPseudoBinary; defm _WV : VPseudoTiedBinary; } -multiclass VPseudoBinaryW_WX_LMUL { +multiclass VPseudoBinaryW_WX { defm "_WX" : VPseudoBinary; } @@ -2098,35 +2068,17 @@ // exception from the spec. // "The destination EEW is smaller than the source EEW and the overlap is in the // lowest-numbered part of the source register group." -multiclass VPseudoBinaryV_WV { - foreach m = MxListW in - defm _WV : VPseudoBinary; -} - -multiclass VPseudoBinaryV_WV_LMUL { +multiclass VPseudoBinaryV_WV { defm _WV : VPseudoBinary; } -multiclass VPseudoBinaryV_WX { - foreach m = MxListW in - defm _WX : VPseudoBinary; -} - -multiclass VPseudoBinaryV_WX_LMUL { +multiclass VPseudoBinaryV_WX { defm _WX : VPseudoBinary; } -multiclass VPseudoBinaryV_WI { - foreach m = MxListW in - defm _WI : VPseudoBinary; -} - -multiclass VPseudoBinaryV_WI_LMUL { +multiclass VPseudoBinaryV_WI { defm _WI : VPseudoBinary; } @@ -2384,13 +2336,7 @@ // lowest-numbered part of the source register group". // With LMUL<=1 the source and dest occupy a single register so any overlap // is in the lowest-numbered part. -multiclass VPseudoBinaryM_VV mxlist = MxList> { - foreach m = mxlist in - defm _VV : VPseudoBinaryM; -} - -multiclass VPseudoBinaryM_VV_LMUL { +multiclass VPseudoBinaryM_VV { defm _VV : VPseudoBinaryM; } @@ -2421,11 +2367,11 @@ defvar ReadVGatherV_MX = !cast("ReadVGatherV_" # mx); defvar ReadVGatherX_MX = !cast("ReadVGatherX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVGatherV_MX, ReadVGatherV_MX, ReadVGatherV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVGatherX_MX, ReadVGatherV_MX, ReadVGatherX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VI_LMUL, + defm "" : VPseudoBinaryV_VI, Sched<[WriteVGatherI_MX, ReadVGatherV_MX, ReadVMask]>; } } @@ -2439,11 +2385,11 @@ defvar ReadVSALUV_MX = !cast("ReadVSALUV_" # mx); defvar ReadVSALUX_MX = !cast("ReadVSALUX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VI_LMUL, + defm "" : VPseudoBinaryV_VI, Sched<[WriteVSALUI_MX, ReadVSALUV_MX, ReadVMask]>; } } @@ -2458,11 +2404,11 @@ defvar ReadVShiftV_MX = !cast("ReadVShiftV_" # mx); defvar ReadVShiftX_MX = !cast("ReadVShiftX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVShiftV_MX, ReadVShiftV_MX, ReadVShiftV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVShiftX_MX, ReadVShiftV_MX, ReadVShiftX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VI_LMUL, + defm "" : VPseudoBinaryV_VI, Sched<[WriteVShiftI_MX, ReadVShiftV_MX, ReadVMask]>; } } @@ -2476,11 +2422,11 @@ defvar ReadVSShiftV_MX = !cast("ReadVSShiftV_" # mx); defvar ReadVSShiftX_MX = !cast("ReadVSShiftX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVSShiftV_MX, ReadVSShiftV_MX, ReadVSShiftV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVSShiftX_MX, ReadVSShiftV_MX, ReadVSShiftX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VI_LMUL, + defm "" : VPseudoBinaryV_VI, Sched<[WriteVSShiftI_MX, ReadVSShiftV_MX, ReadVMask]>; } } @@ -2494,11 +2440,11 @@ defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVIALUV_MX, ReadVIALUV_MX, ReadVIALUV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VI_LMUL, + defm "" : VPseudoBinaryV_VI, Sched<[WriteVIALUI_MX, ReadVIALUV_MX, ReadVMask]>; } } @@ -2511,9 +2457,9 @@ defvar ReadVSALUV_MX = !cast("ReadVSALUV_" # mx); defvar ReadVSALUX_MX = !cast("ReadVSALUX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>; } } @@ -2526,9 +2472,9 @@ defvar ReadVSMulV_MX = !cast("ReadVSMulV_" # mx); defvar ReadVSMulX_MX = !cast("ReadVSMulX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVSMulV_MX, ReadVSMulV_MX, ReadVSMulV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVSMulX_MX, ReadVSMulV_MX, ReadVSMulX_MX, ReadVMask]>; } } @@ -2541,9 +2487,9 @@ defvar ReadVAALUV_MX = !cast("ReadVAALUV_" # mx); defvar ReadVAALUX_MX = !cast("ReadVAALUX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVAALUV_MX, ReadVAALUV_MX, ReadVAALUV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVAALUX_MX, ReadVAALUV_MX, ReadVAALUX_MX, ReadVMask]>; } } @@ -2556,9 +2502,9 @@ defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVICmpV_MX, ReadVICmpV_MX, ReadVICmpV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; } } @@ -2571,9 +2517,9 @@ defvar ReadVIMulV_MX = !cast("ReadVIMulV_" # mx); defvar ReadVIMulX_MX = !cast("ReadVIMulX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVIMulV_MX, ReadVIMulV_MX, ReadVIMulV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVIMulX_MX, ReadVIMulV_MX, ReadVIMulX_MX, ReadVMask]>; } } @@ -2586,9 +2532,9 @@ defvar ReadVIDivV_MX = !cast("ReadVIDivV_" # mx); defvar ReadVIDivX_MX = !cast("ReadVIDivX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVIDivV_MX, ReadVIDivV_MX, ReadVIDivV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVIDivX_MX, ReadVIDivV_MX, ReadVIDivX_MX, ReadVMask]>; } } @@ -2660,9 +2606,9 @@ defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VV_LMUL, + defm "" : VPseudoBinaryV_VV, Sched<[WriteVIALUV_MX, ReadVIALUV_MX, ReadVIALUV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; } } @@ -2757,9 +2703,9 @@ defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VX_LMUL, + defm "" : VPseudoBinaryV_VX, Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_VI_LMUL, + defm "" : VPseudoBinaryV_VI, Sched<[WriteVIALUI_MX, ReadVIALUV_MX, ReadVMask]>; } } @@ -2772,9 +2718,9 @@ defvar ReadVIWALUV_MX = !cast("ReadVIWALUV_" # mx); defvar ReadVIWALUX_MX = !cast("ReadVIWALUX_" # mx); - defm "" : VPseudoBinaryW_VV_LMUL, + defm "" : VPseudoBinaryW_VV, Sched<[WriteVIWALUV_MX, ReadVIWALUV_MX, ReadVIWALUV_MX, ReadVMask]>; - defm "" : VPseudoBinaryW_VX_LMUL, + defm "" : VPseudoBinaryW_VX, Sched<[WriteVIWALUX_MX, ReadVIWALUV_MX, ReadVIWALUX_MX, ReadVMask]>; } } @@ -2787,9 +2733,9 @@ defvar ReadVIWMulV_MX = !cast("ReadVIWMulV_" # mx); defvar ReadVIWMulX_MX = !cast("ReadVIWMulX_" # mx); - defm "" : VPseudoBinaryW_VV_LMUL, + defm "" : VPseudoBinaryW_VV, Sched<[WriteVIWMulV_MX, ReadVIWMulV_MX, ReadVIWMulV_MX, ReadVMask]>; - defm "" : VPseudoBinaryW_VX_LMUL, + defm "" : VPseudoBinaryW_VX, Sched<[WriteVIWMulX_MX, ReadVIWMulV_MX, ReadVIWMulX_MX, ReadVMask]>; } } @@ -2800,7 +2746,7 @@ defvar WriteVFWMulV_MX = !cast("WriteVFWMulV_" # mx); defvar ReadVFWMulV_MX = !cast("ReadVFWMulV_" # mx); - defm "" : VPseudoBinaryW_VV_LMUL, + defm "" : VPseudoBinaryW_VV, Sched<[WriteVFWMulV_MX, ReadVFWMulV_MX, ReadVFWMulV_MX, ReadVMask]>; } @@ -2825,9 +2771,9 @@ defvar ReadVIWALUV_MX = !cast("ReadVIWALUV_" # mx); defvar ReadVIWALUX_MX = !cast("ReadVIWALUX_" # mx); - defm "" : VPseudoBinaryW_WV_LMUL, + defm "" : VPseudoBinaryW_WV, Sched<[WriteVIWALUV_MX, ReadVIWALUV_MX, ReadVIWALUV_MX, ReadVMask]>; - defm "" : VPseudoBinaryW_WX_LMUL, + defm "" : VPseudoBinaryW_WX, Sched<[WriteVIWALUX_MX, ReadVIWALUV_MX, ReadVIWALUX_MX, ReadVMask]>; } } @@ -2838,7 +2784,7 @@ defvar WriteVFWALUV_MX = !cast("WriteVFWALUV_" # mx); defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defm "" : VPseudoBinaryW_VV_LMUL, + defm "" : VPseudoBinaryW_VV, Sched<[WriteVFWALUV_MX, ReadVFWALUV_MX, ReadVFWALUV_MX, ReadVMask]>; } @@ -2861,7 +2807,7 @@ defvar WriteVFWALUV_MX = !cast("WriteVFWALUV_" # mx); defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defm "" : VPseudoBinaryW_WV_LMUL, + defm "" : VPseudoBinaryW_WV, Sched<[WriteVFWALUV_MX, ReadVFWALUV_MX, ReadVFWALUV_MX, ReadVMask]>; } foreach f = FPListW in { @@ -3022,11 +2968,11 @@ defvar ReadVNClipV_MX = !cast("ReadVNClipV_" # mx); defvar ReadVNClipX_MX = !cast("ReadVNClipX_" # mx); - defm "" : VPseudoBinaryV_WV_LMUL, + defm "" : VPseudoBinaryV_WV, Sched<[WriteVNClipV_MX, ReadVNClipV_MX, ReadVNClipV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_WX_LMUL, + defm "" : VPseudoBinaryV_WX, Sched<[WriteVNClipX_MX, ReadVNClipV_MX, ReadVNClipX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_WI_LMUL, + defm "" : VPseudoBinaryV_WI, Sched<[WriteVNClipI_MX, ReadVNClipV_MX, ReadVMask]>; } } @@ -3040,11 +2986,11 @@ defvar ReadVNShiftV_MX = !cast("ReadVNShiftV_" # mx); defvar ReadVNShiftX_MX = !cast("ReadVNShiftX_" # mx); - defm "" : VPseudoBinaryV_WV_LMUL, + defm "" : VPseudoBinaryV_WV, Sched<[WriteVNShiftV_MX, ReadVNShiftV_MX, ReadVNShiftV_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_WX_LMUL, + defm "" : VPseudoBinaryV_WX, Sched<[WriteVNShiftX_MX, ReadVNShiftV_MX, ReadVNShiftX_MX, ReadVMask]>; - defm "" : VPseudoBinaryV_WI_LMUL, + defm "" : VPseudoBinaryV_WI, Sched<[WriteVNShiftI_MX, ReadVNShiftV_MX, ReadVMask]>; } } @@ -3086,15 +3032,7 @@ } } -multiclass VPseudoTernaryV_VV_AAXA mxlist = MxList> { - foreach m = mxlist in { - defm _VV : VPseudoTernaryWithPolicy; - } -} - -multiclass VPseudoTernaryV_VV_AAXA_LMUL { +multiclass VPseudoTernaryV_VV_AAXA { defm _VV : VPseudoTernaryWithPolicy; } @@ -3114,14 +3052,7 @@ /*Commutable*/1>; } -multiclass VPseudoTernaryW_VV mxlist = MxListW> { - defvar constraint = "@earlyclobber $rd"; - foreach m = mxlist in - defm _VV : VPseudoTernaryWithPolicy; -} - -multiclass VPseudoTernaryW_VV_LMUL { +multiclass VPseudoTernaryW_VV { defvar constraint = "@earlyclobber $rd"; defm _VV : VPseudoTernaryWithPolicy; @@ -3151,7 +3082,7 @@ defvar ReadVIMulAddV_MX = !cast("ReadVIMulAddV_" # mx); defvar ReadVIMulAddX_MX = !cast("ReadVIMulAddX_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA_LMUL, + defm "" : VPseudoTernaryV_VV_AAXA, Sched<[WriteVIMulAddV_MX, ReadVIMulAddV_MX, ReadVIMulAddV_MX, ReadVIMulAddV_MX, ReadVMask]>; defm "" : VPseudoTernaryV_VX_AAXA, @@ -3166,7 +3097,7 @@ defvar WriteVFMulAddV_MX = !cast("WriteVFMulAddV_" # mx); defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA_LMUL, + defm "" : VPseudoTernaryV_VV_AAXA, Sched<[WriteVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVMask]>; } @@ -3206,7 +3137,7 @@ defvar ReadVIWMulAddV_MX = !cast("ReadVIWMulAddV_" # mx); defvar ReadVIWMulAddX_MX = !cast("ReadVIWMulAddX_" # mx); - defm "" : VPseudoTernaryW_VV_LMUL, + defm "" : VPseudoTernaryW_VV, Sched<[WriteVIWMulAddV_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, ReadVMask]>; defm "" : VPseudoTernaryW_VX, @@ -3234,7 +3165,7 @@ defvar WriteVFWMulAddV_MX = !cast("WriteVFWMulAddV_" # mx); defvar ReadVFWMulAddV_MX = !cast("ReadVFWMulAddV_" # mx); - defm "" : VPseudoTernaryW_VV_LMUL, + defm "" : VPseudoTernaryW_VV, Sched<[WriteVFWMulAddV_MX, ReadVFWMulAddV_MX, ReadVFWMulAddV_MX, ReadVFWMulAddV_MX, ReadVMask]>; } @@ -3262,7 +3193,7 @@ defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VV_LMUL, + defm "" : VPseudoBinaryM_VV, Sched<[WriteVICmpV_MX, ReadVICmpV_MX, ReadVICmpV_MX, ReadVMask]>; defm "" : VPseudoBinaryM_VX, Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; @@ -3279,7 +3210,7 @@ defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VV_LMUL, + defm "" : VPseudoBinaryM_VV, Sched<[WriteVICmpV_MX, ReadVICmpV_MX, ReadVICmpV_MX, ReadVMask]>; defm "" : VPseudoBinaryM_VX, Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; @@ -3292,7 +3223,7 @@ defvar WriteVFCmpV_MX = !cast("WriteVFCmpV_" # mx); defvar ReadVFCmpV_MX = !cast("ReadVFCmpV_" # mx); - defm "" : VPseudoBinaryM_VV_LMUL, + defm "" : VPseudoBinaryM_VV, Sched<[WriteVFCmpV_MX, ReadVFCmpV_MX, ReadVFCmpV_MX, ReadVMask]>; }