diff options
| author | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-07-21 10:45:47 +0000 |
|---|---|---|
| committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2014-07-21 10:45:47 +0000 |
| commit | d7c279604551c091290fc8e5dadb26142ebef459 (patch) | |
| tree | 623e024dcd8c72ee6fe3044cfc911a794448f8ae | |
| parent | d9ed09f7a5f149ea3ed7904f83ed70bf12963842 (diff) | |
| download | bcm5719-llvm-d7c279604551c091290fc8e5dadb26142ebef459.tar.gz bcm5719-llvm-d7c279604551c091290fc8e5dadb26142ebef459.zip | |
[mips] Do not emit '.module [no]oddspreg' unless we really need to.
We now emit this directive when we need to contradict the default value (e.g.
-mno-odd-spreg is given) or an option changed the default value (e.g. -mfpxx
is given).
This restores support for the currently available head of binutils. However,
at this point binutils 2.24 is still not sufficient since it does not support
'.module fp=...'.
llvm-svn: 213511
| -rw-r--r-- | llvm/lib/Target/Mips/MipsAsmPrinter.cpp | 11 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Mips/no-odd-spreg.ll | 12 |
2 files changed, 16 insertions, 7 deletions
diff --git a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp index 54a97b55f30..e94519e7483 100644 --- a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp @@ -710,9 +710,14 @@ void MipsAsmPrinter::EmitStartOfAsmFile(Module &M) { getTargetStreamer().updateABIInfo(*Subtarget); getTargetStreamer().emitDirectiveModuleFP(); - if (Subtarget->isABI_O32()) - getTargetStreamer().emitDirectiveModuleOddSPReg(Subtarget->useOddSPReg(), - Subtarget->isABI_O32()); + // If we are targeting O32 then we must emit a '.module [no]oddspreg' ... + if (Subtarget->isABI_O32()) { + // ... but don't emit it unless we are contradicting the default or an + // option has changed the default (i.e. FPXX). + if (!Subtarget->useOddSPReg() || Subtarget->isABI_FPXX()) + getTargetStreamer().emitDirectiveModuleOddSPReg(Subtarget->useOddSPReg(), + Subtarget->isABI_O32()); + } } void MipsAsmPrinter::EmitJal(MCSymbol *Symbol) { diff --git a/llvm/test/CodeGen/Mips/no-odd-spreg.ll b/llvm/test/CodeGen/Mips/no-odd-spreg.ll index b42ed6aaa40..572e940bc46 100644 --- a/llvm/test/CodeGen/Mips/no-odd-spreg.ll +++ b/llvm/test/CodeGen/Mips/no-odd-spreg.ll @@ -1,10 +1,14 @@ -; RUN: llc -march=mipsel -mcpu=mips32 < %s | FileCheck %s -check-prefix=ALL -check-prefix=ODDSPREG +; RUN: llc -march=mipsel -mcpu=mips32 < %s | FileCheck %s -check-prefix=ALL -check-prefix=ODDSPREG -check-prefix=ODDSPREG-NO-EMIT ; RUN: llc -march=mipsel -mcpu=mips32 -mattr=+nooddspreg < %s | FileCheck %s -check-prefix=ALL -check-prefix=NOODDSPREG -; RUN: llc -march=mipsel -mcpu=mips32r6 -mattr=fp64 < %s | FileCheck %s -check-prefix=ALL -check-prefix=ODDSPREG +; RUN: llc -march=mipsel -mcpu=mips32r6 -mattr=fp64 < %s | FileCheck %s -check-prefix=ALL -check-prefix=ODDSPREG -check-prefix=ODDSPREG-NO-EMIT ; RUN: llc -march=mipsel -mcpu=mips32r6 -mattr=fp64,+nooddspreg < %s | FileCheck %s -check-prefix=ALL -check-prefix=NOODDSPREG +; RUN: llc -march=mipsel -mcpu=mips32r6 -mattr=fpxx,-nooddspreg < %s | FileCheck %s -check-prefix=ALL -check-prefix=ODDSPREG -check-prefix=ODDSPREG-EMIT -; ODDSPREG: .module oddspreg -; NOODDSPREG: .module nooddspreg +; We don't emit a directive unless we need to. This is to support versions of +; GAS which do not support the directive. +; ODDSPREG-EMIT: .module oddspreg +; ODDSPREG-NO-EMIT-NOT: .module oddspreg +; NOODDSPREG: .module nooddspreg define float @two_floats(float %a) { entry: |

