Skip to content

Commit a4a99ad

Browse files
committed
[AMDGPU] Assembler: More tests for SDWA instructions. Fix for SDWA float modifiers.
Summary: Depends on D20625 Reviewers: tstellarAMD, vpykhtin, artem.tamazov Subscribers: arsenm, kzhuravl Differential Revision: http://reviews.llvm.org/D20674 llvm-svn: 271662
1 parent 9c6cb03 commit a4a99ad

File tree

3 files changed

+468
-23
lines changed

3 files changed

+468
-23
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.td

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,19 +1246,20 @@ class getInsSDWA <RegisterClass Src0RC, RegisterClass Src1RC, int NumSrcArgs,
12461246
!if (!eq(NumSrcArgs, 1),
12471247
!if (!eq(HasModifiers, 1),
12481248
// VOP1_SDWA with modifiers
1249-
(ins InputModsNoDefault:$src0_modifiers, Src0RC:$src0,
1249+
(ins InputModsNoDefault:$src0_fmodifiers, Src0RC:$src0,
12501250
clampmod:$clamp, dst_sel:$dst_sel, dst_unused:$dst_unused,
12511251
src0_sel:$src0_sel)
12521252
/* else */,
12531253
// VOP1_SDWA without modifiers
1254+
// FIXME: sext() modifier is not supported yet
12541255
(ins Src0RC:$src0, dst_sel:$dst_sel, dst_unused:$dst_unused,
12551256
src0_sel:$src0_sel)
12561257
/* endif */)
12571258
/* NumSrcArgs == 2 */,
12581259
!if (!eq(HasModifiers, 1),
12591260
// VOP2_SDWA with modifiers
1260-
(ins InputModsNoDefault:$src0_modifiers, Src0RC:$src0,
1261-
InputModsNoDefault:$src1_modifiers, Src1RC:$src1,
1261+
(ins InputModsNoDefault:$src0_fmodifiers, Src0RC:$src0,
1262+
InputModsNoDefault:$src1_fmodifiers, Src1RC:$src1,
12621263
clampmod:$clamp, dst_sel:$dst_sel, dst_unused:$dst_unused,
12631264
src0_sel:$src0_sel, src1_sel:$src1_sel)
12641265
/* else */,
@@ -1329,10 +1330,10 @@ class getAsmSDWA <bit HasDst, int NumSrcArgs, bit HasModifiers, ValueType DstVT
13291330
"$sdst",
13301331
"$vdst"),
13311332
""); // use $sdst for VOPC
1332-
string src0 = !if(!eq(NumSrcArgs, 1), "$src0_modifiers", "$src0_modifiers,");
1333+
string src0 = !if(!eq(NumSrcArgs, 1), "$src0_fmodifiers", "$src0_fmodifiers,");
13331334
string src1 = !if(!eq(NumSrcArgs, 1), "",
1334-
!if(!eq(NumSrcArgs, 2), " $src1_modifiers",
1335-
" $src1_modifiers,"));
1335+
!if(!eq(NumSrcArgs, 2), " $src1_fmodifiers",
1336+
" $src1_fmodifiers,"));
13361337
string args = !if(!eq(HasModifiers, 0),
13371338
getAsm32<0, NumSrcArgs, DstVT>.ret,
13381339
", "#src0#src1#"$clamp");
@@ -1541,8 +1542,8 @@ def VOP_MAC : VOPProfile <[f32, f32, f32, f32]> {
15411542
VGPR_32:$src2, // stub argument
15421543
dpp_ctrl:$dpp_ctrl, row_mask:$row_mask,
15431544
bank_mask:$bank_mask, bound_ctrl:$bound_ctrl);
1544-
let InsSDWA = (ins InputModsNoDefault:$src0_modifiers, Src0RC32:$src0,
1545-
InputModsNoDefault:$src1_modifiers, Src1RC32:$src1,
1545+
let InsSDWA = (ins InputModsNoDefault:$src0_fmodifiers, Src0RC32:$src0,
1546+
InputModsNoDefault:$src1_fmodifiers, Src1RC32:$src1,
15461547
VGPR_32:$src2, // stub argument
15471548
clampmod:$clamp, dst_sel:$dst_sel, dst_unused:$dst_unused,
15481549
src0_sel:$src0_sel, src1_sel:$src1_sel);
@@ -1669,13 +1670,15 @@ class VOP1_DPP <vop1 op, string opName, VOPProfile p> :
16691670
class SDWADisableFields <VOPProfile p> {
16701671
bits<8> src0 = !if(!eq(p.NumSrcArgs, 0), 0, ?);
16711672
bits<3> src0_sel = !if(!eq(p.NumSrcArgs, 0), 6, ?);
1672-
bits<3> src0_modifiers = !if(p.HasModifiers, ?, 0);
1673+
bits<2> src0_fmodifiers = !if(p.HasModifiers, ?, 0);
1674+
bits<1> src0_imodifiers = 0; // FIXME: always 0 untill sext modifier is supported
16731675
bits<3> src1_sel = !if(!eq(p.NumSrcArgs, 0), 6,
16741676
!if(!eq(p.NumSrcArgs, 1), 6,
16751677
?));
1676-
bits<3> src1_modifiers = !if(!eq(p.NumSrcArgs, 0), 0,
1677-
!if(!eq(p.NumSrcArgs, 1), 0,
1678-
!if(p.HasModifiers, ?, 0)));
1678+
bits<2> src1_fmodifiers = !if(!eq(p.NumSrcArgs, 0), 0,
1679+
!if(!eq(p.NumSrcArgs, 1), 0,
1680+
!if(p.HasModifiers, ?, 0)));
1681+
bits<1> src1_imodifiers = 0;
16791682
bits<3> dst_sel = !if(p.HasDst, ?, 6);
16801683
bits<2> dst_unused = !if(p.HasDst, ?, 2);
16811684
bits<1> clamp = !if(p.HasModifiers, ?, 0);

llvm/lib/Target/AMDGPU/VIInstrFormats.td

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,11 @@ class VOP_SDWA <dag outs, dag ins, string asm, list<dag> pattern, bit HasMods =
234234
class VOP_SDWAe : Enc64 {
235235
bits<8> src0;
236236
bits<3> src0_sel;
237-
bits<3> src0_modifiers; // {abs,neg,sext}
237+
bits<2> src0_fmodifiers; // {abs,neg}
238+
bits<1> src0_imodifiers; // sext
238239
bits<3> src1_sel;
239-
bits<3> src1_modifiers;
240+
bits<2> src1_fmodifiers;
241+
bits<1> src1_imodifiers;
240242
bits<3> dst_sel;
241243
bits<2> dst_unused;
242244
bits<1> clamp;
@@ -246,9 +248,11 @@ class VOP_SDWAe : Enc64 {
246248
let Inst{44-43} = dst_unused;
247249
let Inst{45} = clamp;
248250
let Inst{50-48} = src0_sel;
249-
let Inst{53-51} = src0_modifiers;
251+
let Inst{53-52} = src0_fmodifiers;
252+
let Inst{51} = src0_imodifiers;
250253
let Inst{58-56} = src1_sel;
251-
let Inst{61-59} = src1_modifiers;
254+
let Inst{61-60} = src1_fmodifiers;
255+
let Inst{59} = src1_imodifiers;
252256
}
253257

254258
class VOP1_SDWAe <bits<8> op> : VOP_SDWAe {

0 commit comments

Comments
 (0)