[PATCH] D147617: [AArch64][SME] Fix LDR and STR asm parser
Caroline via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 5 07:34:58 PDT 2023
CarolineConcatto created this revision.
Herald added subscribers: hiraditya, kristof.beyls.
Herald added a project: All.
CarolineConcatto requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
The LDR and STR instructions must have the same value for imm4(second operand)
and offset(fourth operand).
The disassembly guarantees that happens, but the Asm parser was not checking that.
This patch fixes that by checking if the second operand and fourth operand are
immediate and have the same value.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D147617
Files:
llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
llvm/test/MC/AArch64/SME/ldr-diagnostics.s
Index: llvm/test/MC/AArch64/SME/ldr-diagnostics.s
===================================================================
--- llvm/test/MC/AArch64/SME/ldr-diagnostics.s
+++ llvm/test/MC/AArch64/SME/ldr-diagnostics.s
@@ -51,3 +51,10 @@
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
// CHECK-NEXT: ldr za[w12, #0], [x0, #0]
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
+
+// ------------------------------------------------------------------------- //
+// Mismatch between offset and immediate
+ldr za[w14, 6], [x10, #5, mul vl]
+// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, immediate and offset mismatch.
+// CHECK-NEXT: ldr za[w14, 6], [x10, #5, mul vl]
+// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
Index: llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
===================================================================
--- llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -5304,6 +5304,14 @@
"is also a destination");
[[fallthrough]];
}
+ case AArch64::LDR_ZA:
+ case AArch64::STR_ZA: {
+ if (Inst.getOperand(2).isImm() && Inst.getOperand(4).isImm() &&
+ Inst.getOperand(2).getImm() != Inst.getOperand(4).getImm())
+ return Error(Loc[1],
+ "unpredictable instruction, immediate and offset mismatch.");
+ break;
+ }
case AArch64::LDPDi:
case AArch64::LDPQi:
case AArch64::LDPSi:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147617.511099.patch
Type: text/x-patch
Size: 1484 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230405/0c0a39f6/attachment.bin>
More information about the llvm-commits
mailing list