MIPS: fix build from IR files, nan2008 and FpAbi
When we use llc or lld to compiler IR files, the features +nan2008 and +fpxx/+fp64 are not used. Thus wrong format files are produced. In IR files, the attributes are only set for function while not the whole compile units. So we output `.nan 2008` and `.module fp=xx/64` before every function. `isFPXXDefault`: for o32, the FPXX should always be the default, no matter about the vendors. Of course some distributions with FP64 default enabled should be listed explicit. Let's add them in future if we know about one. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D138179
This commit is contained in:
parent
92619956eb
commit
9739bb81ae
@ -467,11 +467,6 @@ bool mips::isFP64ADefault(const llvm::Triple &Triple, StringRef CPUName) {
|
||||
|
||||
bool mips::isFPXXDefault(const llvm::Triple &Triple, StringRef CPUName,
|
||||
StringRef ABIName, mips::FloatABI FloatABI) {
|
||||
if (Triple.getVendor() != llvm::Triple::ImaginationTechnologies &&
|
||||
Triple.getVendor() != llvm::Triple::MipsTechnologies &&
|
||||
!Triple.isAndroid())
|
||||
return false;
|
||||
|
||||
if (ABIName != "32")
|
||||
return false;
|
||||
|
||||
|
||||
@ -196,7 +196,7 @@
|
||||
// RUN: %clang -target mips-linux-gnu -mno-mips16 -mips16 -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
// RUN: | FileCheck -check-prefix=MIPS-16 %s
|
||||
// MIPS-16: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mips16"
|
||||
// MIPS-16: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mfpxx" "-mips16"
|
||||
//
|
||||
// RUN: %clang -target mips-linux-gnu -mips16 -mno-mips16 -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
@ -207,7 +207,7 @@
|
||||
// RUN: %clang -target mips-linux-gnu -mno-micromips -mmicromips -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
// RUN: | FileCheck -check-prefix=MIPS-MICRO %s
|
||||
// MIPS-MICRO: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mmicromips"
|
||||
// MIPS-MICRO: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mfpxx" "-mmicromips"
|
||||
//
|
||||
// RUN: %clang -target mips-linux-gnu -mmicromips -mno-micromips -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
@ -218,7 +218,7 @@
|
||||
// RUN: %clang -target mips-linux-gnu -mno-dsp -mdsp -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
// RUN: | FileCheck -check-prefix=MIPS-DSP %s
|
||||
// MIPS-DSP: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mdsp"
|
||||
// MIPS-DSP: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mfpxx" "-mdsp"
|
||||
//
|
||||
// RUN: %clang -target mips-linux-gnu -mdsp -mno-dsp -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
@ -229,7 +229,7 @@
|
||||
// RUN: %clang -target mips-linux-gnu -mno-dspr2 -mdspr2 -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
// RUN: | FileCheck -check-prefix=MIPS-DSPR2 %s
|
||||
// MIPS-DSPR2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mdspr2"
|
||||
// MIPS-DSPR2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mfpxx" "-mdspr2"
|
||||
//
|
||||
// RUN: %clang -target mips-linux-gnu -mdspr2 -mno-dspr2 -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
@ -266,7 +266,7 @@
|
||||
// RUN: %clang -target mips-linux-gnu -mno-msa -mmsa -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
// RUN: | FileCheck -check-prefix=MIPS-MSA %s
|
||||
// MIPS-MSA: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mmsa"
|
||||
// MIPS-MSA: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" "-mfpxx" "-mmsa"
|
||||
//
|
||||
// RUN: %clang -target mips-linux-gnu -mmsa -mno-msa -### \
|
||||
// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \
|
||||
|
||||
@ -160,8 +160,8 @@
|
||||
// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -c %s 2>&1 | \
|
||||
// RUN: FileCheck -check-prefix=FPXX-DEFAULT %s
|
||||
// FPXX-DEFAULT: -cc1as
|
||||
// FPXX-DEFAULT-NOT: "-target-feature" "+fpxx"
|
||||
// FPXX-DEFAULT-NOT: "-target-feature" "+nooddspreg"
|
||||
// FPXX-DEFAULT: "-target-feature" "+fpxx"
|
||||
// FPXX-DEFAULT: "-target-feature" "+nooddspreg"
|
||||
|
||||
// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -c %s -mfp32 2>&1 | \
|
||||
// RUN: FileCheck -check-prefix=FP32 %s
|
||||
@ -182,7 +182,7 @@
|
||||
// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -c %s 2>&1 | \
|
||||
// RUN: FileCheck -check-prefix=ODDSPREG-DEFAULT %s
|
||||
// ODDSPREG-DEFAULT: -cc1as
|
||||
// ODDSPREG-DEFAULT-NOT: "-target-feature" "{{[+-]}}nooddspreg"
|
||||
// ODDSPREG-DEFAULT: "-target-feature" "+nooddspreg"
|
||||
|
||||
// RUN: %clang -target mips-linux-gnu -### -fintegrated-as -c %s -modd-spreg 2>&1 | \
|
||||
// RUN: FileCheck -check-prefix=ODDSPREG-ON %s
|
||||
|
||||
@ -399,6 +399,14 @@ const char *MipsAsmPrinter::getCurrentABIString() const {
|
||||
|
||||
void MipsAsmPrinter::emitFunctionEntryLabel() {
|
||||
MipsTargetStreamer &TS = getTargetStreamer();
|
||||
bool IsO32 = (static_cast<const MipsTargetMachine &>(TM)).getABI().IsO32();
|
||||
|
||||
TS.updateABIInfo(*Subtarget);
|
||||
if (Subtarget->isNaN2008())
|
||||
TS.emitDirectiveNaN2008();
|
||||
if ((IsO32 && (Subtarget->isABI_FPXX() || Subtarget->isFP64bit())) ||
|
||||
Subtarget->useSoftFloat())
|
||||
TS.emitDirectiveModuleFP();
|
||||
|
||||
// NaCl sandboxing requires that indirect call instructions are masked.
|
||||
// This means that function entry points should be bundle-aligned.
|
||||
|
||||
13
llvm/test/CodeGen/Mips/abiflags-2008-fp64.ll
Normal file
13
llvm/test/CodeGen/Mips/abiflags-2008-fp64.ll
Normal file
@ -0,0 +1,13 @@
|
||||
; RUN: llc %s -o - | FileCheck %s
|
||||
|
||||
target triple = "mipsel-unknown-linux-gnu"
|
||||
|
||||
define dso_local void @test() #0 {
|
||||
ret void
|
||||
}
|
||||
|
||||
attributes #0 = { "target-cpu"="mips32r2" "target-features"="+fp64,+mips32r2,+nan2008" }
|
||||
|
||||
|
||||
; CHECK: .nan 2008
|
||||
; CHECK: .module fp=64
|
||||
Loading…
x
Reference in New Issue
Block a user