TLI.setUnavailable(LibFunc_flsll);
}
+ // Android uses bionic instead of glibc. So disable some finite
+ // lib calls in glibc for Android. The list of unsupported lib
+ // calls for Android may expand as the need arises.
+ if (T.isAndroid()) {
+ TLI.setUnavailable(LibFunc_exp_finite);
+ TLI.setUnavailable(LibFunc_exp2_finite);
+ TLI.setUnavailable(LibFunc_pow_finite);
+ }
+
// The following functions are available on at least Linux:
if (!T.isOSLinux()) {
TLI.setUnavailable(LibFunc_dunder_strdup);
; RUN: llc -mtriple=aarch64-none-linux-gnu -verify-machineinstrs -o - %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-android -verify-machineinstrs -o - %s | FileCheck --check-prefix=ANDROID-AARCH64 %s
@varfloat = global float 0.0
@vardouble = global double 0.0
ret void
}
+
+define void @test_exp_finite(double %double) #0 {
+ %expdouble = call double @llvm.exp.f64(double %double)
+ store double %expdouble, double* @vardouble
+ ; ANDROID-AARCH64-NOT: bl __exp_finite
+ ; CHECK: bl __exp_finite
+
+ ret void
+}
+
+define void @test_exp2_finite(double %double) #0 {
+ %expdouble = call double @llvm.exp2.f64(double %double)
+ store double %expdouble, double* @vardouble
+ ; ANDROID-AARCH64-NOT: bl __exp2_finite
+ ; CHECK: bl __exp2_finite
+
+ ret void
+}
+
+define void @test_pow_finite(double %double) #0 {
+ %powdouble = call double @llvm.pow.f64(double %double, double %double)
+ store double %powdouble, double* @vardouble
+ ; ANDROID-AARCH64-NOT: bl __pow_finite
+ ; CHECK: bl __pow_finite
+ ret void
+}
+
+attributes #0 = { "no-infs-fp-math"="true" "no-nans-fp-math"="true" }