From: Aleksandar Beserminji Date: Fri, 24 Nov 2017 14:00:47 +0000 (+0000) Subject: [mips] Set microMIPS ASE flag X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba397bccd43978b23da650edd04ff0bab4933217;p=llvm [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318948 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 8da7dfbd4de..4db5e3c8cca 100644 --- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -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. diff --git a/lib/Target/Mips/MipsAsmPrinter.cpp b/lib/Target/Mips/MipsAsmPrinter.cpp index c2869bd7ecb..fbf7b5e28b7 100644 --- a/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/lib/Target/Mips/MipsAsmPrinter.cpp @@ -361,6 +361,7 @@ void MipsAsmPrinter::EmitFunctionEntryLabel() { if (Subtarget->inMicroMipsMode()) { TS.emitDirectiveSetMicroMips(); TS.setUsesMicroMips(); + TS.updateABIInfo(*Subtarget); } else TS.emitDirectiveSetNoMicroMips(); diff --git a/test/CodeGen/Mips/micromips-ase-function-attribute.ll b/test/CodeGen/Mips/micromips-ase-function-attribute.ll new file mode 100644 index 00000000000..bbb6ff56ea9 --- /dev/null +++ b/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) diff --git a/test/MC/Mips/micromips-ase-directive.s b/test/MC/Mips/micromips-ase-directive.s new file mode 100644 index 00000000000..8cdcdcc0c56 --- /dev/null +++ b/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)