mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[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
556771566c
commit
598a327133
@ -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…
x
Reference in New Issue
Block a user