diff options
| author | Aleksandar Beserminji <Aleksandar.Beserminji@mips.com> | 2017-11-24 14:00:47 +0000 |
|---|---|---|
| committer | Aleksandar Beserminji <Aleksandar.Beserminji@mips.com> | 2017-11-24 14:00:47 +0000 |
| commit | 590f0793e8c7f25a7d993031436928823cd2c95a (patch) | |
| tree | e5c79e6bbd8327ed4c47227190cfdc10dd82b9c4 | |
| parent | dd2f1c993e1f870fce490e47e5f9ef8acf23ada1 (diff) | |
| download | bcm5719-llvm-590f0793e8c7f25a7d993031436928823cd2c95a.tar.gz bcm5719-llvm-590f0793e8c7f25a7d993031436928823cd2c95a.zip | |
[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
| -rw-r--r-- | llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MipsAsmPrinter.cpp | 1 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Mips/micromips-ase-function-attribute.ll | 11 | ||||
| -rw-r--r-- | llvm/test/MC/Mips/micromips-ase-directive.s | 10 |
4 files changed, 25 insertions, 1 deletions
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 8da7dfbd4de..4db5e3c8cca 100644 --- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/llvm/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/llvm/lib/Target/Mips/MipsAsmPrinter.cpp b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp index c2869bd7ecb..fbf7b5e28b7 100644 --- a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/llvm/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/llvm/test/CodeGen/Mips/micromips-ase-function-attribute.ll b/llvm/test/CodeGen/Mips/micromips-ase-function-attribute.ll new file mode 100644 index 00000000000..bbb6ff56ea9 --- /dev/null +++ b/llvm/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/llvm/test/MC/Mips/micromips-ase-directive.s b/llvm/test/MC/Mips/micromips-ase-directive.s new file mode 100644 index 00000000000..8cdcdcc0c56 --- /dev/null +++ b/llvm/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) |

