[llvm] r273631 - [ARM] Use aapcs_vfp for ___truncdfhf2 on v7k.
Ahmed Bougacha via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 23 17:08:01 PDT 2016
Author: ab
Date: Thu Jun 23 19:08:01 2016
New Revision: 273631
URL: http://llvm.org/viewvc/llvm-project?rev=273631&view=rev
Log:
[ARM] Use aapcs_vfp for ___truncdfhf2 on v7k.
r215348 overrode the f16 libcalls to be soft-float, but
v7k uses the default (hard-float) calling convention.
Modified:
llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
llvm/trunk/test/CodeGen/ARM/v7k-libcalls.ll
Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=273631&r1=273630&r2=273631&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Thu Jun 23 19:08:01 2016
@@ -407,17 +407,19 @@ ARMTargetLowering::ARMTargetLowering(con
setLibcallName(RTLIB::UDIVREM_I32, "__udivmodsi4");
}
- // The half <-> float conversion functions are always soft-float, but are
- // needed for some targets which use a hard-float calling convention by
- // default.
- if (Subtarget->isAAPCS_ABI()) {
- setLibcallCallingConv(RTLIB::FPROUND_F32_F16, CallingConv::ARM_AAPCS);
- setLibcallCallingConv(RTLIB::FPROUND_F64_F16, CallingConv::ARM_AAPCS);
- setLibcallCallingConv(RTLIB::FPEXT_F16_F32, CallingConv::ARM_AAPCS);
- } else {
- setLibcallCallingConv(RTLIB::FPROUND_F32_F16, CallingConv::ARM_APCS);
- setLibcallCallingConv(RTLIB::FPROUND_F64_F16, CallingConv::ARM_APCS);
- setLibcallCallingConv(RTLIB::FPEXT_F16_F32, CallingConv::ARM_APCS);
+ // The half <-> float conversion functions are always soft-float on
+ // non-watchos platforms, but are needed for some targets which use a
+ // hard-float calling convention by default.
+ if (!Subtarget->isTargetWatchABI()) {
+ if (Subtarget->isAAPCS_ABI()) {
+ setLibcallCallingConv(RTLIB::FPROUND_F32_F16, CallingConv::ARM_AAPCS);
+ setLibcallCallingConv(RTLIB::FPROUND_F64_F16, CallingConv::ARM_AAPCS);
+ setLibcallCallingConv(RTLIB::FPEXT_F16_F32, CallingConv::ARM_AAPCS);
+ } else {
+ setLibcallCallingConv(RTLIB::FPROUND_F32_F16, CallingConv::ARM_APCS);
+ setLibcallCallingConv(RTLIB::FPROUND_F64_F16, CallingConv::ARM_APCS);
+ setLibcallCallingConv(RTLIB::FPEXT_F16_F32, CallingConv::ARM_APCS);
+ }
}
// In EABI, these functions have an __aeabi_ prefix, but in GNUEABI they have
Modified: llvm/trunk/test/CodeGen/ARM/v7k-libcalls.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/v7k-libcalls.ll?rev=273631&r1=273630&r2=273631&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/v7k-libcalls.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/v7k-libcalls.ll Thu Jun 23 19:08:01 2016
@@ -145,6 +145,15 @@ define arm_aapcs_vfpcc double @t14(doubl
ret double %__exp10
}
+define i16 @t15(double %x) {
+; CHECK-LABEL: t15:
+; CHECK-NOT: vmov
+; CHECK: bl ___truncdfhf2
+ %tmp0 = fptrunc double %x to half
+ %tmp1 = bitcast half %tmp0 to i16
+ ret i16 %tmp1
+}
+
declare arm_aapcs_vfpcc double @x(double, double, double, double, double, double, double, float, double)
declare arm_aapcs_vfpcc double @cos(double) #0
declare arm_aapcs_vfpcc double @sin(double) #0
More information about the llvm-commits
mailing list