mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-13 08:54:59 +00:00
[ARM] Honor -mfloat-abi for libcall calling convention
As far as I can tell, this matches gcc: -mfloat-abi determines the calling convention for all functions except those explicitly defined as soft-float in the ARM RTABI. This change only affects cases where the user specifies -mfloat-abi to override the default calling convention derived from the target triple. Fixes https://bugs.llvm.org//show_bug.cgi?id=34530. Differential Revision: https://reviews.llvm.org/D38299 llvm-svn: 316708
This commit is contained in:
parent
3773cf7e77
commit
ee208de178
@ -231,15 +231,7 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
|
||||
|
||||
if (!Subtarget->isTargetDarwin() && !Subtarget->isTargetIOS() &&
|
||||
!Subtarget->isTargetWatchOS()) {
|
||||
const auto &E = Subtarget->getTargetTriple().getEnvironment();
|
||||
|
||||
bool IsHFTarget = E == Triple::EABIHF || E == Triple::GNUEABIHF ||
|
||||
E == Triple::MuslEABIHF;
|
||||
// Windows is a special case. Technically, we will replace all of the "GNU"
|
||||
// calls with calls to MSVCRT if appropriate and adjust the calling
|
||||
// convention then.
|
||||
IsHFTarget = IsHFTarget || Subtarget->isTargetWindows();
|
||||
|
||||
bool IsHFTarget = TM.Options.FloatABIType == FloatABI::Hard;
|
||||
for (int LCID = 0; LCID < RTLIB::UNKNOWN_LIBCALL; ++LCID)
|
||||
setLibcallCallingConv(static_cast<RTLIB::Libcall>(LCID),
|
||||
IsHFTarget ? CallingConv::ARM_AAPCS_VFP
|
||||
|
@ -1,41 +1,54 @@
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabi -float-abi soft -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MATCH
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabi -float-abi hard -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MISMATCH -check-prefix CHECK-TO-SOFT
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabihf -float-abi soft -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MISMATCH -check-prefix CHECK-TO-HARD
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabihf -float-abi hard -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MATCH
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabi -float-abi soft -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabi -float-abi hard -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabihf -float-abi soft -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-eabihf -float-abi hard -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabi -float-abi soft -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MATCH
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabi -float-abi hard -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MISMATCH -check-prefix CHECK-TO-SOFT
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabihf -float-abi soft -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MISMATCH -check-prefix CHECK-TO-HARD
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabihf -float-abi hard -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MATCH
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabi -float-abi soft -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabi -float-abi hard -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabihf -float-abi soft -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-gnueabihf -float-abi hard -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabi -float-abi soft -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MATCH
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabi -float-abi hard -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MISMATCH -check-prefix CHECK-TO-SOFT
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabihf -float-abi soft -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MISMATCH -check-prefix CHECK-TO-HARD
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabihf -float-abi hard -filetype asm -o - %s | FileCheck %s -check-prefix CHECK-MATCH
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabi -float-abi soft -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabi -float-abi hard -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabihf -float-abi soft -filetype asm -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple thumbv7-unknown-none-musleabihf -float-abi hard -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
declare float @llvm.powi.f32(float, i32)
|
||||
|
||||
define float @f(float %f, i32 %i) {
|
||||
define float @powi_f32(float %f, i32 %i) {
|
||||
entry:
|
||||
%0 = call float @llvm.powi.f32(float %f, i32 %i)
|
||||
ret float %0
|
||||
}
|
||||
|
||||
; CHECK-MATCH: b __powisf2
|
||||
; CHECK-MISMATCH: bl __powisf2
|
||||
; CHECK-TO-SOFT: vmov s0, r0
|
||||
; CHECK-TO-HARD: vmov r0, s0
|
||||
; CHECK: b __powisf2
|
||||
|
||||
declare double @llvm.powi.f64(double, i32)
|
||||
|
||||
define double @g(double %d, i32 %i) {
|
||||
define double @powi_f64(double %d, i32 %i) {
|
||||
entry:
|
||||
%0 = call double @llvm.powi.f64(double %d, i32 %i)
|
||||
ret double %0
|
||||
}
|
||||
|
||||
; CHECK-MATCH: b __powidf2
|
||||
; CHECK-MISMATCH: bl __powidf2
|
||||
; CHECK-TO-SOFT: vmov d0, r0, r1
|
||||
; CHECK-TO-HARD: vmov r0, r1, d0
|
||||
; CHECK: b __powidf2
|
||||
|
||||
declare float @llvm.floor.f32(float)
|
||||
|
||||
define float @floor_f32(float %f) {
|
||||
entry:
|
||||
%0 = call float @llvm.floor.f32(float %f)
|
||||
ret float %0
|
||||
}
|
||||
|
||||
; CHECK: b floorf
|
||||
|
||||
declare double @llvm.floor.f64(double)
|
||||
|
||||
define double @floor_f64(double %d) {
|
||||
entry:
|
||||
%0 = call double @llvm.floor.f64(double %d)
|
||||
ret double %0
|
||||
}
|
||||
|
||||
; CHECK: b floor
|
||||
|
Loading…
x
Reference in New Issue
Block a user