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