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 @@ -1967,12 +1967,7 @@ } } -multiclass VPseudoBinaryV_VV { - foreach m = MxList in - defm _VV : VPseudoBinary; -} - -multiclass VPseudoBinaryV_VV_LMUL { +multiclass VPseudoBinaryV_VV { defm _VV : VPseudoBinary; } @@ -2001,12 +1996,7 @@ } } -multiclass VPseudoBinaryV_VX { - foreach m = MxList in - defm "_VX" : VPseudoBinary; -} - -multiclass VPseudoBinaryV_VX_LMUL { +multiclass VPseudoBinaryV_VX { defm "_VX" : VPseudoBinary; } @@ -2042,12 +2032,7 @@ } } -multiclass VPseudoBinaryV_VI { - foreach m = MxList in - defm _VI : VPseudoBinary; -} - -multiclass VPseudoBinaryV_VI_LMUL { +multiclass VPseudoBinaryV_VI { defm _VI : VPseudoBinary; } @@ -2071,18 +2056,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; } @@ -2093,23 +2072,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; } @@ -2123,35 +2093,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; } @@ -2409,13 +2361,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; } @@ -2446,11 +2392,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]>; } } @@ -2464,11 +2410,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]>; } } @@ -2483,11 +2429,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]>; } } @@ -2501,11 +2447,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]>; } } @@ -2519,11 +2465,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]>; } } @@ -2536,9 +2482,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]>; } } @@ -2551,9 +2497,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]>; } } @@ -2566,9 +2512,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]>; } } @@ -2581,9 +2527,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]>; } } @@ -2596,9 +2542,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]>; } } @@ -2611,9 +2557,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]>; } } @@ -2685,9 +2631,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]>; } } @@ -2782,9 +2728,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]>; } } @@ -2797,9 +2743,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]>; } } @@ -2812,9 +2758,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]>; } } @@ -2825,7 +2771,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]>; } @@ -2850,9 +2796,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]>; } } @@ -2863,7 +2809,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]>; } @@ -2886,7 +2832,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 { @@ -3047,11 +2993,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]>; } } @@ -3065,11 +3011,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]>; } } @@ -3111,15 +3057,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; } @@ -3139,14 +3077,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; @@ -3176,7 +3107,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, @@ -3191,7 +3122,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]>; } @@ -3232,7 +3163,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, @@ -3260,7 +3191,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]>; } @@ -3288,7 +3219,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]>; @@ -3305,7 +3236,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]>; @@ -3318,7 +3249,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]>; }