Skip to content

Commit 95e03b3

Browse files
arsenmpravinjagtap
authored andcommitted
AMDGPU: Add v_mfma_ld_scale_b32 for gfx950 (llvm#116722)
1 parent 3033f0c commit 95e03b3

File tree

7 files changed

+287
-46
lines changed

7 files changed

+287
-46
lines changed

llvm/lib/Target/AMDGPU/SIInstrInfo.td

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1800,13 +1800,14 @@ class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
18001800

18011801
class getInsVOP3P <RegisterOperand Src0RC, RegisterOperand Src1RC,
18021802
RegisterOperand Src2RC, int NumSrcArgs, bit HasClamp, bit HasOpSel,
1803+
bit HasNeg,
18031804
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod> {
18041805
dag base = getInsVOP3Base<Src0RC, Src1RC, Src2RC, NumSrcArgs,
18051806
HasClamp, 1/*HasModifiers*/, 1/*HasSrc2Mods*/,
18061807
0/*HasOMod*/, Src0Mod, Src1Mod, Src2Mod, HasOpSel>.ret;
18071808

18081809
dag vop3pOpsel = (ins op_sel_hi0:$op_sel_hi);
1809-
dag vop3p_neg = (ins neg_lo0:$neg_lo, neg_hi0:$neg_hi);
1810+
dag vop3p_neg = !if(HasNeg, (ins neg_lo0:$neg_lo, neg_hi0:$neg_hi), (ins));
18101811

18111812
dag vop3pFields = !con(!if(HasOpSel, vop3pOpsel, (ins)), vop3p_neg);
18121813
dag ret = !con(base, vop3pFields);
@@ -2000,22 +2001,22 @@ class getAsmVOPDPart <int NumSrcArgs, string XorY> {
20002001

20012002
// Returns the assembly string for the inputs and outputs of a VOP3P
20022003
// instruction.
2003-
class getAsmVOP3P <int NumSrcArgs, bit HasModifiers,
2004+
class getAsmVOP3P <bit HasDst, int NumSrcArgs, bit HasNeg,
20042005
bit HasClamp, bit HasOpSel> {
2005-
string dst = "$vdst";
2006-
string src0 = !if(!eq(NumSrcArgs, 1), "$src0", "$src0,");
2006+
string dst = !if(HasDst, "$vdst"# !if(!gt(NumSrcArgs, 0), ",", ""), "");
2007+
string src0 = !if(!eq(NumSrcArgs, 1), " $src0", " $src0,");
20072008
string src1 = !if(!eq(NumSrcArgs, 1), "",
20082009
!if(!eq(NumSrcArgs, 2), " $src1",
20092010
" $src1,"));
20102011
string src2 = !if(!eq(NumSrcArgs, 3), " $src2", "");
20112012

2012-
string mods = !if(HasModifiers, "$neg_lo$neg_hi", "");
2013+
string mods = !if(HasNeg, "$neg_lo$neg_hi", "");
20132014
string clamp = !if(HasClamp, "$clamp", "");
20142015
string opsel = !if(HasOpSel, "$op_sel$op_sel_hi", "");
20152016

20162017
// Each modifier is printed as an array of bits for each operand, so
20172018
// all operands are printed as part of src0_modifiers.
2018-
string ret = dst#", "#src0#src1#src2#opsel#mods#clamp;
2019+
string ret = dst#src0#src1#src2#opsel#mods#clamp;
20192020
}
20202021

20212022
class getAsmVOP3OpSel <int NumSrcArgs,
@@ -2074,7 +2075,7 @@ class getAsmDPP8 <bit HasDst, int NumSrcArgs, bit HasModifiers, ValueType DstVT
20742075

20752076
class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
20762077
bit HasOpSel, bit HasOMod, bit IsVOP3P,
2077-
bit HasModifiers, bit Src0HasMods,
2078+
bit HasNeg, bit Src0HasMods,
20782079
bit Src1HasMods, bit Src2HasMods, ValueType DstVT = i32,
20792080
bit HasByteSel = 0> {
20802081
string dst = !if(HasDst,
@@ -2101,7 +2102,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
21012102
string bytesel = !if(HasByteSel, "$byte_sel", "");
21022103
string 3PMods = !if(IsVOP3P,
21032104
!if(HasOpSel, "$op_sel_hi", "")
2104-
#!if(HasModifiers, "$neg_lo$neg_hi", ""),
2105+
#!if(HasNeg, "$neg_lo$neg_hi", ""),
21052106
"");
21062107
string clamp = !if(HasClamp, "$clamp", "");
21072108
string omod = !if(HasOMod, "$omod", "");
@@ -2362,6 +2363,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
23622363
isModifierType<Src1VT>.ret,
23632364
isModifierType<Src2VT>.ret,
23642365
HasOMod);
2366+
field bit HasNeg = HasModifiers;
23652367

23662368
field bit HasSrc0Mods = HasModifiers;
23672369
field bit HasSrc1Mods = !if(HasModifiers, !or(HasSrc1FloatMods, HasSrc1IntMods), 0);
@@ -2397,7 +2399,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
23972399
HasClamp, HasModifiers, HasSrc2Mods,
23982400
HasOMod, Src0Mod, Src1Mod, Src2Mod>.ret;
23992401
field dag InsVOP3P = getInsVOP3P<Src0RC64, Src1RC64, Src2RC64,
2400-
NumSrcArgs, HasClamp, HasOpSel,
2402+
NumSrcArgs, HasClamp, HasOpSel, HasNeg,
24012403
Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
24022404
field dag InsVOP3OpSel = getInsVOP3OpSel<Src0RC64, Src1RC64, Src2RC64,
24032405
NumSrcArgs, HasClamp, HasOMod,
@@ -2417,7 +2419,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
24172419
Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
24182420
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel>.ret;
24192421
defvar InsVOP3PDPPBase = getInsVOP3P<Src0VOP3DPP, Src1VOP3DPP,
2420-
Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel,
2422+
Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel, HasNeg,
24212423
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP>.ret;
24222424

24232425
field dag InsVOP3Base = !if(IsVOP3P, InsVOP3PDPPBase, InsVOP3DPPBase);
@@ -2445,10 +2447,10 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
24452447
// the asm operand name via this HasModifiers flag
24462448
field string AsmDPP8 = getAsmDPP8<HasDst, NumSrcArgs, 0 /*HasModifiers*/, DstVT>.ret;
24472449
field string AsmVOP3Base = getAsmVOP3Base<NumSrcArgs, HasDst, HasClamp,
2448-
HasOpSel, HasOMod, IsVOP3P, HasModifiers, HasModifiers, HasModifiers,
2450+
HasOpSel, HasOMod, IsVOP3P, HasNeg, HasModifiers, HasModifiers,
24492451
HasModifiers, DstVT, IsFP8ByteSel>.ret;
24502452
field string Asm64 = AsmVOP3Base;
2451-
field string AsmVOP3P = getAsmVOP3P<NumSrcArgs, HasModifiers, HasClamp, HasOpSel>.ret;
2453+
field string AsmVOP3P = getAsmVOP3P<HasDst, NumSrcArgs, HasNeg, HasClamp, HasOpSel>.ret;
24522454
field string AsmVOP3OpSel = getAsmVOP3OpSel<NumSrcArgs,
24532455
HasClamp,
24542456
HasOMod,

llvm/lib/Target/AMDGPU/VOP3PInstructions.td

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ class VOP3P_Profile<VOPProfile P, VOP3Features Features = VOP3_REGULAR,
2020
let AsmVOP3Base = AsmVOP3P;
2121
}
2222

23+
def VOP_MFMA_LD_SCALE : VOP3P_Profile<VOPProfile<[untyped, i32, i32, untyped]>, VOP3P_LD_SCALE> {
24+
let HasModifiers = 1;
25+
let HasNeg = 0;
26+
}
27+
2328
// Used for FMA_MIX* and MAD_MIX* insts
2429
// Their operands are only sort of f16 operands. Depending on
2530
// op_sel_hi, these may be interpreted as f32. The inline immediate
@@ -757,7 +762,11 @@ defm V_MFMA_F32_32X32X16_F16 : MAIInst<"v_mfma_f32_32x32x16f16", "F32_V8F16
757762
defm V_MFMA_F32_32X32X16_BF16 : MAIInst<"v_mfma_f32_32x32x16bf16", "F32_V8BF16_X16", int_amdgcn_mfma_f32_32x32x16_bf16>;
758763
}
759764

760-
let Predicates = [isGFX90APlus] in {
765+
let SubtargetPredicate = HasGFX950Insts in {
766+
defm V_MFMA_LD_SCALE_B32 : VOP3PInst<"v_mfma_ld_scale_b32", VOP_MFMA_LD_SCALE>;
767+
}
768+
769+
let SubtargetPredicate = isGFX90APlus in {
761770
let is_gfx940_xdl = 1 in {
762771
defm V_MFMA_F32_32X32X4BF16_1K : MAIInst<"v_mfma_f32_32x32x4bf16_1k", "F32_V4I16_X32", int_amdgcn_mfma_f32_32x32x4bf16_1k>;
763772
defm V_MFMA_F32_16X16X4BF16_1K : MAIInst<"v_mfma_f32_16x16x4bf16_1k", "F32_V4I16_X16", int_amdgcn_mfma_f32_16x16x4bf16_1k>;
@@ -1796,6 +1805,8 @@ defm V_MFMA_F32_16X16X32_F16 : VOP3P_Real_MFMA_gfx950 <0x54, "v_mfma_f32_16x
17961805
defm V_MFMA_F32_32X32X16_F16 : VOP3P_Real_MFMA_gfx950 <0x55, "v_mfma_f32_32x32x16_f16">;
17971806
defm V_MFMA_F32_32X32X16_BF16 : VOP3P_Real_MFMA_gfx950 <0x37, "v_mfma_f32_32x32x16_bf16">;
17981807

1808+
defm V_MFMA_LD_SCALE_B32 : VOP3P_Real_vi <0x2c>;
1809+
17991810
defm V_MFMA_I32_32X32X16I8 : VOP3P_Real_MFMA_gfx940 <0x56, "v_mfma_i32_32x32x16_i8">;
18001811
defm V_MFMA_I32_16X16X32I8 : VOP3P_Real_MFMA_gfx940 <0x57, "v_mfma_i32_16x16x32_i8">;
18011812
let SubtargetPredicate = HasXF32Insts in {

llvm/lib/Target/AMDGPU/VOPInstructions.td

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ class VOP3Pe <bits<7> op, VOPProfile P> : Enc64 {
388388
bits<2> index_key_8bit;
389389
bits<1> index_key_16bit;
390390

391-
let Inst{7-0} = vdst;
391+
let Inst{7-0} = !if(P.HasDst, vdst, 0);
392392
let Inst{8} = !if(P.HasSrc0Mods, src0_modifiers{1}, 0); // neg_hi src0
393393
let Inst{9} = !if(P.HasSrc1Mods, src1_modifiers{1}, 0); // neg_hi src1
394394
let Inst{10} = !if(P.HasSrc2Mods, src2_modifiers{1}, 0); // neg_hi src2
@@ -1260,6 +1260,10 @@ def VOP3_OPSEL : VOP3Features<1, 1, 0, 0>;
12601260
def VOP3_PACKED : VOP3Features<1, 1, 1, 0>;
12611261
def VOP3_MAI : VOP3Features<0, 0, 0, 1>;
12621262

1263+
// Packed is misleading, but it enables the appropriate op_sel
1264+
// modifiers.
1265+
def VOP3P_LD_SCALE : VOP3Features<0, 1, 1, 0>;
1266+
12631267
class VOP3_Profile_Base<VOPProfile P, VOP3Features Features = VOP3_REGULAR> : VOPProfile<P.ArgVT> {
12641268

12651269
let HasClamp = !if(Features.HasClamp, 1, P.HasClamp);

llvm/test/MC/AMDGPU/mai-gfx950-err.s

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx950 %s 2>&1 | FileCheck --implicit-check-not=error: %s
2+
3+
v_mfma_ld_scale_b32 v0, 65
4+
// CHECK: :[[@LINE-1]]:25: error: literal operands are not supported
5+
6+
v_mfma_ld_scale_b32 65, v0
7+
// CHECK: :[[@LINE-1]]:21: error: literal operands are not supported
8+
9+
v_mfma_ld_scale_b32 65, 65
10+
// CHECK: :[[@LINE-1]]:25: error: literal operands are not supported
11+
12+
v_mfma_ld_scale_b32 s0, s1
13+
// CHECK: :[[@LINE-1]]:25: error: invalid operand (violates constant bus restrictions)
14+
15+
v_mfma_ld_scale_b32 v0, v0 clamp
16+
// CHECK: :[[@LINE-1]]:28: error: invalid operand for instruction
17+
18+
v_mfma_ld_scale_b32 v0, v0 neg_lo:[0,1]
19+
// CHECK: :[[@LINE-1]]:28: error: not a valid operand
20+
21+
v_mfma_ld_scale_b32 v0, v0 neg_lo:[1,1]
22+
// CHECK: :[[@LINE-1]]:28: error: not a valid operand
23+
24+
v_mfma_ld_scale_b32 v0, v0 neg_hi:[1,1]
25+
// CHECK: :[[@LINE-1]]:28: error: not a valid operand
26+
27+
v_mfma_ld_scale_b32 v0, v0 neg_hi:[0,1]
28+
// CHECK: :[[@LINE-1]]:28: error: not a valid operand
29+
30+
v_mfma_ld_scale_b32 v0, v0 neg_lo:[0,1] neg_hi:[0,1]
31+
// CHECK: :[[@LINE-1]]:28: error: not a valid operand

llvm/test/MC/AMDGPU/mai-gfx950.s

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,120 @@ v_mfma_f32_32x32x16_bf16 v[0:15], v[0:3], v[0:3], v[0:15] abid:1
158158
// GFX950: v_mfma_f32_32x32x16_bf16 a[0:15], a[0:3], a[0:3], a[0:15] cbsz:3 abid:1 ; encoding: [0x00,0x8b,0xb7,0xd3,0x00,0x01,0x02,0x1c]
159159
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
160160
v_mfma_f32_32x32x16_bf16 a[0:15], a[0:3], a[0:3], a[0:15] cbsz:3 abid:1
161+
162+
//===----------------------------------------------------------------------===//
163+
// v_mfma_ld_scale_b32
164+
//===----------------------------------------------------------------------===//
165+
166+
// GFX950: v_mfma_ld_scale_b32 v0, 64 ; encoding: [0x00,0x40,0xac,0xd3,0x00,0x81,0x01,0x18]
167+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
168+
v_mfma_ld_scale_b32 v0, 64
169+
170+
// GFX950: v_mfma_ld_scale_b32 64, v0 ; encoding: [0x00,0x40,0xac,0xd3,0xc0,0x00,0x02,0x18]
171+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
172+
v_mfma_ld_scale_b32 64, v0
173+
174+
// GFX950: v_mfma_ld_scale_b32 64, 64 ; encoding: [0x00,0x40,0xac,0xd3,0xc0,0x80,0x01,0x18]
175+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
176+
v_mfma_ld_scale_b32 64, 64
177+
178+
// GFX950: v_mfma_ld_scale_b32 s0, s0 ; encoding: [0x00,0x40,0xac,0xd3,0x00,0x00,0x00,0x18]
179+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
180+
v_mfma_ld_scale_b32 s0, s0
181+
182+
// GFX950: v_mfma_ld_scale_b32 s0, v0 ; encoding: [0x00,0x40,0xac,0xd3,0x00,0x00,0x02,0x18]
183+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
184+
v_mfma_ld_scale_b32 s0, v0
185+
186+
// GFX950: v_mfma_ld_scale_b32 v0, s0 ; encoding: [0x00,0x40,0xac,0xd3,0x00,0x01,0x00,0x18]
187+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
188+
v_mfma_ld_scale_b32 v0, s0
189+
190+
// GFX950: v_mfma_ld_scale_b32 vcc_lo, vcc_lo ; encoding: [0x00,0x40,0xac,0xd3,0x6a,0xd4,0x00,0x18]
191+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
192+
v_mfma_ld_scale_b32 vcc_lo, vcc_lo
193+
194+
// GFX950: v_mfma_ld_scale_b32 m0, m0 ; encoding: [0x00,0x40,0xac,0xd3,0x7c,0xf8,0x00,0x18]
195+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
196+
v_mfma_ld_scale_b32 m0, m0
197+
198+
// GFX950: v_mfma_ld_scale_b32 src_vccz, src_vccz ; encoding: [0x00,0x40,0xac,0xd3,0xfb,0xf6,0x01,0x18]
199+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
200+
v_mfma_ld_scale_b32 vccz, vccz
201+
202+
// GFX950: v_mfma_ld_scale_b32 src_execz, src_execz ; encoding: [0x00,0x40,0xac,0xd3,0xfc,0xf8,0x01,0x18]
203+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
204+
v_mfma_ld_scale_b32 execz, execz
205+
206+
// GFX950: v_mfma_ld_scale_b32 v0, v0 ; encoding: [0x00,0x40,0xac,0xd3,0x00,0x01,0x02,0x18]
207+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
208+
v_mfma_ld_scale_b32 v0, v0
209+
210+
// GFX950: v_mfma_ld_scale_b32 v1, v1 ; encoding: [0x00,0x40,0xac,0xd3,0x01,0x03,0x02,0x18]
211+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
212+
v_mfma_ld_scale_b32 v1, v1
213+
214+
// GFX950: v_mfma_ld_scale_b32 0, 0 ; encoding: [0x00,0x40,0xac,0xd3,0x80,0x00,0x01,0x18]
215+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
216+
v_mfma_ld_scale_b32 0, 0
217+
218+
// GFX950: v_mfma_ld_scale_b32 1, 0 ; encoding: [0x00,0x40,0xac,0xd3,0x81,0x00,0x01,0x18]
219+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
220+
v_mfma_ld_scale_b32 1, 0
221+
222+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[1,0] ; encoding: [0x00,0x48,0xac,0xd3,0x01,0x03,0x02,0x18]
223+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
224+
v_mfma_ld_scale_b32 v1, v1 op_sel:[1, 0]
225+
226+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] ; encoding: [0x00,0x50,0xac,0xd3,0x01,0x03,0x02,0x18]
227+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
228+
v_mfma_ld_scale_b32 v1, v1 op_sel:[0, 1]
229+
230+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[1,1] ; encoding: [0x00,0x58,0xac,0xd3,0x01,0x03,0x02,0x18]
231+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
232+
v_mfma_ld_scale_b32 v1, v1 op_sel:[1, 1]
233+
234+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel_hi:[1,0] ; encoding: [0x00,0x40,0xac,0xd3,0x01,0x03,0x02,0x08]
235+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
236+
v_mfma_ld_scale_b32 v1, v1 op_sel_hi:[1, 0]
237+
238+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel_hi:[0,1] ; encoding: [0x00,0x40,0xac,0xd3,0x01,0x03,0x02,0x10]
239+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
240+
v_mfma_ld_scale_b32 v1, v1 op_sel_hi:[0, 1]
241+
242+
// GFX950: v_mfma_ld_scale_b32 v1, v1 ; encoding: [0x00,0x40,0xac,0xd3,0x01,0x03,0x02,0x18]
243+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
244+
v_mfma_ld_scale_b32 v1, v1 op_sel_hi:[1, 1]
245+
246+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel_hi:[0,0] ; encoding: [0x00,0x40,0xac,0xd3,0x01,0x03,0x02,0x00]
247+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
248+
v_mfma_ld_scale_b32 v1, v1 op_sel:[0,0] op_sel_hi:[0,0]
249+
250+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[1,0] op_sel_hi:[1,0] ; encoding: [0x00,0x48,0xac,0xd3,0x01,0x03,0x02,0x08]
251+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
252+
v_mfma_ld_scale_b32 v1, v1 op_sel:[1,0] op_sel_hi:[1,0]
253+
254+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] op_sel_hi:[0,1] ; encoding: [0x00,0x50,0xac,0xd3,0x01,0x03,0x02,0x10]
255+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
256+
v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] op_sel_hi:[0,1]
257+
258+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] ; encoding: [0x00,0x50,0xac,0xd3,0x01,0x03,0x02,0x18]
259+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
260+
v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] op_sel_hi:[1,1]
261+
262+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] ; encoding: [0x00,0x50,0xac,0xd3,0x01,0x03,0x02,0x18]
263+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
264+
v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] op_sel_hi:[1,1]
265+
266+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[1,1] ; encoding: [0x00,0x58,0xac,0xd3,0x01,0x03,0x02,0x18]
267+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
268+
v_mfma_ld_scale_b32 v1, v1 op_sel:[1,1] op_sel_hi:[1,1]
269+
270+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[1,0] op_sel_hi:[0,1] ; encoding: [0x00,0x48,0xac,0xd3,0x01,0x03,0x02,0x10]
271+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
272+
v_mfma_ld_scale_b32 v1, v1 op_sel:[1,0] op_sel_hi:[0,1]
273+
274+
// GFX950: v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] op_sel_hi:[1,0] ; encoding: [0x00,0x50,0xac,0xd3,0x01,0x03,0x02,0x08]
275+
// ERR: :[[@LINE+1]]:{{[0-9]+}}: error: instruction not supported on this GPU
276+
v_mfma_ld_scale_b32 v1, v1 op_sel:[0,1] op_sel_hi:[1,0]
277+

0 commit comments

Comments
 (0)