Skip to content

Commit be6c168

Browse files
authored
[AMDGPU] Automate creation of byte_sel dags. NFCI. (#140155)
1 parent 71d1b4c commit be6c168

File tree

3 files changed

+21
-28
lines changed

3 files changed

+21
-28
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.td

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,6 +1293,7 @@ def WaitVMVSrc : NamedIntOperand<"wait_vm_vsrc"> {
12931293
def ByteSel : NamedIntOperand<"byte_sel"> {
12941294
let Validator = "isUInt<2>";
12951295
}
1296+
def ByteSel0 : DefaultOperand<ByteSel, 0>;
12961297

12971298
let PrintMethod = "printBitOp3" in
12981299
def BitOp3 : NamedIntOperand<"bitop3">;
@@ -1971,7 +1972,8 @@ class getIns32 <RegisterOperand Src0RC, RegisterOperand Src1RC, int NumSrcArgs>
19711972
class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19721973
RegisterOperand Src2RC, int NumSrcArgs,
19731974
bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
1974-
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod> {
1975+
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
1976+
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
19751977
dag src0 = !if(!ge(NumSrcArgs, 1),
19761978
!if (HasModifiers,
19771979
(ins Src0Mod:$src0_modifiers, Src0RC:$src0),
@@ -1987,20 +1989,29 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19871989
(ins Src2Mod:$src2_modifiers, Src2RC:$src2),
19881990
(ins Src2RC:$src2)),
19891991
(ins));
1990-
dag clamp = !if(HasClamp, (ins Clamp0:$clamp), (ins));
1992+
// If there is vdst_in after clamp with HasFP8DstByteSel we cannot use
1993+
// Clamp0 with default value, all default operands must be at the end.
1994+
dag clamp = !if(HasClamp, !if(HasFP8DstByteSel, (ins Clamp:$clamp),
1995+
(ins Clamp0:$clamp)),
1996+
(ins));
19911997
dag omod = !if(HasOMod, (ins omod0:$omod), (ins));
1998+
dag bytesel = !if(HasFP8ByteSel,
1999+
!con(!if(HasFP8DstByteSel, (ins VGPR_32:$vdst_in), (ins)),
2000+
(ins ByteSel0:$byte_sel)),
2001+
(ins));
19922002

1993-
dag ret = !con(src0, src1, src2, clamp, omod);
2003+
dag ret = !con(src0, src1, src2, clamp, omod, bytesel);
19942004
}
19952005

19962006
class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
19972007
RegisterOperand Src2RC, int NumSrcArgs,
19982008
bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
1999-
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, bit HasOpSel> {
2009+
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, bit HasOpSel,
2010+
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
20002011
// getInst64 handles clamp and omod. implicit mutex between vop3p and omod
20012012
dag base = getIns64 <Src0RC, Src1RC, Src2RC, NumSrcArgs,
20022013
HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2003-
Src0Mod, Src1Mod, Src2Mod>.ret;
2014+
Src0Mod, Src1Mod, Src2Mod, HasFP8ByteSel, HasFP8DstByteSel>.ret;
20042015
dag opsel = (ins op_sel0:$op_sel);
20052016
dag ret = !con(base, !if(HasOpSel, opsel, (ins)));
20062017
}
@@ -2612,7 +2623,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26122623
field dag Ins32 = getIns32<Src0RC32, Src1RC32, NumSrcArgs>.ret;
26132624
field dag Ins64 = getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
26142625
HasClamp, HasModifiers, HasSrc2Mods,
2615-
HasOMod, Src0Mod, Src1Mod, Src2Mod>.ret;
2626+
HasOMod, Src0Mod, Src1Mod, Src2Mod,
2627+
HasFP8ByteSel, HasFP8DstByteSel>.ret;
26162628
field dag InsVOP3P = getInsVOP3P<Src0RC64, Src1RC64, Src2RC64,
26172629
NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26182630
Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
@@ -2630,7 +2642,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26302642
Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret;
26312643
defvar InsVOP3DPPBase = getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP,
26322644
Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2633-
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel>.ret;
2645+
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel,
2646+
HasFP8ByteSel, HasFP8DstByteSel>.ret;
26342647
defvar InsVOP3PDPPBase = getInsVOP3P<Src0VOP3DPP, Src1VOP3DPP,
26352648
Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26362649
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP>.ret;

llvm/lib/Target/AMDGPU/VOP1Instructions.td

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -674,17 +674,6 @@ class VOPProfile_Base_CVT_F_F8_ByteSel<ValueType DstVT> : VOPProfile<[DstVT, i32
674674
let HasClamp = 0;
675675
let HasOMod = 0;
676676
let HasModifiers = 0;
677-
678-
defvar bytesel = (ins ByteSel:$byte_sel);
679-
let Ins64 = !con(getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
680-
HasClamp, HasModifiers, HasSrc2Mods,
681-
HasOMod, Src0Mod, Src1Mod, Src2Mod>.ret,
682-
bytesel);
683-
let InsVOP3Base = !con(getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP, Src2VOP3DPP,
684-
NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods,
685-
HasOMod, Src0ModVOP3DPP, Src1ModVOP3DPP,
686-
Src2ModVOP3DPP, HasOpSel>.ret,
687-
bytesel);
688677
}
689678

690679
let SubtargetPredicate = isGFX12Plus, OtherPredicates = [HasFP8ConversionInsts],

llvm/lib/Target/AMDGPU/VOP3Instructions.td

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,7 @@ def VOP3_CVT_SR_F8_F32_Profile : VOP3_Profile<VOPProfile<[i32, f32, i32, f32]>,
593593
let HasExtVOP3DPP = 1;
594594
let HasOpSel = 1;
595595
let HasFP8DstByteSel = 1;
596+
let HasFP8ByteSel = 0; // It works as a dst-bytesel, but does not have byte_sel operand.
596597
let AsmVOP3OpSel = !subst(", $src2_modifiers", "",
597598
getAsmVOP3OpSel<3, HasClamp, HasOMod,
598599
HasSrc0FloatMods, HasSrc1FloatMods,
@@ -607,16 +608,6 @@ class VOP3_CVT_SR_F8_ByteSel_Profile<ValueType SrcVT> :
607608
VOP3_Profile<VOPProfile<[i32, SrcVT, i32, untyped]>> {
608609
let HasFP8DstByteSel = 1;
609610
let HasClamp = 0;
610-
defvar bytesel = (ins VGPR_32:$vdst_in, ByteSel:$byte_sel);
611-
let Ins64 = !con(getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
612-
HasClamp, HasModifiers, HasSrc2Mods,
613-
HasOMod, Src0Mod, Src1Mod, Src2Mod>.ret,
614-
bytesel);
615-
let InsVOP3Base = !con(
616-
getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP,
617-
Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
618-
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel>.ret,
619-
bytesel);
620611
}
621612

622613
def IsPow2Plus1: PatLeaf<(i32 imm), [{

0 commit comments

Comments
 (0)