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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318948
91177308-0d34-0410-b5e6-
96231b3b80d8
// 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.
if (Subtarget->inMicroMipsMode()) {
TS.emitDirectiveSetMicroMips();
TS.setUsesMicroMips();
+ TS.updateABIInfo(*Subtarget);
} else
TS.emitDirectiveSetNoMicroMips();
--- /dev/null
+; 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)
--- /dev/null
+# 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)