mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-21 18:29:45 +00:00
ARM: set default float ABI based on triple.
Clang sets the float-abi target option manually, but no longer annotates each function with its ABI. This can lead to confusing mistmatch between "clang -emit-llvm | llc" and normal clang invocations. Besides which, gnueabihf actually *is* hard-float. Defaulting to soft was just perverse. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197554 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0a9ff8776b
commit
e66345aed4
@ -321,6 +321,11 @@ public:
|
|||||||
TargetTriple.getEnvironment() == Triple::EABIHF;
|
TargetTriple.getEnvironment() == Triple::EABIHF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isTargetHardFloat() const {
|
||||||
|
return TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
|
||||||
|
TargetTriple.getEnvironment() == Triple::EABIHF;
|
||||||
|
}
|
||||||
|
|
||||||
bool isAPCS_ABI() const { return TargetABI == ARM_ABI_APCS; }
|
bool isAPCS_ABI() const { return TargetABI == ARM_ABI_APCS; }
|
||||||
bool isAAPCS_ABI() const { return TargetABI == ARM_ABI_AAPCS; }
|
bool isAAPCS_ABI() const { return TargetABI == ARM_ABI_AAPCS; }
|
||||||
|
|
||||||
|
@ -53,7 +53,8 @@ ARMBaseTargetMachine::ARMBaseTargetMachine(const Target &T, StringRef TT,
|
|||||||
InstrItins(Subtarget.getInstrItineraryData()) {
|
InstrItins(Subtarget.getInstrItineraryData()) {
|
||||||
// Default to soft float ABI
|
// Default to soft float ABI
|
||||||
if (Options.FloatABIType == FloatABI::Default)
|
if (Options.FloatABIType == FloatABI::Default)
|
||||||
this->Options.FloatABIType = FloatABI::Soft;
|
this->Options.FloatABIType =
|
||||||
|
Subtarget.isTargetHardFloat() ? FloatABI::Hard : FloatABI::Soft;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARMBaseTargetMachine::addAnalysisPasses(PassManagerBase &PM) {
|
void ARMBaseTargetMachine::addAnalysisPasses(PassManagerBase &PM) {
|
||||||
|
22
test/CodeGen/ARM/default-float-abi.ll
Normal file
22
test/CodeGen/ARM/default-float-abi.ll
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
; RUN: llc -mtriple=armv7-linux-gnueabihf %s -o - | FileCheck %s --check-prefix=CHECK-HARD
|
||||||
|
; RUN: llc -mtriple=armv7-linux-eabihf %s -o - | FileCheck %s --check-prefix=CHECK-HARD
|
||||||
|
; RUN: llc -mtriple=armv7-linux-gnueabihf -float-abi=soft %s -o - | FileCheck %s --check-prefix=CHECK-SOFT
|
||||||
|
; RUN: llc -mtriple=armv7-linux-gnueabi %s -o - | FileCheck %s --check-prefix=CHECK-SOFT
|
||||||
|
; RUN: llc -mtriple=armv7-linux-eabi -float-abi=hard %s -o - | FileCheck %s --check-prefix=CHECK-HARD
|
||||||
|
; RUN: llc -mtriple=thumbv7-apple-ios6.0 %s -o - | FileCheck %s --check-prefix=CHECK-SOFT
|
||||||
|
|
||||||
|
define float @test_abi(float %lhs, float %rhs) {
|
||||||
|
%sum = fadd float %lhs, %rhs
|
||||||
|
ret float %sum
|
||||||
|
|
||||||
|
; CHECK-HARD-LABEL: test_abi:
|
||||||
|
; CHECK-HARD-NOT: vmov
|
||||||
|
; CHECK-HARD: vadd.f32 s0, s0, s1
|
||||||
|
; CHECK-HARD-NOT: vmov
|
||||||
|
|
||||||
|
; CHECK-SOFT-LABEL: test_abi:
|
||||||
|
; CHECK-SOFT-DAG: vmov [[LHS:s[0-9]+]], r0
|
||||||
|
; CHECK-SOFT-DAG: vmov [[RHS:s[0-9]+]], r1
|
||||||
|
; CHECK-SOFT: vadd.f32 [[DEST:s[0-9]+]], [[LHS]], [[RHS]]
|
||||||
|
; CHECK-SOFT: vmov r0, [[DEST]]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user