Index: llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h =================================================================== --- llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h +++ llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h @@ -478,7 +478,7 @@ // For actions that have to be performed before a label is emitted virtual void doBeforeLabelEmit(MCSymbol *Symbol) {} - + virtual void onLabelParsed(MCSymbol *Symbol) {} /// Ensure that all previously parsed instructions have been emitted to the @@ -492,10 +492,10 @@ } // For any initialization at the beginning of parsing. - virtual void onBeginOfFile() {} + virtual void onBeginOfFile(bool NoFinalize) {} // For any checks or cleanups at the end of parsing. - virtual void onEndOfFile() {} + virtual void onEndOfFile(bool NoFinalize) {} }; } // end namespace llvm Index: llvm/lib/MC/MCParser/AsmParser.cpp =================================================================== --- llvm/lib/MC/MCParser/AsmParser.cpp +++ llvm/lib/MC/MCParser/AsmParser.cpp @@ -975,7 +975,7 @@ (void)InsertResult; } - getTargetParser().onBeginOfFile(); + getTargetParser().onBeginOfFile(NoFinalize); // While we have input, parse each statement. while (Lexer.isNot(AsmToken::Eof)) { @@ -997,7 +997,7 @@ eatToEndOfStatement(); } - getTargetParser().onEndOfFile(); + getTargetParser().onEndOfFile(NoFinalize); printPendingErrors(); // All errors should have been emitted. Index: llvm/lib/MC/MCParser/MasmParser.cpp =================================================================== --- llvm/lib/MC/MCParser/MasmParser.cpp +++ llvm/lib/MC/MCParser/MasmParser.cpp @@ -1344,7 +1344,7 @@ (void)InsertResult; } - getTargetParser().onBeginOfFile(); + getTargetParser().onBeginOfFile(NoFinalize); // While we have input, parse each statement. while (Lexer.isNot(AsmToken::Eof) || @@ -1371,7 +1371,7 @@ eatToEndOfStatement(); } - getTargetParser().onEndOfFile(); + getTargetParser().onEndOfFile(NoFinalize); printPendingErrors(); // All errors should have been emitted. Index: llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp =================================================================== --- llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -1585,7 +1585,7 @@ void lex(); public: - void onBeginOfFile() override; + void onBeginOfFile(bool NoFinalize) override; OperandMatchResultTy parseOptionalOperand(OperandVector &Operands); OperandMatchResultTy parseOptionalOpr(OperandVector &Operands); @@ -7353,7 +7353,7 @@ {"abid", AMDGPUOperand::ImmTyABID, false, nullptr} }; -void AMDGPUAsmParser::onBeginOfFile() { +void AMDGPUAsmParser::onBeginOfFile(bool NoFinalize) { if (!getParser().getStreamer().getTargetStreamer() || getSTI().getTargetTriple().getArch() == Triple::r600) return; Index: llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp =================================================================== --- llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp +++ llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp @@ -251,6 +251,11 @@ const MCObjectFileInfo *MOFI = Parser.getContext().getObjectFileInfo(); ParserOptions.IsPicEnabled = MOFI->isPositionIndependent(); } + + void onBeginOfFile(bool NoFinalize) override { + if (!NoFinalize) + getTargetStreamer().emitTargetAttributes(*STI); + } }; /// RISCVOperand - Instances of this class represent a parsed machine Index: llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp =================================================================== --- llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp +++ llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp @@ -1127,7 +1127,7 @@ getStreamer().emitELFSize(LastFunctionLabel, Expr); } - void onEndOfFile() override { ensureEmptyNestingStack(); } + void onEndOfFile(bool NoFinalize) override { ensureEmptyNestingStack(); } }; } // end anonymous namespace Index: llvm/test/MC/RISCV/attribute-with-insts-option.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/attribute-with-insts-option.s @@ -0,0 +1,28 @@ +## Test -mattr= option effects. +## We do not provide '.attribute arch'. + +# RUN: llvm-mc -triple riscv32 -filetype=obj -mattr=+m -mattr=+a -mattr=+d -mattr=+c %s \ +# RUN: | llvm-objdump --triple=riscv32 -d -M no-aliases - \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s + +# RUN: llvm-mc -triple riscv64 -filetype=obj -mattr=+m -mattr=+a -mattr=+d -mattr=+c %s \ +# RUN: | llvm-objdump --triple=riscv64 -d -M no-aliases - \ +# RUN: | FileCheck -check-prefix=CHECK-INST %s + +# CHECK-INST: lr.w t0, (t1) +lr.w t0, (t1) + +# CHECK-INST: c.addi a3, -32 +c.addi a3, -32 + +# CHECK-INST: fmadd.d fa0, fa1, fa2, fa3, dyn +fmadd.d f10, f11, f12, f13, dyn + +# CHECK-INST: fmadd.s fa0, fa1, fa2, fa3, dyn +fmadd.s f10, f11, f12, f13, dyn + +# CHECK-INST: addi ra, sp, 2 +addi ra, sp, 2 + +# CHECK-INST: mul a4, ra, s0 +mul a4, ra, s0 Index: llvm/test/MC/RISCV/fde-reloc.s =================================================================== --- llvm/test/MC/RISCV/fde-reloc.s +++ llvm/test/MC/RISCV/fde-reloc.s @@ -11,7 +11,7 @@ ret .cfi_endproc -# CHECK: Section (4) .rela.eh_frame { +# CHECK: Section (5) .rela.eh_frame { # CHECK-NEXT: 0x1C R_RISCV_32_PCREL - 0x0 # CHECK-NEXT: 0x20 R_RISCV_ADD32 - 0x0 # CHECK-NEXT: 0x20 R_RISCV_SUB32 - 0x0 Index: llvm/test/MC/RISCV/rvf-user-csr-names.s =================================================================== --- llvm/test/MC/RISCV/rvf-user-csr-names.s +++ llvm/test/MC/RISCV/rvf-user-csr-names.s @@ -3,7 +3,7 @@ # RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+f < %s \ # RUN: | llvm-objdump -d --mattr=+f - \ # RUN: | FileCheck -check-prefix=CHECK-INST-ALIAS %s -# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+f < %s \ +# RUN: llvm-mc -filetype=obj -triple riscv32 < %s \ # RUN: | llvm-objdump -d - \ # RUN: | FileCheck -check-prefix=CHECK-INST-ALIAS-NO-F %s # @@ -12,7 +12,7 @@ # RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+f < %s \ # RUN: | llvm-objdump -d --mattr=+f - \ # RUN: | FileCheck -check-prefix=CHECK-INST-ALIAS %s -# RUN: llvm-mc -filetype=obj -triple riscv64 -mattr=+f < %s \ +# RUN: llvm-mc -filetype=obj -triple riscv64 < %s \ # RUN: | llvm-objdump -d - \ # RUN: | FileCheck -check-prefix=CHECK-INST-ALIAS-NO-F %s