From ad4129706486ea2c7f71f7d9f8f7465b14ddc538 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 3 Feb 2024 16:40:47 -0800 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?= =?UTF-8?q?l=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.4 --- .../AArch64/AsmParser/AArch64AsmParser.cpp | 33 +++++++++++++++---- llvm/test/MC/AArch64/arm64-adr.s | 10 ++++++ llvm/test/MC/AArch64/arm64-branch-encoding.s | 10 ++++++ llvm/test/MC/AArch64/basic-a64-diagnostics.s | 8 +++++ 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp index e9d96f3b838d4..4e7c8f66d9d54 100644 --- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp +++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp @@ -4809,20 +4809,30 @@ bool AArch64AsmParser::parseOperand(OperandVector &Operands, bool isCondCode, return parseCondCode(Operands, invertCondCode); // If it's a register name, parse it. - if (!parseRegister(Operands)) + if (!parseRegister(Operands)) { + // Parse an optional shift/extend modifier. + AsmToken SavedTok = getTok(); + if (parseOptionalToken(AsmToken::Comma)) { + // The operand after the register may be a label (e.g. ADR/ADRP). Check + // such cases and don't report an error when