diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp index a640e63b5df8..715cff72dcab 100644 --- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp +++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp @@ -121,6 +121,7 @@ class PPCAsmParser : public MCTargetAsmParser { bool ParseDirectiveMachine(SMLoc L); bool ParseDirectiveAbiVersion(SMLoc L); bool ParseDirectiveLocalEntry(SMLoc L); + bool ParseGNUAttribute(SMLoc L); bool MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, OperandVector &Operands, MCStreamer &Out, @@ -1605,6 +1606,8 @@ bool PPCAsmParser::ParseDirective(AsmToken DirectiveID) { ParseDirectiveAbiVersion(DirectiveID.getLoc()); else if (IDVal == ".localentry") ParseDirectiveLocalEntry(DirectiveID.getLoc()); + else if (IDVal.startswith(".gnu_attribute")) + ParseGNUAttribute(DirectiveID.getLoc()); else return true; return false; @@ -1720,7 +1723,16 @@ bool PPCAsmParser::ParseDirectiveLocalEntry(SMLoc L) { return false; } +bool PPCAsmParser::ParseGNUAttribute(SMLoc L) { + int64_t Tag; + int64_t IntegerValue; + if (!getParser().parseGNUAttribute(L, Tag, IntegerValue)) + return false; + getParser().getStreamer().emitGNUAttribute(Tag, IntegerValue); + + return true; +} /// Force static initialization. extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializePowerPCAsmParser() { diff --git a/llvm/test/MC/PowerPC/gnu-attribute.s b/llvm/test/MC/PowerPC/gnu-attribute.s new file mode 100644 index 000000000000..98a558d52c6f --- /dev/null +++ b/llvm/test/MC/PowerPC/gnu-attribute.s @@ -0,0 +1,11 @@ +# RUN: llvm-mc -triple powerpc64-unknown-linux-gnu < %s | FileCheck %s +# RUN: llvm-mc -triple powerpc64le-unknown-linux-gnu < %s | FileCheck %s + + .text +add: + add 3, 4, 3 + blr + .gnu_attribute 4, 13 + +# CHECK-LABEL: add: +# CHECK: .gnu_attribute 4, 13