Index: lib/Analysis/TargetLibraryInfo.cpp =================================================================== --- lib/Analysis/TargetLibraryInfo.cpp +++ lib/Analysis/TargetLibraryInfo.cpp @@ -403,6 +403,9 @@ if (T.isAndroid()) { TLI.setUnavailable(LibFunc_exp_finite); TLI.setUnavailable(LibFunc_exp2_finite); + TLI.setUnavailable(LibFunc_log_finite); + TLI.setUnavailable(LibFunc_log2_finite); + TLI.setUnavailable(LibFunc_log10_finite); TLI.setUnavailable(LibFunc_pow_finite); } Index: test/CodeGen/AArch64/illegal-float-ops.ll =================================================================== --- test/CodeGen/AArch64/illegal-float-ops.ll +++ test/CodeGen/AArch64/illegal-float-ops.ll @@ -265,6 +265,30 @@ 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 { %powdouble = call double @llvm.pow.f64(double %double, double %double) store double %powdouble, double* @vardouble