Skip to content

Commit 911961c

Browse files
committed
[AMDGPU][MC][GFX10] Improved dpp8 errors handling
Reviewers: rampitec Differential Revision: https://reviews.llvm.org/D94756
1 parent 9bf843b commit 911961c

File tree

2 files changed

+49
-15
lines changed

2 files changed

+49
-15
lines changed

llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7260,25 +7260,23 @@ OperandMatchResultTy AMDGPUAsmParser::parseDPP8(OperandVector &Operands) {
72607260

72617261
int64_t Sels[8];
72627262

7263-
if (!trySkipToken(AsmToken::LBrac))
7263+
if (!skipToken(AsmToken::LBrac, "expected an opening square bracket"))
72647264
return MatchOperand_ParseFail;
72657265

7266-
if (getParser().parseAbsoluteExpression(Sels[0]))
7267-
return MatchOperand_ParseFail;
7268-
if (0 > Sels[0] || 7 < Sels[0])
7269-
return MatchOperand_ParseFail;
7270-
7271-
for (size_t i = 1; i < 8; ++i) {
7272-
if (!trySkipToken(AsmToken::Comma))
7266+
for (size_t i = 0; i < 8; ++i) {
7267+
if (i > 0 && !skipToken(AsmToken::Comma, "expected a comma"))
72737268
return MatchOperand_ParseFail;
72747269

7270+
SMLoc Loc = getLoc();
72757271
if (getParser().parseAbsoluteExpression(Sels[i]))
72767272
return MatchOperand_ParseFail;
7277-
if (0 > Sels[i] || 7 < Sels[i])
7273+
if (0 > Sels[i] || 7 < Sels[i]) {
7274+
Error(Loc, "expected a 3-bit value");
72787275
return MatchOperand_ParseFail;
7276+
}
72797277
}
72807278

7281-
if (!trySkipToken(AsmToken::RBrac))
7279+
if (!skipToken(AsmToken::RBrac, "expected a closing square bracket"))
72827280
return MatchOperand_ParseFail;
72837281

72847282
unsigned DPP8 = 0;

llvm/test/MC/AMDGPU/gfx10_err_pos.s

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,19 @@ s_atomic_swap s5, s[2:3], 0x1FFFFF
115115
// CHECK-NEXT:{{^}}s_atomic_swap s5, s[2:3], 0x1FFFFF
116116
// CHECK-NEXT:{{^}} ^
117117

118+
//==============================================================================
119+
// expected a 3-bit value
120+
121+
v_mov_b32_dpp v5, v1 dpp8:[-1,1,2,3,4,5,6,7]
122+
// CHECK: error: expected a 3-bit value
123+
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[-1,1,2,3,4,5,6,7]
124+
// CHECK-NEXT:{{^}} ^
125+
126+
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,8,4,5,6,7]
127+
// CHECK: error: expected a 3-bit value
128+
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,8,4,5,6,7]
129+
// CHECK-NEXT:{{^}} ^
130+
118131
//==============================================================================
119132
// expected a 5-character mask
120133

@@ -192,6 +205,11 @@ v_pk_add_u16 v1, v2, v3 op_sel:[0,0,0,0,0]
192205
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[0,0,0,0,0]
193206
// CHECK-NEXT:{{^}} ^
194207

208+
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7)
209+
// CHECK: error: expected a closing square bracket
210+
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6,7)
211+
// CHECK-NEXT:{{^}} ^
212+
195213
//==============================================================================
196214
// expected a colon
197215

@@ -228,6 +246,11 @@ v_pk_add_u16 v1, v2, v3 op_sel:[0 0]
228246
// CHECK-NEXT:{{^}}v_pk_add_u16 v1, v2, v3 op_sel:[0 0]
229247
// CHECK-NEXT:{{^}} ^
230248

249+
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6]
250+
// CHECK: error: expected a comma
251+
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,3,4,5,6]
252+
// CHECK-NEXT:{{^}} ^
253+
231254
//==============================================================================
232255
// expected a comma or a closing parenthesis
233256

@@ -351,6 +374,11 @@ tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:BUF_NUM_FORMAT_UINT]
351374
// CHECK-NEXT:{{^}}tbuffer_store_format_xyzw v[1:4], off, ttmp[4:7], s0 format:BUF_NUM_FORMAT_UINT]
352375
// CHECK-NEXT:{{^}} ^
353376

377+
v_mov_b32_dpp v5, v1 dpp8:[0,1,2,x,4,5,6,7]
378+
// CHECK: error: expected absolute expression
379+
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:[0,1,2,x,4,5,6,7]
380+
// CHECK-NEXT:{{^}} ^
381+
354382
//==============================================================================
355383
// expected a message name or an absolute expression
356384

@@ -383,6 +411,14 @@ ds_swizzle_b32 v8, v2 offset:SWZ(QUAD_PERM, 0, 1, 2, 3)
383411
// CHECK-NEXT:{{^}}ds_swizzle_b32 v8, v2 offset:SWZ(QUAD_PERM, 0, 1, 2, 3)
384412
// CHECK-NEXT:{{^}} ^
385413

414+
//==============================================================================
415+
// expected a hwreg macro or an absolute expression
416+
417+
s_setreg_b32 undef, s2
418+
// CHECK: error: expected a hwreg macro or an absolute expression
419+
// CHECK-NEXT:{{^}}s_setreg_b32 undef, s2
420+
// CHECK-NEXT:{{^}} ^
421+
386422
//==============================================================================
387423
// expected an 11-bit unsigned offset
388424

@@ -415,12 +451,12 @@ v_mov_b32_sdwa v1, sext(u)
415451
// CHECK-NEXT:{{^}} ^
416452

417453
//==============================================================================
418-
// expected a hwreg macro or an absolute expression
454+
// expected an opening square bracket
419455

420-
s_setreg_b32 undef, s2
421-
// CHECK: error: expected a hwreg macro or an absolute expression
422-
// CHECK-NEXT:{{^}}s_setreg_b32 undef, s2
423-
// CHECK-NEXT:{{^}} ^
456+
v_mov_b32_dpp v5, v1 dpp8:(0,1,2,3,4,5,6,7)
457+
// CHECK: error: expected an opening square bracket
458+
// CHECK-NEXT:{{^}}v_mov_b32_dpp v5, v1 dpp8:(0,1,2,3,4,5,6,7)
459+
// CHECK-NEXT:{{^}} ^
424460

425461
//==============================================================================
426462
// expected an operation name or an absolute expression

0 commit comments

Comments
 (0)