Index: llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp =================================================================== --- llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp +++ llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp @@ -413,17 +413,17 @@ TLI.setUnavailable(LibFunc_flsll); } - // The following functions are available on Linux, - // but Android uses bionic instead of glibc. - if (!T.isOSLinux() || T.isAndroid()) { + // The following functions are only available on GNU/Linux (using glibc). + // Linux variants without glibc (eg: bionic, musl) may have some subset. + if (!T.isOSLinux() || !T.isGNUEnvironment()) { TLI.setUnavailable(LibFunc_dunder_strdup); TLI.setUnavailable(LibFunc_dunder_strtok_r); TLI.setUnavailable(LibFunc_dunder_isoc99_scanf); TLI.setUnavailable(LibFunc_dunder_isoc99_sscanf); TLI.setUnavailable(LibFunc_under_IO_getc); TLI.setUnavailable(LibFunc_under_IO_putc); - // But, Android has memalign. - if (!T.isAndroid()) + // But, Android and musl have memalign. + if (!T.isAndroid() && !T.isMusl()) TLI.setUnavailable(LibFunc_memalign); TLI.setUnavailable(LibFunc_fopen64); TLI.setUnavailable(LibFunc_fseeko64); Index: llvm/trunk/test/Transforms/ConstProp/calls-math-finite.ll =================================================================== --- llvm/trunk/test/Transforms/ConstProp/calls-math-finite.ll +++ llvm/trunk/test/Transforms/ConstProp/calls-math-finite.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -constprop -S | FileCheck %s +; RUN: opt < %s -constprop -S -mtriple=unknown-unknown-linux-musl | FileCheck -check-prefix=MUSL %s ; Test to verify constant folding can occur when math routines are mapped ; to the ___finite versions of functions due to __FINITE_MATH_ONLY__ @@ -57,6 +58,48 @@ ; CHECK-NEXT: store float 0x40240926E0000000, float* [[SLOTF]] ; CHECK-NEXT: ret void ; +; MUSL-LABEL: @T( +; MUSL-NEXT: [[SLOT:%.*]] = alloca double +; MUSL-NEXT: [[SLOTF:%.*]] = alloca float +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store +; MUSL-NEXT: call +; MUSL-NEXT: store + %slot = alloca double %slotf = alloca float Index: llvm/trunk/test/Transforms/InferFunctionAttrs/annotate.ll =================================================================== --- llvm/trunk/test/Transforms/InferFunctionAttrs/annotate.ll +++ llvm/trunk/test/Transforms/InferFunctionAttrs/annotate.ll @@ -1,7 +1,7 @@ ; RUN: opt < %s -mtriple=x86_64-- -inferattrs -S | FileCheck %s ; RUN: opt < %s -mtriple=x86_64-- -passes=inferattrs -S | FileCheck %s ; RUN: opt < %s -mtriple=x86_64-apple-macosx10.8.0 -inferattrs -S | FileCheck -check-prefix=CHECK -check-prefix=CHECK-DARWIN %s -; RUN: opt < %s -mtriple=x86_64-unknown-linux -inferattrs -S | FileCheck -check-prefix=CHECK -check-prefix=CHECK-LINUX %s +; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -inferattrs -S | FileCheck -check-prefix=CHECK -check-prefix=CHECK-LINUX %s ; RUN: opt < %s -mtriple=nvptx -inferattrs -S | FileCheck -check-prefix=CHECK-NVPTX %s ; operator new routines