Skip to content

Commit 29c8c61

Browse files
rampitectomtor
authored andcommitted
[AMDGPU] Autogenerate bitop3 asm and dags. NFCI. (llvm#143430)
1 parent 9f29922 commit 29c8c61

File tree

2 files changed

+24
-27
lines changed

2 files changed

+24
-27
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.td

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1973,7 +1973,8 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19731973
RegisterOperand Src2RC, int NumSrcArgs,
19741974
bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
19751975
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
1976-
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
1976+
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0,
1977+
bit HasBitOp3 = 0> {
19771978
dag src0 = !if(!ge(NumSrcArgs, 1),
19781979
!if (HasModifiers,
19791980
(ins Src0Mod:$src0_modifiers, Src0RC:$src0),
@@ -1999,21 +2000,23 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19992000
!con(!if(HasFP8DstByteSel, (ins VGPR_32:$vdst_in), (ins)),
20002001
(ins ByteSel0:$byte_sel)),
20012002
(ins));
2003+
dag bitop3 = !if(HasBitOp3, (ins bitop3_0:$bitop3), (ins));
20022004

2003-
dag ret = !con(src0, src1, src2, clamp, omod, bytesel);
2005+
dag ret = !con(src0, src1, src2, clamp, omod, bytesel, bitop3);
20042006
}
20052007

20062008
class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
20072009
RegisterOperand Src2RC, int NumSrcArgs,
20082010
bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
20092011
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, bit HasOpSel,
2010-
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
2012+
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0, bit HasBitOp3 = 0> {
20112013
// getInst64 handles clamp and omod. implicit mutex between vop3p and omod
20122014
dag base = getIns64 <Src0RC, Src1RC, Src2RC, NumSrcArgs,
20132015
HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
20142016
Src0Mod, Src1Mod, Src2Mod, HasFP8ByteSel, HasFP8DstByteSel>.ret;
20152017
dag opsel = (ins op_sel0:$op_sel);
2016-
dag ret = !con(base, !if(HasOpSel, opsel, (ins)));
2018+
dag bitop3 = (ins bitop3_0:$bitop3);
2019+
dag ret = !con(base, !if(HasBitOp3, bitop3, (ins)), !if(HasOpSel, opsel, (ins)));
20172020
}
20182021

20192022
class getInsVOP3P <RegisterOperand Src0RC, RegisterOperand Src1RC,
@@ -2035,12 +2038,12 @@ class getInsVOP3OpSel <RegisterOperand Src0RC, RegisterOperand Src1RC,
20352038
RegisterOperand Src2RC, int NumSrcArgs,
20362039
bit HasClamp, bit HasOMod,
20372040
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
2038-
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
2041+
bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0, bit HasBitOp3 = 0> {
20392042
dag ret = getInsVOP3Base<Src0RC, Src1RC,
20402043
Src2RC, NumSrcArgs,
20412044
HasClamp, 1/*HasModifiers*/, 1/*HasSrc2Mods*/, HasOMod,
20422045
Src0Mod, Src1Mod, Src2Mod, /*HasOpSel=*/1,
2043-
HasFP8ByteSel, HasFP8DstByteSel>.ret;
2046+
HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3>.ret;
20442047
}
20452048

20462049
class getInsDPPBase <RegisterOperand OldRC, RegisterOperand Src0RC, RegisterOperand Src1RC,
@@ -2247,7 +2250,8 @@ class getAsmVOP3OpSel <int NumSrcArgs,
22472250
bit Src0HasMods,
22482251
bit Src1HasMods,
22492252
bit Src2HasMods,
2250-
bit HasByteSel = 0> {
2253+
bit HasByteSel = 0,
2254+
bit HasBitOp3 = 0> {
22512255
string dst = "$vdst";
22522256

22532257
string isrc0 = !if(!eq(NumSrcArgs, 1), "$src0", "$src0,");
@@ -2269,7 +2273,8 @@ class getAsmVOP3OpSel <int NumSrcArgs,
22692273
string bytesel = !if(HasByteSel, "$byte_sel", "");
22702274
string clamp = !if(HasClamp, "$clamp", "");
22712275
string omod = !if(HasOMod, "$omod", "");
2272-
string ret = dst#", "#src0#src1#src2#"$op_sel"#bytesel#clamp#omod;
2276+
string bitop3 = !if(HasBitOp3, "$bitop3", "");
2277+
string ret = dst#", "#src0#src1#src2#bitop3#"$op_sel"#bytesel#clamp#omod;
22732278
}
22742279

22752280
class getAsmDPP <bit HasDst, int NumSrcArgs, bit HasModifiers, ValueType DstVT = i32> {
@@ -2301,7 +2306,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
23012306
bit HasOpSel, bit HasOMod, bit IsVOP3P,
23022307
bit HasNeg, bit Src0HasMods,
23032308
bit Src1HasMods, bit Src2HasMods, ValueType DstVT = i32,
2304-
bit HasByteSel = 0> {
2309+
bit HasByteSel = 0, bit HasBitOp3 = 0> {
23052310
string dst = !if(HasDst,
23062311
!if(!eq(DstVT.Size, 1),
23072312
"$sdst",
@@ -2324,6 +2329,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
23242329
string src2 = !if(Src2HasMods, src2mods, src2nomods);
23252330
string opsel = !if(HasOpSel, "$op_sel", "");
23262331
string bytesel = !if(HasByteSel, "$byte_sel", "");
2332+
string bitop3 = !if(HasBitOp3, "$bitop3", "");
23272333
string 3PMods = !if(IsVOP3P,
23282334
!if(HasOpSel, "$op_sel_hi", "")
23292335
#!if(HasNeg, "$neg_lo$neg_hi", ""),
@@ -2333,7 +2339,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
23332339

23342340
string ret = dst#!if(!eq(NumSrcArgs,0),
23352341
"",
2336-
!if(HasDst,", ", "")#src0#src1#src2#opsel#bytesel#3PMods#clamp#omod);
2342+
!if(HasDst,", ", "")#src0#src1#src2#bitop3#opsel#bytesel#3PMods#clamp#omod);
23372343
}
23382344

23392345
class getAsmVOP3DPP<string base> {
@@ -2558,6 +2564,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
25582564
field bit HasFP8DstByteSel = 0;
25592565
field bit HasFP4DstByteSel = 0;
25602566
field bit HasFP8ByteSel = !or(HasFP8SrcByteSel, HasFP8DstByteSel);
2567+
field bit HasBitOp3 = 0;
25612568

25622569
field bit HasDst = !ne(DstVT.Value, untyped.Value);
25632570
field bit HasDst32 = HasDst;
@@ -2628,14 +2635,14 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26282635
field dag Ins64 = getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
26292636
HasClamp, HasModifiers, HasSrc2Mods,
26302637
HasOMod, Src0Mod, Src1Mod, Src2Mod,
2631-
HasFP8ByteSel, HasFP8DstByteSel>.ret;
2638+
HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3>.ret;
26322639
field dag InsVOP3P = getInsVOP3P<Src0RC64, Src1RC64, Src2RC64,
26332640
NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26342641
Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
26352642
field dag InsVOP3OpSel = getInsVOP3OpSel<Src0RC64, Src1RC64, Src2RC64,
26362643
NumSrcArgs, HasClamp, HasOMod,
26372644
Src0Mod, Src1Mod, Src2Mod,
2638-
HasFP8ByteSel, HasFP8DstByteSel>.ret;
2645+
HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3>.ret;
26392646
field dag InsDPP = !if(HasExtDPP,
26402647
getInsDPP<DstRCDPP, Src0DPP, Src1DPP, Src2DPP, NumSrcArgs,
26412648
HasModifiers, Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret,
@@ -2648,7 +2655,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26482655
defvar InsVOP3DPPBase = getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP,
26492656
Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
26502657
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel,
2651-
HasFP8ByteSel, HasFP8DstByteSel>.ret;
2658+
HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3>.ret;
26522659
defvar InsVOP3PDPPBase = getInsVOP3P<Src0VOP3DPP, Src1VOP3DPP,
26532660
Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26542661
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP>.ret;
@@ -2677,7 +2684,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26772684
field string AsmDPP8 = getAsmDPP8<HasDst, NumSrcArgs, 0 /*HasModifiers*/, DstVT>.ret;
26782685
field string AsmVOP3Base = getAsmVOP3Base<NumSrcArgs, HasDst, HasClamp,
26792686
HasOpSel, HasOMod, IsVOP3P, HasNeg, HasSrc0Mods, HasSrc1Mods,
2680-
HasSrc2Mods, DstVT, HasFP8ByteSel>.ret;
2687+
HasSrc2Mods, DstVT, HasFP8ByteSel, HasBitOp3>.ret;
26812688
field string Asm64 = AsmVOP3Base;
26822689
field string AsmVOP3P = getAsmVOP3P<HasDst, NumSrcArgs, HasNeg, HasClamp, HasOpSel>.ret;
26832690
field string AsmVOP3OpSel = getAsmVOP3OpSel<NumSrcArgs,
@@ -2686,7 +2693,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26862693
HasSrc0FloatMods,
26872694
HasSrc1FloatMods,
26882695
HasSrc2FloatMods,
2689-
HasFP8ByteSel>.ret;
2696+
HasFP8ByteSel,
2697+
HasBitOp3>.ret;
26902698
field string AsmVOP3DPP = getAsmVOP3DPP<AsmVOP3Base>.ret;
26912699
field string AsmVOP3DPP16 = getAsmVOP3DPP16<AsmVOP3Base>.ret;
26922700
field string AsmVOP3DPP8 = getAsmVOP3DPP8<AsmVOP3Base>.ret;

llvm/lib/Target/AMDGPU/VOP3Instructions.td

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,18 +1003,7 @@ class VOP3_BITOP3_Profile<VOPProfile pfl, VOP3Features f> : VOP3_Profile<pfl, f>
10031003
let HasClamp = 0;
10041004
let HasOMod = 0;
10051005
let HasModifiers = 0;
1006-
1007-
let Ins64 = !con(getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
1008-
0 /* HasIntClamp */, HasModifiers, HasSrc2Mods,
1009-
HasOMod, Src0Mod, Src1Mod, Src2Mod>.ret,
1010-
(ins bitop3_0:$bitop3));
1011-
1012-
let InsVOP3OpSel = !con(getInsVOP3Base<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs, 0, 1, 1, 0,
1013-
Src0Mod, Src1Mod, Src2Mod, 0>.ret,
1014-
(ins bitop3_0:$bitop3, op_sel0:$op_sel));
1015-
1016-
let Asm64 = "$vdst, $src0, $src1, $src2$bitop3";
1017-
let AsmVOP3OpSel = !subst("$op_sel", "$bitop3$op_sel", getAsmVOP3OpSel<3, 0, 0, 0, 0, 0>.ret);
1006+
let HasBitOp3 = 1;
10181007
}
10191008

10201009
class VOP3_CVT_SCALE_F1632_FP8BF8_Profile<ValueType DstTy> : VOP3_Profile<VOPProfile<[DstTy, i32, f32, untyped]>,

0 commit comments

Comments
 (0)