Skip to content

Commit

Permalink
[AArch64][SME] Fix LDR and STR asm parser
Browse files Browse the repository at this point in the history
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.

Reviewed By: david-arm

Differential Revision: https://reviews.llvm.org/D147617
  • Loading branch information
CarolineConcatto committed Apr 6, 2023
1 parent 55bbcbf commit ffa0a2e
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 0 deletions.
8 changes: 8 additions & 0 deletions llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5304,6 +5304,14 @@ bool AArch64AsmParser::validateInstruction(MCInst &Inst, SMLoc &IDLoc,
"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:
Expand Down
7 changes: 7 additions & 0 deletions llvm/test/MC/AArch64/SME/ldr-diagnostics.s
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,10 @@ ldr za[w12, #0], [x0, #0]
// 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]+}}:
7 changes: 7 additions & 0 deletions llvm/test/MC/AArch64/SME/str-diagnostics.s
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,10 @@ str za[w12, #0], [x0, #0]
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
// CHECK-NEXT: str za[w12, #0], [x0, #0]
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

// ------------------------------------------------------------------------- //
// Mismatch between offset and immediate
str za[w14, 6], [x10, #5, mul vl]
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, immediate and offset mismatch.
// CHECK-NEXT: str za[w14, 6], [x10, #5, mul vl]
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

0 comments on commit ffa0a2e

Please sign in to comment.