forked from OSchip/llvm-project
[Analysis] Disable calls to *_finite and other glibc-only functions on Android.
Since r322087, glibc's finite lib calls are generated when possible. However, they are not supported on Android. This change also disables other functions not available on Android. Differential Revision: http://reviews.llvm.org/D42668 llvm-svn: 323898
This commit is contained in:
parent
7892ae44b4
commit
60d1e79ffb
|
@ -397,24 +397,18 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
|
||||||
TLI.setUnavailable(LibFunc_flsll);
|
TLI.setUnavailable(LibFunc_flsll);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Android uses bionic instead of glibc. So disable some finite
|
// The following functions are available on Linux,
|
||||||
// lib calls in glibc for Android. The list of unsupported lib
|
// but Android uses bionic instead of glibc.
|
||||||
// calls for Android may expand as the need arises.
|
if (!T.isOSLinux() || T.isAndroid()) {
|
||||||
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);
|
TLI.setUnavailable(LibFunc_dunder_strdup);
|
||||||
TLI.setUnavailable(LibFunc_dunder_strtok_r);
|
TLI.setUnavailable(LibFunc_dunder_strtok_r);
|
||||||
TLI.setUnavailable(LibFunc_dunder_isoc99_scanf);
|
TLI.setUnavailable(LibFunc_dunder_isoc99_scanf);
|
||||||
TLI.setUnavailable(LibFunc_dunder_isoc99_sscanf);
|
TLI.setUnavailable(LibFunc_dunder_isoc99_sscanf);
|
||||||
TLI.setUnavailable(LibFunc_under_IO_getc);
|
TLI.setUnavailable(LibFunc_under_IO_getc);
|
||||||
TLI.setUnavailable(LibFunc_under_IO_putc);
|
TLI.setUnavailable(LibFunc_under_IO_putc);
|
||||||
TLI.setUnavailable(LibFunc_memalign);
|
// But, Android has memalign.
|
||||||
|
if (!T.isAndroid())
|
||||||
|
TLI.setUnavailable(LibFunc_memalign);
|
||||||
TLI.setUnavailable(LibFunc_fopen64);
|
TLI.setUnavailable(LibFunc_fopen64);
|
||||||
TLI.setUnavailable(LibFunc_fseeko64);
|
TLI.setUnavailable(LibFunc_fseeko64);
|
||||||
TLI.setUnavailable(LibFunc_fstat64);
|
TLI.setUnavailable(LibFunc_fstat64);
|
||||||
|
|
|
@ -265,6 +265,30 @@ define void @test_exp2_finite(double %double) #0 {
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define void @test_log_finite(double %double) #0 {
|
||||||
|
%logdouble = call double @llvm.log.f64(double %double)
|
||||||
|
store double %logdouble, double* @vardouble
|
||||||
|
; ANDROID-AARCH64-NOT: bl __log_finite
|
||||||
|
; CHECK: bl __log_finite
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @test_log2_finite(double %double) #0 {
|
||||||
|
%log2double = call double @llvm.log2.f64(double %double)
|
||||||
|
store double %log2double, double* @vardouble
|
||||||
|
; ANDROID-AARCH64-NOT: bl __log2_finite
|
||||||
|
; CHECK: bl __log2_finite
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @test_log10_finite(double %double) #0 {
|
||||||
|
%log10double = call double @llvm.log10.f64(double %double)
|
||||||
|
store double %log10double, double* @vardouble
|
||||||
|
; ANDROID-AARCH64-NOT: bl __log10_finite
|
||||||
|
; CHECK: bl __log10_finite
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
define void @test_pow_finite(double %double) #0 {
|
define void @test_pow_finite(double %double) #0 {
|
||||||
%powdouble = call double @llvm.pow.f64(double %double, double %double)
|
%powdouble = call double @llvm.pow.f64(double %double, double %double)
|
||||||
store double %powdouble, double* @vardouble
|
store double %powdouble, double* @vardouble
|
||||||
|
|
Loading…
Reference in New Issue