diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -937,6 +937,7 @@ SMLoc End, unsigned Size, StringRef Identifier, const InlineAsmIdentifierInfo &Info); + bool parseDirectiveArch(); bool parseDirectiveEven(SMLoc L); bool ParseDirectiveCode(StringRef IDVal, SMLoc L); @@ -3993,6 +3994,8 @@ bool X86AsmParser::ParseDirective(AsmToken DirectiveID) { MCAsmParser &Parser = getParser(); StringRef IDVal = DirectiveID.getIdentifier(); + if (IDVal.startswith(".arch")) + return parseDirectiveArch(); if (IDVal.startswith(".code")) return ParseDirectiveCode(IDVal, DirectiveID.getLoc()); else if (IDVal.startswith(".att_syntax")) { @@ -4047,6 +4050,12 @@ return true; } +bool X86AsmParser::parseDirectiveArch() { + // Ignore .arch for now. + getParser().parseStringToEndOfStatement(); + return false; +} + /// parseDirectiveEven /// ::= .even bool X86AsmParser::parseDirectiveEven(SMLoc L) { diff --git a/llvm/test/MC/X86/directive-arch.s b/llvm/test/MC/X86/directive-arch.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/X86/directive-arch.s @@ -0,0 +1,10 @@ +## We currently parse but ignore .arch directives. +# RUN: llvm-mc -triple=x86_64 %s | FileCheck /dev/null --implicit-check-not=.arch + +.arch i286 +.arch generic32 + +.arch .avx512vl +.arch .noavx512bw +.arch .nop +.arch .sse4.2