[PATCH] D60840: [AArch64][MC] Reject "add x0, x1, w2, lsl #1" etc.
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 17 14:53:39 PDT 2019
efriedma created this revision.
efriedma added reviewers: ostannard, aemerson, t.p.northover, kristof.beyls.
Herald added subscribers: llvm-commits, javed.absar.
Herald added a project: LLVM.
Looks like just a minor oversight in the parsing code.
Fixes https://bugs.llvm.org/show_bug.cgi?id=41504.
Repository:
rL LLVM
https://reviews.llvm.org/D60840
Files:
lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
test/MC/AArch64/basic-a64-diagnostics.s
Index: test/MC/AArch64/basic-a64-diagnostics.s
===================================================================
--- test/MC/AArch64/basic-a64-diagnostics.s
+++ test/MC/AArch64/basic-a64-diagnostics.s
@@ -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: ^
@@ -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]
Index: lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
===================================================================
--- lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -1271,9 +1271,11 @@
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 {
@@ -4199,7 +4201,7 @@
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]");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60840.195633.patch
Type: text/x-patch
Size: 2990 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190417/fe0f08cc/attachment.bin>
More information about the llvm-commits
mailing list