From a29291e40a68ecdcb06e798d95345a34e0f35915 Mon Sep 17 00:00:00 2001 From: Stanislav Mekhanoshin Date: Thu, 15 May 2025 15:41:55 -0700 Subject: [PATCH] [AMDGPU] Automate creation of byte_sel dags. NFCI. --- llvm/lib/Target/AMDGPU/SIInstrInfo.td | 27 ++++++++++++++++------ llvm/lib/Target/AMDGPU/VOP1Instructions.td | 11 --------- llvm/lib/Target/AMDGPU/VOP3Instructions.td | 11 +-------- 3 files changed, 21 insertions(+), 28 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index 47ee0a7f60ee3..84a6aeacc226a 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -1293,6 +1293,7 @@ def WaitVMVSrc : NamedIntOperand<"wait_vm_vsrc"> { def ByteSel : NamedIntOperand<"byte_sel"> { let Validator = "isUInt<2>"; } +def ByteSel0 : DefaultOperand; let PrintMethod = "printBitOp3" in def BitOp3 : NamedIntOperand<"bitop3">; @@ -1971,7 +1972,8 @@ class getIns32 class getIns64 { + Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, + bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> { dag src0 = !if(!ge(NumSrcArgs, 1), !if (HasModifiers, (ins Src0Mod:$src0_modifiers, Src0RC:$src0), @@ -1987,20 +1989,29 @@ class getIns64 { + Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, bit HasOpSel, + bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> { // getInst64 handles clamp and omod. implicit mutex between vop3p and omod dag base = getIns64 .ret; + Src0Mod, Src1Mod, Src2Mod, HasFP8ByteSel, HasFP8DstByteSel>.ret; dag opsel = (ins op_sel0:$op_sel); dag ret = !con(base, !if(HasOpSel, opsel, (ins))); } @@ -2612,7 +2623,8 @@ class VOPProfile _ArgVT, bit _EnableClamp = 0> { field dag Ins32 = getIns32.ret; field dag Ins64 = getIns64.ret; + HasOMod, Src0Mod, Src1Mod, Src2Mod, + HasFP8ByteSel, HasFP8DstByteSel>.ret; field dag InsVOP3P = getInsVOP3P.ret; @@ -2630,7 +2642,8 @@ class VOPProfile _ArgVT, bit _EnableClamp = 0> { Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret; defvar InsVOP3DPPBase = getInsVOP3Base.ret; + Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel, + HasFP8ByteSel, HasFP8DstByteSel>.ret; defvar InsVOP3PDPPBase = getInsVOP3P.ret; diff --git a/llvm/lib/Target/AMDGPU/VOP1Instructions.td b/llvm/lib/Target/AMDGPU/VOP1Instructions.td index f885de3c13b12..7fdd951ecbd3c 100644 --- a/llvm/lib/Target/AMDGPU/VOP1Instructions.td +++ b/llvm/lib/Target/AMDGPU/VOP1Instructions.td @@ -674,17 +674,6 @@ class VOPProfile_Base_CVT_F_F8_ByteSel : VOPProfile<[DstVT, i32 let HasClamp = 0; let HasOMod = 0; let HasModifiers = 0; - - defvar bytesel = (ins ByteSel:$byte_sel); - let Ins64 = !con(getIns64.ret, - bytesel); - let InsVOP3Base = !con(getInsVOP3Base.ret, - bytesel); } let SubtargetPredicate = isGFX12Plus, OtherPredicates = [HasFP8ConversionInsts], diff --git a/llvm/lib/Target/AMDGPU/VOP3Instructions.td b/llvm/lib/Target/AMDGPU/VOP3Instructions.td index a7b90b9e319da..0252c4f1b0929 100644 --- a/llvm/lib/Target/AMDGPU/VOP3Instructions.td +++ b/llvm/lib/Target/AMDGPU/VOP3Instructions.td @@ -593,6 +593,7 @@ def VOP3_CVT_SR_F8_F32_Profile : VOP3_Profile, let HasExtVOP3DPP = 1; let HasOpSel = 1; let HasFP8DstByteSel = 1; + let HasFP8ByteSel = 0; // It works as a dst-bytesel, but does not have byte_sel operand. let AsmVOP3OpSel = !subst(", $src2_modifiers", "", getAsmVOP3OpSel<3, HasClamp, HasOMod, HasSrc0FloatMods, HasSrc1FloatMods, @@ -607,16 +608,6 @@ class VOP3_CVT_SR_F8_ByteSel_Profile : VOP3_Profile> { let HasFP8DstByteSel = 1; let HasClamp = 0; - defvar bytesel = (ins VGPR_32:$vdst_in, ByteSel:$byte_sel); - let Ins64 = !con(getIns64.ret, - bytesel); - let InsVOP3Base = !con( - getInsVOP3Base.ret, - bytesel); } def IsPow2Plus1: PatLeaf<(i32 imm), [{