Skip to content

Commit

Permalink
[AArch64][MC] Reject "add x0, x1, w2, lsl triSYCL#1" etc.
Browse files Browse the repository at this point in the history
Looks like just a minor oversight in the parsing code.

Fixes https://bugs.llvm.org/show_bug.cgi?id=41504.

Differential Revision: https://reviews.llvm.org/D60840

llvm-svn: 359855
  • Loading branch information
efriedma-quic committed May 3, 2019
1 parent 5e32805 commit 7238353
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
8 changes: 5 additions & 3 deletions llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1270,9 +1270,11 @@ class AArch64Operand : public MCParsedAsmOperand {
bool isExtend64() const {
if (!isExtend())
return false;
// UXTX and SXTX require a 64-bit source register (the ExtendLSL64 class).
// Make sure the extend expects a 32-bit source register.
AArch64_AM::ShiftExtendType ET = getShiftExtendType();
return ET != AArch64_AM::UXTX && ET != AArch64_AM::SXTX;
return ET == AArch64_AM::UXTB || ET == AArch64_AM::SXTB ||
ET == AArch64_AM::UXTH || ET == AArch64_AM::SXTH ||
ET == AArch64_AM::UXTW || ET == AArch64_AM::SXTW;
}

bool isExtendLSL64() const {
Expand Down Expand Up @@ -4189,7 +4191,7 @@ bool AArch64AsmParser::showMatchError(SMLoc Loc, unsigned ErrCode,
return Error(Loc, "expected AArch64 condition code");
case Match_AddSubRegExtendSmall:
return Error(Loc,
"expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]");
"expected '[su]xt[bhw]' with optional integer in range [0, 4]");
case Match_AddSubRegExtendLarge:
return Error(Loc,
"expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]");
Expand Down
8 changes: 6 additions & 2 deletions llvm/test/MC/AArch64/basic-a64-diagnostics.s
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,17 @@
// Mismatched final register and extend
add x2, x3, x5, sxtb
add x2, x4, w2, uxtx
add x2, x4, w2, lsl #3
add w5, w7, x9, sxtx
// CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
// CHECK-ERROR: add x2, x3, x5, sxtb
// CHECK-ERROR: ^
// CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
// CHECK-ERROR: error: expected '[su]xt[bhw]' with optional integer in range [0, 4]
// CHECK-ERROR: add x2, x4, w2, uxtx
// CHECK-ERROR: ^
// CHECK-ERROR: error: expected '[su]xt[bhw]' with optional integer in range [0, 4]
// CHECK-ERROR: add x2, x4, w2, lsl #3
// CHECK-ERROR: ^
// CHECK-ERROR: error: expected compatible register, symbol or integer in range [0, 4095]
// CHECK-ERROR: add w5, w7, x9, sxtx
// CHECK-ERROR: ^
Expand All @@ -26,7 +30,7 @@
// CHECK-ERROR: error: expected integer shift amount
// CHECK-ERROR: add x9, x10, w11, uxtb #-1
// CHECK-ERROR: ^
// CHECK-ERROR: error: expected '[su]xt[bhw]' or 'lsl' with optional integer in range [0, 4]
// CHECK-ERROR: error: expected '[su]xt[bhw]' with optional integer in range [0, 4]
// CHECK-ERROR: add x3, x5, w7, uxtb #5
// CHECK-ERROR: ^
// CHECK-ERROR: error: expected 'sxtx' 'uxtx' or 'lsl' with optional integer in range [0, 4]
Expand Down

0 comments on commit 7238353

Please sign in to comment.