Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp =================================================================== --- lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -2273,8 +2273,10 @@ // We know we emitted an instruction on the MER_NotAMacro or MER_Success path. // If we're in microMIPS mode then we must also set EF_MIPS_MICROMIPS. - if (inMicroMipsMode()) + if (inMicroMipsMode()) { TOut.setUsesMicroMips(); + TOut.updateABIInfo(*this); + } // If this instruction has a delay slot and .set reorder is active, // emit a NOP after it. Index: lib/Target/Mips/MipsAsmPrinter.cpp =================================================================== --- lib/Target/Mips/MipsAsmPrinter.cpp +++ lib/Target/Mips/MipsAsmPrinter.cpp @@ -361,6 +361,7 @@ if (Subtarget->inMicroMipsMode()) { TS.emitDirectiveSetMicroMips(); TS.setUsesMicroMips(); + TS.updateABIInfo(*Subtarget); } else TS.emitDirectiveSetNoMicroMips(); Index: test/CodeGen/Mips/micromips-ase-function-attribute.ll =================================================================== --- /dev/null +++ test/CodeGen/Mips/micromips-ase-function-attribute.ll @@ -0,0 +1,11 @@ +; RUN: llc -mtriple=mips-unknown-linux -filetype=obj %s -o - | \ +; RUN: llvm-readobj -mips-abi-flags | \ +; RUN: FileCheck --check-prefix=ASE-MICROMIPS %s + +define void @_Z3foov() #0 { +entry: + ret void +} +attributes #0 = { "micromips" } + +; ASE-MICROMIPS: microMIPS (0x800) Index: test/MC/Mips/micromips-ase-directive.s =================================================================== --- /dev/null +++ test/MC/Mips/micromips-ase-directive.s @@ -0,0 +1,10 @@ +# RUN: llvm-mc -triple=mips-unknown-linux -filetype=obj %s -o - | \ +# RUN: llvm-readobj -mips-abi-flags | \ +# RUN: FileCheck --check-prefix=ASE-MICROMIPS %s + + .set micromips + .ent _Z3foov +_Z3foov: + addiu $sp, $sp, -8 + +# ASE-MICROMIPS: microMIPS (0x800)