Skip to content

Commit a8c2b43

Browse files
authored
[AMDGPU] Autogenerate dst bytesel asm. NFCI. (#143429)
Needed for future t16 support.
1 parent ba7c646 commit a8c2b43

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.td

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2034,11 +2034,13 @@ class getInsVOP3P <RegisterOperand Src0RC, RegisterOperand Src1RC,
20342034
class getInsVOP3OpSel <RegisterOperand Src0RC, RegisterOperand Src1RC,
20352035
RegisterOperand Src2RC, int NumSrcArgs,
20362036
bit HasClamp, bit HasOMod,
2037-
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod> {
2037+
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
2038+
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
20382039
dag ret = getInsVOP3Base<Src0RC, Src1RC,
20392040
Src2RC, NumSrcArgs,
20402041
HasClamp, 1/*HasModifiers*/, 1/*HasSrc2Mods*/, HasOMod,
2041-
Src0Mod, Src1Mod, Src2Mod, /*HasOpSel=*/1>.ret;
2042+
Src0Mod, Src1Mod, Src2Mod, /*HasOpSel=*/1,
2043+
HasFP8ByteSel, HasFP8DstByteSel>.ret;
20422044
}
20432045

20442046
class getInsDPPBase <RegisterOperand OldRC, RegisterOperand Src0RC, RegisterOperand Src1RC,
@@ -2244,7 +2246,8 @@ class getAsmVOP3OpSel <int NumSrcArgs,
22442246
bit HasOMod,
22452247
bit Src0HasMods,
22462248
bit Src1HasMods,
2247-
bit Src2HasMods> {
2249+
bit Src2HasMods,
2250+
bit HasByteSel = 0> {
22482251
string dst = "$vdst";
22492252

22502253
string isrc0 = !if(!eq(NumSrcArgs, 1), "$src0", "$src0,");
@@ -2263,9 +2266,10 @@ class getAsmVOP3OpSel <int NumSrcArgs,
22632266
string src1 = !if(Src1HasMods, fsrc1, isrc1);
22642267
string src2 = !if(Src2HasMods, fsrc2, isrc2);
22652268

2269+
string bytesel = !if(HasByteSel, "$byte_sel", "");
22662270
string clamp = !if(HasClamp, "$clamp", "");
22672271
string omod = !if(HasOMod, "$omod", "");
2268-
string ret = dst#", "#src0#src1#src2#"$op_sel"#clamp#omod;
2272+
string ret = dst#", "#src0#src1#src2#"$op_sel"#bytesel#clamp#omod;
22692273
}
22702274

22712275
class getAsmDPP <bit HasDst, int NumSrcArgs, bit HasModifiers, ValueType DstVT = i32> {
@@ -2630,7 +2634,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26302634
Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
26312635
field dag InsVOP3OpSel = getInsVOP3OpSel<Src0RC64, Src1RC64, Src2RC64,
26322636
NumSrcArgs, HasClamp, HasOMod,
2633-
Src0Mod, Src1Mod, Src2Mod>.ret;
2637+
Src0Mod, Src1Mod, Src2Mod,
2638+
HasFP8ByteSel, HasFP8DstByteSel>.ret;
26342639
field dag InsDPP = !if(HasExtDPP,
26352640
getInsDPP<DstRCDPP, Src0DPP, Src1DPP, Src2DPP, NumSrcArgs,
26362641
HasModifiers, Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret,
@@ -2680,7 +2685,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26802685
HasOMod,
26812686
HasSrc0FloatMods,
26822687
HasSrc1FloatMods,
2683-
HasSrc2FloatMods>.ret;
2688+
HasSrc2FloatMods,
2689+
HasFP8ByteSel>.ret;
26842690
field string AsmVOP3DPP = getAsmVOP3DPP<AsmVOP3Base>.ret;
26852691
field string AsmVOP3DPP16 = getAsmVOP3DPP16<AsmVOP3Base>.ret;
26862692
field string AsmVOP3DPP8 = getAsmVOP3DPP8<AsmVOP3Base>.ret;

llvm/lib/Target/AMDGPU/VOP3Instructions.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,6 +1055,7 @@ class VOP3_CVT_SCALE_FP4FP8BF8_F32_TiedInput_Profile<VOPProfile P> : VOP3_Profil
10551055

10561056
class VOP3_CVT_SCALE_FP4_F32_TiedInput_Profile<VOPProfile P> : VOP3_CVT_SCALE_FP4FP8BF8_F32_TiedInput_Profile<P> {
10571057
let HasFP8DstByteSel = 1;
1058+
let HasFP8ByteSel = 0; // It works as a dst-bytesel, but does not have byte_sel operand.
10581059
}
10591060

10601061
class VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOPProfile P> : VOP3_CVT_SCALE_FP4FP8BF8_F32_TiedInput_Profile<P> {
@@ -1063,6 +1064,7 @@ class VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOPProfile P> : VOP3_
10631064
FP32InputMods:$src2_modifiers, Src2RC64:$src2,
10641065
VGPR_32:$vdst_in, op_sel0:$op_sel);
10651066
let HasFP8DstByteSel = 1;
1067+
let HasFP8ByteSel = 0; // It works as a dst-bytesel, but does not have byte_sel operand.
10661068
}
10671069

10681070

llvm/lib/Target/AMDGPU/VOPInstructions.td

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,6 +1478,9 @@ class VOP3_Profile_Base<VOPProfile P, VOP3Features Features = VOP3_REGULAR> : VO
14781478
let HasOpSel = !if(Features.HasOpSel, 1, P.HasOpSel);
14791479
let IsMAI = !if(Features.IsMAI, 1, P.IsMAI);
14801480
let IsPacked = !if(Features.IsPacked, 1, P.IsPacked);
1481+
let HasFP8SrcByteSel = P.HasFP8SrcByteSel;
1482+
let HasFP8DstByteSel = P.HasFP8DstByteSel;
1483+
let HasOMod = P.HasOMod;
14811484

14821485
let HasModifiers =
14831486
!if (Features.IsMAI, 0,
@@ -1494,6 +1497,9 @@ class VOP3_Profile_True16<VOPProfile P, VOP3Features Features = VOP3_REGULAR> :
14941497
let HasOpSel = !if(Features.HasOpSel, 1, P.HasOpSel);
14951498
let IsMAI = !if(Features.IsMAI, 1, P.IsMAI);
14961499
let IsPacked = !if(Features.IsPacked, 1, P.IsPacked);
1500+
let HasFP8SrcByteSel = P.HasFP8SrcByteSel;
1501+
let HasFP8DstByteSel = P.HasFP8DstByteSel;
1502+
let HasOMod = P.HasOMod;
14971503

14981504
let HasModifiers =
14991505
!if (Features.IsMAI, 0,
@@ -1506,6 +1512,9 @@ class VOP3_Profile_Fake16<VOPProfile P, VOP3Features Features = VOP3_REGULAR> :
15061512
let HasOpSel = !if(Features.HasOpSel, 1, P.HasOpSel);
15071513
let IsMAI = !if(Features.IsMAI, 1, P.IsMAI);
15081514
let IsPacked = !if(Features.IsPacked, 1, P.IsPacked);
1515+
let HasFP8SrcByteSel = P.HasFP8SrcByteSel;
1516+
let HasFP8DstByteSel = P.HasFP8DstByteSel;
1517+
let HasOMod = P.HasOMod;
15091518

15101519
let HasModifiers =
15111520
!if (Features.IsMAI, 0,

0 commit comments

Comments
 (0)