Index: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp =================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp @@ -231,15 +231,7 @@ 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(LCID), IsHFTarget ? CallingConv::ARM_AAPCS_VFP Index: llvm/trunk/test/CodeGen/Thumb2/intrinsics-cc.ll =================================================================== --- llvm/trunk/test/CodeGen/Thumb2/intrinsics-cc.ll +++ llvm/trunk/test/CodeGen/Thumb2/intrinsics-cc.ll @@ -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-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-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-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 +; 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 +; 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