[CodeGen] Use standard -not gnueabi- naming for f16 libcalls on Darwin.
authorAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 14 May 2015 01:00:51 +0000 (01:00 +0000)
committerAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 14 May 2015 01:00:51 +0000 (01:00 +0000)
Other targets probably should as well.  Since r237161, compiler-rt has
both, but I don't see why anything other than gnueabi would use a
gnueabi naming scheme.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237324 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TargetLoweringBase.cpp
test/CodeGen/ARM/half.ll

index 4dd279ede0dc5601b91feece915d5f8c6124ef5b..1ca453aa09c26814d35c25b90032f6319e40dd1f 100644 (file)
@@ -420,6 +420,14 @@ static void InitLibcallNames(const char **Names, const Triple &TT) {
     // These are generally not available.
     Names[RTLIB::STACKPROTECTOR_CHECK_FAIL] = nullptr;
   }
+
+  // For f16/f32 conversions, Darwin uses the standard naming scheme, instead
+  // of the gnueabi-style __gnu_*_ieee.
+  // FIXME: What about other targets?
+  if (TT.isOSDarwin()) {
+    Names[RTLIB::FPEXT_F16_F32] = "__extendhfsf2";
+    Names[RTLIB::FPROUND_F32_F16] = "__truncsfhf2";
+  }
 }
 
 /// InitLibcallCallingConvs - Set default libcall CallingConvs.
index 777aff2f007ba849a41dc2ba0e0dffbaf0b25cd8..b40eaf638519127f67e1a440e4e0f5c67d74eba6 100644 (file)
@@ -30,7 +30,7 @@ define void @test_bitcast_to_half(half* %addr, i16 %in) {
 define float @test_extend32(half* %addr) {
 ; CHECK-LABEL: test_extend32:
 
-; CHECK-OLD: b.w ___gnu_h2f_ieee
+; CHECK-OLD: b.w ___extendhfsf2
 ; CHECK-F16: vcvtb.f32.f16
 ; CHECK-V8: vcvtb.f32.f16
   %val16 = load half, half* %addr
@@ -41,7 +41,7 @@ define float @test_extend32(half* %addr) {
 define double @test_extend64(half* %addr) {
 ; CHECK-LABEL: test_extend64:
 
-; CHECK-OLD: blx ___gnu_h2f_ieee
+; CHECK-OLD: blx ___extendhfsf2
 ; CHECK-OLD: vcvt.f64.f32
 ; CHECK-F16: vcvtb.f32.f16
 ; CHECK-F16: vcvt.f64.f32
@@ -54,7 +54,7 @@ define double @test_extend64(half* %addr) {
 define void @test_trunc32(float %in, half* %addr) {
 ; CHECK-LABEL: test_trunc32:
 
-; CHECK-OLD: blx ___gnu_f2h_ieee
+; CHECK-OLD: blx ___truncsfhf2
 ; CHECK-F16: vcvtb.f16.f32
 ; CHECK-V8: vcvtb.f16.f32
   %val16 = fptrunc float %in to half