[mips] Set microMIPS ASE flag

This patch fixes an issue where microMIPS ASE flag is not set
when a function has micromips attribute or when .set micromips
directive is used.

Differential Revision: https://reviews.llvm.org/D40316

llvm-svn: 318948
This commit is contained in:
Aleksandar Beserminji 2017-11-24 14:00:47 +00:00
parent dd2f1c993e
commit 590f0793e8
4 changed files with 25 additions and 1 deletions

View File

@ -2273,8 +2273,10 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, SMLoc IDLoc,
// 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.

View File

@ -361,6 +361,7 @@ void MipsAsmPrinter::EmitFunctionEntryLabel() {
if (Subtarget->inMicroMipsMode()) {
TS.emitDirectiveSetMicroMips();
TS.setUsesMicroMips();
TS.updateABIInfo(*Subtarget);
} else
TS.emitDirectiveSetNoMicroMips();

View File

@ -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)

View File

@ -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)