Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5330,6 +5330,15 @@ bool AMDGPUAsmParser::validateDS(const MCInst &Inst,
// DS_GWS opcodes must use even aligned registers.
bool AMDGPUAsmParser::validateGWS(const MCInst &Inst,
const OperandVector &Operands) {
// Disallow "nogds".
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How did the "no" parse in the first place?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AMDGPUAsmParser::parseCustomOperand() calls parseNamedBit() to parse operands such as "gds". Both "gds" and "nogds" are parsed in the latter, and both ends up as an AMDGPUAsmParser::Immediate. The only difference is "gds" has the value 1 while "nogds" 0.

// In ds_gws_* instructions, gds is always the last operand.
auto GDSOprnd = static_cast<AMDGPUOperand &>(*Operands.back());
assert(GDSOprnd.isGDS());
if (GDSOprnd.getImm() == 0) {
Error(GDSOprnd.getStartLoc(), "nogds is not allowed");
return false;
}

if (!getFeatureBits()[AMDGPU::FeatureGFX90AInsts])
return true;

Expand Down
38 changes: 38 additions & 0 deletions llvm/test/MC/AMDGPU/gfx10_asm_ds_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize32 %s 2>&1 | FileCheck --implicit-check-not=error: %s
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize32 %s 2>&1 | FileCheck --implicit-check-not=error: %s
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 %s 2>&1 | FileCheck --implicit-check-not=error: %s

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some instructions all "nogds", e.g., ds_add_u32. When "nogds" is given, the gds bit is cleared. However, the printer does not print "nogds".

// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize64 %s 2>&1 | FileCheck --implicit-check-not=error: %s

ds_gws_sema_release_all nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_release_all offset:4660 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v0 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v0 offset:0 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v0 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v0 offset:4660 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p offset:0 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v0 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v0 offset:0 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed
37 changes: 37 additions & 0 deletions llvm/test/MC/AMDGPU/gfx11_asm_ds_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1100 %s 2>&1 | FileCheck --implicit-check-not=error: %s

ds_gws_barrier v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_release_all nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_release_all offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed
37 changes: 37 additions & 0 deletions llvm/test/MC/AMDGPU/gfx7_asm_ds_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=bonaire %s 2>&1 | FileCheck --implicit-check-not=error: %s

ds_gws_sema_release_all offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_release_all nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v255 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed
37 changes: 37 additions & 0 deletions llvm/test/MC/AMDGPU/gfx8_asm_ds_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=tonga %s 2>&1 | FileCheck --implicit-check-not=error: %s

ds_gws_sema_release_all offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_release_all nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v255 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed
37 changes: 37 additions & 0 deletions llvm/test/MC/AMDGPU/gfx9_asm_ds_err.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// RUN: not llvm-mc -triple=amdgcn -mcpu=gfx900 %s 2>&1 | FileCheck --implicit-check-not=error: %s

ds_gws_sema_release_all offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_release_all nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_init v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_v nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_br v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_sema_p nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v1 offset:65535 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed

ds_gws_barrier v1 nogds
// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: nogds is not allowed