[llvm-branch-commits] [llvm] TargetLibraryInfo: Add tests for function availability (PR #142536)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Jun 2 22:58:30 PDT 2025


https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/142536

Check the output of llvm-tli-checker for a sampling of triples. This
is intended to cover all of the paths in the TargetLibraryInfo constructor.

>From a7ad6b4edf819a8370e44c43629d3742d73378ea Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Mon, 2 Jun 2025 13:25:25 +0200
Subject: [PATCH] TargetLibraryInfo: Add tests for function availability

Check the output of llvm-tli-checker for a sampling of triples. This
is intended to cover all of the paths in the TargetLibraryInfo constructor.
---
 .../aarch64-unknown-windows-msvc.test         | 526 +++++++++++++++++
 .../TargetLibraryInfo/amdgcn-amd-amdhsa.test  | 527 ++++++++++++++++++
 .../TargetLibraryInfo/arm64-apple-darwin.test | 526 +++++++++++++++++
 .../arm64_32-apple-watchos.test               | 526 +++++++++++++++++
 .../TargetLibraryInfo/armv7-apple-ios.test    | 526 +++++++++++++++++
 .../armv7-unknown-linux-android21.test        | 526 +++++++++++++++++
 .../armv7-unknown-linux-android28.test        | 526 +++++++++++++++++
 .../armv7s-apple-ios7.0.test                  | 526 +++++++++++++++++
 .../dxil-pc-shadermodel6.3-library.test       | 526 +++++++++++++++++
 .../i386-apple-macosx10.6.0.test              | 526 +++++++++++++++++
 .../i386-apple-macosx10.7.0.test              | 526 +++++++++++++++++
 .../TargetLibraryInfo/i386-pc-linux-gnu.test  | 526 +++++++++++++++++
 .../i386-pc-windows-msvc.test                 | 526 +++++++++++++++++
 .../i386-unknown-linux-musl.test              | 526 +++++++++++++++++
 .../TargetLibraryInfo/i686-apple-macosx.test  | 526 +++++++++++++++++
 .../TargetLibraryInfo/i686-pc-cygwin.test     | 526 +++++++++++++++++
 .../linux-arm-gnueabihf.test                  | 526 +++++++++++++++++
 .../nvptx64-nvidia-cuda.test                  | 526 +++++++++++++++++
 .../powerpc64-ibm-aix-xcoff.test              | 526 +++++++++++++++++
 .../sparc64-unknown-solaris.test              | 526 +++++++++++++++++
 .../thumbv7-apple-ios3.0.0.test               | 526 +++++++++++++++++
 .../thumbv7-windows-msvc.test                 | 526 +++++++++++++++++
 .../wasm64-unknown-emscripten.test            | 526 +++++++++++++++++
 .../x86_64-apple-darwin10.9.0.test            | 526 +++++++++++++++++
 .../x86_64-apple-darwin10.test                | 526 +++++++++++++++++
 .../x86_64-apple-macosx10.5.0.test            | 526 +++++++++++++++++
 .../TargetLibraryInfo/x86_64-pc-cygwin.test   | 526 +++++++++++++++++
 .../x86_64-pc-windows-msvc.test               | 526 +++++++++++++++++
 .../x86_64-pc-windows-msvc17.test             | 526 +++++++++++++++++
 .../x86_64-pc-windows-msvc19.test             | 526 +++++++++++++++++
 .../TargetLibraryInfo/x86_64-scei-ps4.test    | 526 +++++++++++++++++
 .../TargetLibraryInfo/x86_64-sie-ps5.test     | 526 +++++++++++++++++
 .../x86_64-unknown-freebsd.test               | 526 +++++++++++++++++
 .../x86_64-unknown-unknown-gnu.test           | 526 +++++++++++++++++
 .../x86_64-unknown-unknown.test               | 526 +++++++++++++++++
 .../TargetLibraryInfo/xcore-xmos-elf.test     | 526 +++++++++++++++++
 llvm/utils/emit-llvm-tli-checker-test.py      |  33 ++
 37 files changed, 18970 insertions(+)
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/aarch64-unknown-windows-msvc.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/amdgcn-amd-amdhsa.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/arm64-apple-darwin.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/arm64_32-apple-watchos.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/armv7-apple-ios.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android21.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android28.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/armv7s-apple-ios7.0.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/dxil-pc-shadermodel6.3-library.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.6.0.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.7.0.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/i386-pc-linux-gnu.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/i386-pc-windows-msvc.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/i386-unknown-linux-musl.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/i686-apple-macosx.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/i686-pc-cygwin.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/linux-arm-gnueabihf.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/nvptx64-nvidia-cuda.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/powerpc64-ibm-aix-xcoff.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/sparc64-unknown-solaris.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/thumbv7-apple-ios3.0.0.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/thumbv7-windows-msvc.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/wasm64-unknown-emscripten.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.9.0.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-macosx10.5.0.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-cygwin.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc17.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc19.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-scei-ps4.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-sie-ps5.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-freebsd.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown-gnu.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown.test
 create mode 100644 llvm/test/Analysis/TargetLibraryInfo/xcore-xmos-elf.test
 create mode 100755 llvm/utils/emit-llvm-tli-checker-test.py

diff --git a/llvm/test/Analysis/TargetLibraryInfo/aarch64-unknown-windows-msvc.test b/llvm/test/Analysis/TargetLibraryInfo/aarch64-unknown-windows-msvc.test
new file mode 100644
index 0000000000000..30a19e98a5888
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/aarch64-unknown-windows-msvc.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=aarch64-unknown-windows-msvc | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 276 available for 'aarch64-unknown-windows-msvc'
+CHECK-NEXT: available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/amdgcn-amd-amdhsa.test b/llvm/test/Analysis/TargetLibraryInfo/amdgcn-amd-amdhsa.test
new file mode 100644
index 0000000000000..a4625fcedecee
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/amdgcn-amd-amdhsa.test
@@ -0,0 +1,527 @@
+# RUN: llvm-tli-checker --triple=amdgcn-amd-amdhsa --dump-tli | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 2 available for 'amdgcn-amd-amdhsa'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: not available: '__atomic_load'
+CHECK-NEXT: not available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: not available: '__cxa_atexit'
+CHECK-NEXT: not available: 'atexit'
+CHECK-NEXT: not available: 'abort'
+CHECK-NEXT: not available: 'exit'
+CHECK-NEXT: not available: '_Exit'
+CHECK-NEXT: not available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: not available: '__cxa_throw'
+CHECK-NEXT: not available: '__cxa_guard_abort'
+CHECK-NEXT: not available: '__cxa_guard_acquire'
+CHECK-NEXT: not available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: not available: '__memccpy_chk'
+CHECK-NEXT: not available: '__memcpy_chk'
+CHECK-NEXT: not available: '__memmove_chk'
+CHECK-NEXT: not available: '__mempcpy_chk'
+CHECK-NEXT: not available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: not available: '__snprintf_chk'
+CHECK-NEXT: not available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: not available: '__stpcpy_chk'
+CHECK-NEXT: not available: '__stpncpy_chk'
+CHECK-NEXT: not available: '__strcat_chk'
+CHECK-NEXT: not available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: not available: '__strlcat_chk'
+CHECK-NEXT: not available: '__strlcpy_chk'
+CHECK-NEXT: not available: '__strlen_chk'
+CHECK-NEXT: not available: '__strncat_chk'
+CHECK-NEXT: not available: '__strncpy_chk'
+CHECK-NEXT: not available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: not available: '__vsnprintf_chk'
+CHECK-NEXT: not available: '__vsprintf_chk'
+CHECK-NEXT: not available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: not available: 'acos'
+CHECK-NEXT: not available: 'acosf'
+CHECK-NEXT: not available: 'acosh'
+CHECK-NEXT: not available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: not available: 'aligned_alloc'
+CHECK-NEXT: not available: 'asin'
+CHECK-NEXT: not available: 'asinf'
+CHECK-NEXT: not available: 'asinh'
+CHECK-NEXT: not available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: not available: 'atan'
+CHECK-NEXT: not available: 'atan2'
+CHECK-NEXT: not available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: not available: 'atanf'
+CHECK-NEXT: not available: 'atanh'
+CHECK-NEXT: not available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: not available: 'atof'
+CHECK-NEXT: not available: 'atoi'
+CHECK-NEXT: not available: 'atol'
+CHECK-NEXT: not available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: not available: 'cabs'
+CHECK-NEXT: not available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: not available: 'calloc'
+CHECK-NEXT: not available: 'cbrt'
+CHECK-NEXT: not available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: not available: 'ceil'
+CHECK-NEXT: not available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: not available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: not available: 'copysign'
+CHECK-NEXT: not available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: not available: 'cos'
+CHECK-NEXT: not available: 'cosf'
+CHECK-NEXT: not available: 'cosh'
+CHECK-NEXT: not available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: not available: 'erf'
+CHECK-NEXT: not available: 'erff'
+CHECK-NEXT: not available: 'erfl'
+CHECK-NEXT: not available: 'tgamma'
+CHECK-NEXT: not available: 'tgammaf'
+CHECK-NEXT: not available: 'tgammal'
+CHECK-NEXT: not available: 'execl'
+CHECK-NEXT: not available: 'execle'
+CHECK-NEXT: not available: 'execlp'
+CHECK-NEXT: not available: 'execv'
+CHECK-NEXT: not available: 'execvP'
+CHECK-NEXT: not available: 'execve'
+CHECK-NEXT: not available: 'execvp'
+CHECK-NEXT: not available: 'execvpe'
+CHECK-NEXT: not available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: not available: 'exp2'
+CHECK-NEXT: not available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: not available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: not available: 'expm1'
+CHECK-NEXT: not available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: not available: 'fabs'
+CHECK-NEXT: not available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: not available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: not available: 'feof'
+CHECK-NEXT: not available: 'ferror'
+CHECK-NEXT: not available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: not available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: not available: 'fgetpos'
+CHECK-NEXT: not available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: not available: 'floor'
+CHECK-NEXT: not available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: not available: 'fmax'
+CHECK-NEXT: not available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: not available: 'fmin'
+CHECK-NEXT: not available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: not available: 'fmaximum_num'
+CHECK-NEXT: not available: 'fmaximum_numf'
+CHECK-NEXT: not available: 'fmaximum_numl'
+CHECK-NEXT: not available: 'fminimum_num'
+CHECK-NEXT: not available: 'fminimum_numf'
+CHECK-NEXT: not available: 'fminimum_numl'
+CHECK-NEXT: not available: 'fmod'
+CHECK-NEXT: not available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: not available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: not available: 'fork'
+CHECK-NEXT: not available: 'fprintf'
+CHECK-NEXT: not available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: not available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: not available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: not available: 'free'
+CHECK-NEXT: not available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: not available: 'fscanf'
+CHECK-NEXT: not available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: not available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: not available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: not available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: not available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: not available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: not available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: not available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: not available: 'hypot'
+CHECK-NEXT: not available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: not available: 'isascii'
+CHECK-NEXT: not available: 'isdigit'
+CHECK-NEXT: not available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: not available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: not available: 'llabs'
+CHECK-NEXT: not available: 'log'
+CHECK-NEXT: not available: 'log10'
+CHECK-NEXT: not available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: not available: 'log1p'
+CHECK-NEXT: not available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: not available: 'log2'
+CHECK-NEXT: not available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: not available: 'ilogb'
+CHECK-NEXT: not available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: not available: 'logb'
+CHECK-NEXT: not available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: not available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: not available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: not available: 'memchr'
+CHECK-NEXT: not available: 'memcmp'
+CHECK-NEXT: not available: 'memcpy'
+CHECK-NEXT: not available: 'memmove'
+CHECK-NEXT: not available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: not available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: not available: 'mktime'
+CHECK-NEXT: not available: 'modf'
+CHECK-NEXT: not available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: not available: 'nan'
+CHECK-NEXT: not available: 'nanf'
+CHECK-NEXT: not available: 'nanl'
+CHECK-NEXT: not available: 'nearbyint'
+CHECK-NEXT: not available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: not available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: not available: 'posix_memalign'
+CHECK-NEXT: not available: 'pow'
+CHECK-NEXT: not available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: not available: 'printf'
+CHECK-NEXT: not available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: not available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: not available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: not available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: not available: 'realloc'
+CHECK-NEXT: not available: 'reallocf'
+CHECK-NEXT: not available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: not available: 'remainder'
+CHECK-NEXT: not available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: not available: 'remquo'
+CHECK-NEXT: not available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: not available: 'fdim'
+CHECK-NEXT: not available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: not available: 'remove'
+CHECK-NEXT: not available: 'rename'
+CHECK-NEXT: not available: 'rewind'
+CHECK-NEXT: not available: 'rint'
+CHECK-NEXT: not available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: not available: 'round'
+CHECK-NEXT: not available: 'roundeven'
+CHECK-NEXT: not available: 'roundevenf'
+CHECK-NEXT: not available: 'roundevenl'
+CHECK-NEXT: not available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: not available: 'scalbln'
+CHECK-NEXT: not available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: not available: 'scalbn'
+CHECK-NEXT: not available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: not available: 'scanf'
+CHECK-NEXT: not available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: not available: 'setvbuf'
+CHECK-NEXT: not available: 'sin'
+CHECK-NEXT: not available: 'sinf'
+CHECK-NEXT: not available: 'sinh'
+CHECK-NEXT: not available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: not available: 'sincos'
+CHECK-NEXT: not available: 'sincosf'
+CHECK-NEXT: not available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: not available: 'snprintf'
+CHECK-NEXT: not available: 'sprintf'
+CHECK-NEXT: not available: 'sqrt'
+CHECK-NEXT: not available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: not available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: not available: 'strcat'
+CHECK-NEXT: not available: 'strchr'
+CHECK-NEXT: not available: 'strcmp'
+CHECK-NEXT: not available: 'strcoll'
+CHECK-NEXT: not available: 'strcpy'
+CHECK-NEXT: not available: 'strcspn'
+CHECK-NEXT: not available: 'strdup'
+CHECK-NEXT: not available: 'strlcat'
+CHECK-NEXT: not available: 'strlcpy'
+CHECK-NEXT: not available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: not available: 'strncat'
+CHECK-NEXT: not available: 'strncmp'
+CHECK-NEXT: not available: 'strncpy'
+CHECK-NEXT: not available: 'strndup'
+CHECK-NEXT: not available: 'strnlen'
+CHECK-NEXT: not available: 'strpbrk'
+CHECK-NEXT: not available: 'strrchr'
+CHECK-NEXT: not available: 'strspn'
+CHECK-NEXT: not available: 'strstr'
+CHECK-NEXT: not available: 'strtod'
+CHECK-NEXT: not available: 'strtof'
+CHECK-NEXT: not available: 'strtok'
+CHECK-NEXT: not available: 'strtok_r'
+CHECK-NEXT: not available: 'strtol'
+CHECK-NEXT: not available: 'strtold'
+CHECK-NEXT: not available: 'strtoll'
+CHECK-NEXT: not available: 'strtoul'
+CHECK-NEXT: not available: 'strtoull'
+CHECK-NEXT: not available: 'strxfrm'
+CHECK-NEXT: not available: 'system'
+CHECK-NEXT: not available: 'tan'
+CHECK-NEXT: not available: 'tanf'
+CHECK-NEXT: not available: 'tanh'
+CHECK-NEXT: not available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: not available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: not available: 'toascii'
+CHECK-NEXT: not available: 'trunc'
+CHECK-NEXT: not available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: not available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: not available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: not available: 'vfprintf'
+CHECK-NEXT: not available: 'vfscanf'
+CHECK-NEXT: not available: 'vprintf'
+CHECK-NEXT: not available: 'vscanf'
+CHECK-NEXT: not available: 'vsnprintf'
+CHECK-NEXT: not available: 'vsprintf'
+CHECK-NEXT: not available: 'vsscanf'
+CHECK-NEXT: not available: 'wcslen'
+CHECK-NEXT: not available: 'write'
+
diff --git a/llvm/test/Analysis/TargetLibraryInfo/arm64-apple-darwin.test b/llvm/test/Analysis/TargetLibraryInfo/arm64-apple-darwin.test
new file mode 100644
index 0000000000000..2279751dabf7f
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/arm64-apple-darwin.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=arm64-apple-darwin | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 407 available for 'arm64-apple-darwin'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/arm64_32-apple-watchos.test b/llvm/test/Analysis/TargetLibraryInfo/arm64_32-apple-watchos.test
new file mode 100644
index 0000000000000..1878911ac85be
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/arm64_32-apple-watchos.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=arm64_32-apple-watchos | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 415 available for 'arm64_32-apple-watchos'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: available: '__cospi'
+CHECK-NEXT: available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: available: '__sincospi_stret'
+CHECK-NEXT: available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: available: '__sinpi'
+CHECK-NEXT: available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: available: 'exp10'
+CHECK-NEXT: available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/armv7-apple-ios.test b/llvm/test/Analysis/TargetLibraryInfo/armv7-apple-ios.test
new file mode 100644
index 0000000000000..7889d8d4ebcc3
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/armv7-apple-ios.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=armv7-apple-ios | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 404 available for 'armv7-apple-ios'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android21.test b/llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android21.test
new file mode 100644
index 0000000000000..616be91e001ac
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android21.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=armv7-unknown-linux-android21 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 405 available for 'armv7-unknown-linux-android21'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android28.test b/llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android28.test
new file mode 100644
index 0000000000000..4e4b4736a9d7f
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/armv7-unknown-linux-android28.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=armv7-unknown-linux-android28 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 415 available for 'armv7-unknown-linux-android28'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/armv7s-apple-ios7.0.test b/llvm/test/Analysis/TargetLibraryInfo/armv7s-apple-ios7.0.test
new file mode 100644
index 0000000000000..03cb8c6915331
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/armv7s-apple-ios7.0.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=armv7s-apple-ios7.0 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 415 available for 'armv7s-apple-ios7.0'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: available: '__cospi'
+CHECK-NEXT: available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: available: '__sincospi_stret'
+CHECK-NEXT: available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: available: '__sinpi'
+CHECK-NEXT: available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: available: 'exp10'
+CHECK-NEXT: available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/dxil-pc-shadermodel6.3-library.test b/llvm/test/Analysis/TargetLibraryInfo/dxil-pc-shadermodel6.3-library.test
new file mode 100644
index 0000000000000..43990e4787a62
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/dxil-pc-shadermodel6.3-library.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=dxil-pc-shadermodel6.3-library | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 0 available for 'dxil-pc-shadermodel6.3-library'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: not available: '__atomic_load'
+CHECK-NEXT: not available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: not available: '__cxa_atexit'
+CHECK-NEXT: not available: 'atexit'
+CHECK-NEXT: not available: 'abort'
+CHECK-NEXT: not available: 'exit'
+CHECK-NEXT: not available: '_Exit'
+CHECK-NEXT: not available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: not available: '__cxa_throw'
+CHECK-NEXT: not available: '__cxa_guard_abort'
+CHECK-NEXT: not available: '__cxa_guard_acquire'
+CHECK-NEXT: not available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: not available: '__kmpc_alloc_shared'
+CHECK-NEXT: not available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: not available: '__memccpy_chk'
+CHECK-NEXT: not available: '__memcpy_chk'
+CHECK-NEXT: not available: '__memmove_chk'
+CHECK-NEXT: not available: '__mempcpy_chk'
+CHECK-NEXT: not available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: not available: '__snprintf_chk'
+CHECK-NEXT: not available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: not available: '__stpcpy_chk'
+CHECK-NEXT: not available: '__stpncpy_chk'
+CHECK-NEXT: not available: '__strcat_chk'
+CHECK-NEXT: not available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: not available: '__strlcat_chk'
+CHECK-NEXT: not available: '__strlcpy_chk'
+CHECK-NEXT: not available: '__strlen_chk'
+CHECK-NEXT: not available: '__strncat_chk'
+CHECK-NEXT: not available: '__strncpy_chk'
+CHECK-NEXT: not available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: not available: '__vsnprintf_chk'
+CHECK-NEXT: not available: '__vsprintf_chk'
+CHECK-NEXT: not available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: not available: 'acos'
+CHECK-NEXT: not available: 'acosf'
+CHECK-NEXT: not available: 'acosh'
+CHECK-NEXT: not available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: not available: 'aligned_alloc'
+CHECK-NEXT: not available: 'asin'
+CHECK-NEXT: not available: 'asinf'
+CHECK-NEXT: not available: 'asinh'
+CHECK-NEXT: not available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: not available: 'atan'
+CHECK-NEXT: not available: 'atan2'
+CHECK-NEXT: not available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: not available: 'atanf'
+CHECK-NEXT: not available: 'atanh'
+CHECK-NEXT: not available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: not available: 'atof'
+CHECK-NEXT: not available: 'atoi'
+CHECK-NEXT: not available: 'atol'
+CHECK-NEXT: not available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: not available: 'cabs'
+CHECK-NEXT: not available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: not available: 'calloc'
+CHECK-NEXT: not available: 'cbrt'
+CHECK-NEXT: not available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: not available: 'ceil'
+CHECK-NEXT: not available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: not available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: not available: 'copysign'
+CHECK-NEXT: not available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: not available: 'cos'
+CHECK-NEXT: not available: 'cosf'
+CHECK-NEXT: not available: 'cosh'
+CHECK-NEXT: not available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: not available: 'erf'
+CHECK-NEXT: not available: 'erff'
+CHECK-NEXT: not available: 'erfl'
+CHECK-NEXT: not available: 'tgamma'
+CHECK-NEXT: not available: 'tgammaf'
+CHECK-NEXT: not available: 'tgammal'
+CHECK-NEXT: not available: 'execl'
+CHECK-NEXT: not available: 'execle'
+CHECK-NEXT: not available: 'execlp'
+CHECK-NEXT: not available: 'execv'
+CHECK-NEXT: not available: 'execvP'
+CHECK-NEXT: not available: 'execve'
+CHECK-NEXT: not available: 'execvp'
+CHECK-NEXT: not available: 'execvpe'
+CHECK-NEXT: not available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: not available: 'exp2'
+CHECK-NEXT: not available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: not available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: not available: 'expm1'
+CHECK-NEXT: not available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: not available: 'fabs'
+CHECK-NEXT: not available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: not available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: not available: 'feof'
+CHECK-NEXT: not available: 'ferror'
+CHECK-NEXT: not available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: not available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: not available: 'fgetpos'
+CHECK-NEXT: not available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: not available: 'floor'
+CHECK-NEXT: not available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: not available: 'fmax'
+CHECK-NEXT: not available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: not available: 'fmin'
+CHECK-NEXT: not available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: not available: 'fmaximum_num'
+CHECK-NEXT: not available: 'fmaximum_numf'
+CHECK-NEXT: not available: 'fmaximum_numl'
+CHECK-NEXT: not available: 'fminimum_num'
+CHECK-NEXT: not available: 'fminimum_numf'
+CHECK-NEXT: not available: 'fminimum_numl'
+CHECK-NEXT: not available: 'fmod'
+CHECK-NEXT: not available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: not available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: not available: 'fork'
+CHECK-NEXT: not available: 'fprintf'
+CHECK-NEXT: not available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: not available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: not available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: not available: 'free'
+CHECK-NEXT: not available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: not available: 'fscanf'
+CHECK-NEXT: not available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: not available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: not available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: not available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: not available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: not available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: not available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: not available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: not available: 'hypot'
+CHECK-NEXT: not available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: not available: 'isascii'
+CHECK-NEXT: not available: 'isdigit'
+CHECK-NEXT: not available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: not available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: not available: 'llabs'
+CHECK-NEXT: not available: 'log'
+CHECK-NEXT: not available: 'log10'
+CHECK-NEXT: not available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: not available: 'log1p'
+CHECK-NEXT: not available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: not available: 'log2'
+CHECK-NEXT: not available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: not available: 'ilogb'
+CHECK-NEXT: not available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: not available: 'logb'
+CHECK-NEXT: not available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: not available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: not available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: not available: 'memchr'
+CHECK-NEXT: not available: 'memcmp'
+CHECK-NEXT: not available: 'memcpy'
+CHECK-NEXT: not available: 'memmove'
+CHECK-NEXT: not available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: not available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: not available: 'mktime'
+CHECK-NEXT: not available: 'modf'
+CHECK-NEXT: not available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: not available: 'nan'
+CHECK-NEXT: not available: 'nanf'
+CHECK-NEXT: not available: 'nanl'
+CHECK-NEXT: not available: 'nearbyint'
+CHECK-NEXT: not available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: not available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: not available: 'posix_memalign'
+CHECK-NEXT: not available: 'pow'
+CHECK-NEXT: not available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: not available: 'printf'
+CHECK-NEXT: not available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: not available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: not available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: not available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: not available: 'realloc'
+CHECK-NEXT: not available: 'reallocf'
+CHECK-NEXT: not available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: not available: 'remainder'
+CHECK-NEXT: not available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: not available: 'remquo'
+CHECK-NEXT: not available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: not available: 'fdim'
+CHECK-NEXT: not available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: not available: 'remove'
+CHECK-NEXT: not available: 'rename'
+CHECK-NEXT: not available: 'rewind'
+CHECK-NEXT: not available: 'rint'
+CHECK-NEXT: not available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: not available: 'round'
+CHECK-NEXT: not available: 'roundeven'
+CHECK-NEXT: not available: 'roundevenf'
+CHECK-NEXT: not available: 'roundevenl'
+CHECK-NEXT: not available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: not available: 'scalbln'
+CHECK-NEXT: not available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: not available: 'scalbn'
+CHECK-NEXT: not available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: not available: 'scanf'
+CHECK-NEXT: not available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: not available: 'setvbuf'
+CHECK-NEXT: not available: 'sin'
+CHECK-NEXT: not available: 'sinf'
+CHECK-NEXT: not available: 'sinh'
+CHECK-NEXT: not available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: not available: 'sincos'
+CHECK-NEXT: not available: 'sincosf'
+CHECK-NEXT: not available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: not available: 'snprintf'
+CHECK-NEXT: not available: 'sprintf'
+CHECK-NEXT: not available: 'sqrt'
+CHECK-NEXT: not available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: not available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: not available: 'strcat'
+CHECK-NEXT: not available: 'strchr'
+CHECK-NEXT: not available: 'strcmp'
+CHECK-NEXT: not available: 'strcoll'
+CHECK-NEXT: not available: 'strcpy'
+CHECK-NEXT: not available: 'strcspn'
+CHECK-NEXT: not available: 'strdup'
+CHECK-NEXT: not available: 'strlcat'
+CHECK-NEXT: not available: 'strlcpy'
+CHECK-NEXT: not available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: not available: 'strncat'
+CHECK-NEXT: not available: 'strncmp'
+CHECK-NEXT: not available: 'strncpy'
+CHECK-NEXT: not available: 'strndup'
+CHECK-NEXT: not available: 'strnlen'
+CHECK-NEXT: not available: 'strpbrk'
+CHECK-NEXT: not available: 'strrchr'
+CHECK-NEXT: not available: 'strspn'
+CHECK-NEXT: not available: 'strstr'
+CHECK-NEXT: not available: 'strtod'
+CHECK-NEXT: not available: 'strtof'
+CHECK-NEXT: not available: 'strtok'
+CHECK-NEXT: not available: 'strtok_r'
+CHECK-NEXT: not available: 'strtol'
+CHECK-NEXT: not available: 'strtold'
+CHECK-NEXT: not available: 'strtoll'
+CHECK-NEXT: not available: 'strtoul'
+CHECK-NEXT: not available: 'strtoull'
+CHECK-NEXT: not available: 'strxfrm'
+CHECK-NEXT: not available: 'system'
+CHECK-NEXT: not available: 'tan'
+CHECK-NEXT: not available: 'tanf'
+CHECK-NEXT: not available: 'tanh'
+CHECK-NEXT: not available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: not available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: not available: 'toascii'
+CHECK-NEXT: not available: 'trunc'
+CHECK-NEXT: not available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: not available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: not available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: not available: 'vfprintf'
+CHECK-NEXT: not available: 'vfscanf'
+CHECK-NEXT: not available: 'vprintf'
+CHECK-NEXT: not available: 'vscanf'
+CHECK-NEXT: not available: 'vsnprintf'
+CHECK-NEXT: not available: 'vsprintf'
+CHECK-NEXT: not available: 'vsscanf'
+CHECK-NEXT: not available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.6.0.test b/llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.6.0.test
new file mode 100644
index 0000000000000..fcb32959ecdb1
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.6.0.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=i386-apple-macosx10.6.0 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 410 available for 'i386-apple-macosx10.6.0'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.7.0.test b/llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.7.0.test
new file mode 100644
index 0000000000000..cb7b0b176905e
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/i386-apple-macosx10.7.0.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=i386-apple-macosx10.7.0 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 410 available for 'i386-apple-macosx10.7.0'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/i386-pc-linux-gnu.test b/llvm/test/Analysis/TargetLibraryInfo/i386-pc-linux-gnu.test
new file mode 100644
index 0000000000000..ef3adec556ab9
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/i386-pc-linux-gnu.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=i386-pc-linux-gnu | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 477 available for 'i386-pc-linux-gnu'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: available: '_IO_getc'
+CHECK-NEXT: available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: available: '__acos_finite'
+CHECK-NEXT: available: '__acosf_finite'
+CHECK-NEXT: available: '__acosh_finite'
+CHECK-NEXT: available: '__acoshf_finite'
+CHECK-NEXT: available: '__acoshl_finite'
+CHECK-NEXT: available: '__acosl_finite'
+CHECK-NEXT: available: '__asin_finite'
+CHECK-NEXT: available: '__asinf_finite'
+CHECK-NEXT: available: '__asinl_finite'
+CHECK-NEXT: available: '__atan2_finite'
+CHECK-NEXT: available: '__atan2f_finite'
+CHECK-NEXT: available: '__atan2l_finite'
+CHECK-NEXT: available: '__atanh_finite'
+CHECK-NEXT: available: '__atanhf_finite'
+CHECK-NEXT: available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: available: '__cosh_finite'
+CHECK-NEXT: available: '__coshf_finite'
+CHECK-NEXT: available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: available: '__exp10_finite'
+CHECK-NEXT: available: '__exp10f_finite'
+CHECK-NEXT: available: '__exp10l_finite'
+CHECK-NEXT: available: '__exp2_finite'
+CHECK-NEXT: available: '__exp2f_finite'
+CHECK-NEXT: available: '__exp2l_finite'
+CHECK-NEXT: available: '__exp_finite'
+CHECK-NEXT: available: '__expf_finite'
+CHECK-NEXT: available: '__expl_finite'
+CHECK-NEXT: available: '__isoc99_scanf'
+CHECK-NEXT: available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: available: '__log10_finite'
+CHECK-NEXT: available: '__log10f_finite'
+CHECK-NEXT: available: '__log10l_finite'
+CHECK-NEXT: available: '__log2_finite'
+CHECK-NEXT: available: '__log2f_finite'
+CHECK-NEXT: available: '__log2l_finite'
+CHECK-NEXT: available: '__log_finite'
+CHECK-NEXT: available: '__logf_finite'
+CHECK-NEXT: available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: available: '__pow_finite'
+CHECK-NEXT: available: '__powf_finite'
+CHECK-NEXT: available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: available: '__sinh_finite'
+CHECK-NEXT: available: '__sinhf_finite'
+CHECK-NEXT: available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: available: '__sqrt_finite'
+CHECK-NEXT: available: '__sqrtf_finite'
+CHECK-NEXT: available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/i386-pc-windows-msvc.test b/llvm/test/Analysis/TargetLibraryInfo/i386-pc-windows-msvc.test
new file mode 100644
index 0000000000000..65eb2f0e25869
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/i386-pc-windows-msvc.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=i386-pc-windows-msvc | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 252 available for 'i386-pc-windows-msvc'
+CHECK-NEXT: available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: not available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: not available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: not available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: not available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: not available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: not available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: not available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: not available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: not available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: not available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: not available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: not available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: not available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: not available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: not available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: not available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: not available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: not available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: not available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: not available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: not available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: not available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: not available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: not available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/i386-unknown-linux-musl.test b/llvm/test/Analysis/TargetLibraryInfo/i386-unknown-linux-musl.test
new file mode 100644
index 0000000000000..b2ddfb4ca07fa
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/i386-unknown-linux-musl.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=i386-unknown-linux-musl | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 406 available for 'i386-unknown-linux-musl'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/i686-apple-macosx.test b/llvm/test/Analysis/TargetLibraryInfo/i686-apple-macosx.test
new file mode 100644
index 0000000000000..d0e4de4b9b38c
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/i686-apple-macosx.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=i686-apple-macosx | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 407 available for 'i686-apple-macosx'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/i686-pc-cygwin.test b/llvm/test/Analysis/TargetLibraryInfo/i686-pc-cygwin.test
new file mode 100644
index 0000000000000..69549dc9fe5d3
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/i686-pc-cygwin.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=i686-pc-cygwin | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 402 available for 'i686-pc-cygwin'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/linux-arm-gnueabihf.test b/llvm/test/Analysis/TargetLibraryInfo/linux-arm-gnueabihf.test
new file mode 100644
index 0000000000000..01fab81c89f9d
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/linux-arm-gnueabihf.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=linux-arm-gnueabihf | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 402 available for 'linux-arm-gnueabihf'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/nvptx64-nvidia-cuda.test b/llvm/test/Analysis/TargetLibraryInfo/nvptx64-nvidia-cuda.test
new file mode 100644
index 0000000000000..cad2787f2a2cd
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/nvptx64-nvidia-cuda.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=nvptx64-nvidia-cuda | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 5 available for 'nvptx64-nvidia-cuda'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: not available: '__atomic_load'
+CHECK-NEXT: not available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: not available: '__cxa_atexit'
+CHECK-NEXT: not available: 'atexit'
+CHECK-NEXT: not available: 'abort'
+CHECK-NEXT: not available: 'exit'
+CHECK-NEXT: not available: '_Exit'
+CHECK-NEXT: not available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: not available: '__cxa_throw'
+CHECK-NEXT: not available: '__cxa_guard_abort'
+CHECK-NEXT: not available: '__cxa_guard_acquire'
+CHECK-NEXT: not available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: not available: '__memccpy_chk'
+CHECK-NEXT: not available: '__memcpy_chk'
+CHECK-NEXT: not available: '__memmove_chk'
+CHECK-NEXT: not available: '__mempcpy_chk'
+CHECK-NEXT: not available: '__memset_chk'
+CHECK-NEXT: available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: not available: '__snprintf_chk'
+CHECK-NEXT: not available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: not available: '__stpcpy_chk'
+CHECK-NEXT: not available: '__stpncpy_chk'
+CHECK-NEXT: not available: '__strcat_chk'
+CHECK-NEXT: not available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: not available: '__strlcat_chk'
+CHECK-NEXT: not available: '__strlcpy_chk'
+CHECK-NEXT: not available: '__strlen_chk'
+CHECK-NEXT: not available: '__strncat_chk'
+CHECK-NEXT: not available: '__strncpy_chk'
+CHECK-NEXT: not available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: not available: '__vsnprintf_chk'
+CHECK-NEXT: not available: '__vsprintf_chk'
+CHECK-NEXT: not available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: not available: 'acos'
+CHECK-NEXT: not available: 'acosf'
+CHECK-NEXT: not available: 'acosh'
+CHECK-NEXT: not available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: not available: 'aligned_alloc'
+CHECK-NEXT: not available: 'asin'
+CHECK-NEXT: not available: 'asinf'
+CHECK-NEXT: not available: 'asinh'
+CHECK-NEXT: not available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: not available: 'atan'
+CHECK-NEXT: not available: 'atan2'
+CHECK-NEXT: not available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: not available: 'atanf'
+CHECK-NEXT: not available: 'atanh'
+CHECK-NEXT: not available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: not available: 'atof'
+CHECK-NEXT: not available: 'atoi'
+CHECK-NEXT: not available: 'atol'
+CHECK-NEXT: not available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: not available: 'cabs'
+CHECK-NEXT: not available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: not available: 'calloc'
+CHECK-NEXT: not available: 'cbrt'
+CHECK-NEXT: not available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: not available: 'ceil'
+CHECK-NEXT: not available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: not available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: not available: 'copysign'
+CHECK-NEXT: not available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: not available: 'cos'
+CHECK-NEXT: not available: 'cosf'
+CHECK-NEXT: not available: 'cosh'
+CHECK-NEXT: not available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: not available: 'erf'
+CHECK-NEXT: not available: 'erff'
+CHECK-NEXT: not available: 'erfl'
+CHECK-NEXT: not available: 'tgamma'
+CHECK-NEXT: not available: 'tgammaf'
+CHECK-NEXT: not available: 'tgammal'
+CHECK-NEXT: not available: 'execl'
+CHECK-NEXT: not available: 'execle'
+CHECK-NEXT: not available: 'execlp'
+CHECK-NEXT: not available: 'execv'
+CHECK-NEXT: not available: 'execvP'
+CHECK-NEXT: not available: 'execve'
+CHECK-NEXT: not available: 'execvp'
+CHECK-NEXT: not available: 'execvpe'
+CHECK-NEXT: not available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: not available: 'exp2'
+CHECK-NEXT: not available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: not available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: not available: 'expm1'
+CHECK-NEXT: not available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: not available: 'fabs'
+CHECK-NEXT: not available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: not available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: not available: 'feof'
+CHECK-NEXT: not available: 'ferror'
+CHECK-NEXT: not available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: not available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: not available: 'fgetpos'
+CHECK-NEXT: not available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: not available: 'floor'
+CHECK-NEXT: not available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: not available: 'fmax'
+CHECK-NEXT: not available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: not available: 'fmin'
+CHECK-NEXT: not available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: not available: 'fmaximum_num'
+CHECK-NEXT: not available: 'fmaximum_numf'
+CHECK-NEXT: not available: 'fmaximum_numl'
+CHECK-NEXT: not available: 'fminimum_num'
+CHECK-NEXT: not available: 'fminimum_numf'
+CHECK-NEXT: not available: 'fminimum_numl'
+CHECK-NEXT: not available: 'fmod'
+CHECK-NEXT: not available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: not available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: not available: 'fork'
+CHECK-NEXT: not available: 'fprintf'
+CHECK-NEXT: not available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: not available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: not available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: not available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: not available: 'fscanf'
+CHECK-NEXT: not available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: not available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: not available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: not available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: not available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: not available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: not available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: not available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: not available: 'hypot'
+CHECK-NEXT: not available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: not available: 'isascii'
+CHECK-NEXT: not available: 'isdigit'
+CHECK-NEXT: not available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: not available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: not available: 'llabs'
+CHECK-NEXT: not available: 'log'
+CHECK-NEXT: not available: 'log10'
+CHECK-NEXT: not available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: not available: 'log1p'
+CHECK-NEXT: not available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: not available: 'log2'
+CHECK-NEXT: not available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: not available: 'ilogb'
+CHECK-NEXT: not available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: not available: 'logb'
+CHECK-NEXT: not available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: not available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: not available: 'memchr'
+CHECK-NEXT: not available: 'memcmp'
+CHECK-NEXT: not available: 'memcpy'
+CHECK-NEXT: not available: 'memmove'
+CHECK-NEXT: not available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: not available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: not available: 'mktime'
+CHECK-NEXT: not available: 'modf'
+CHECK-NEXT: not available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: not available: 'nan'
+CHECK-NEXT: not available: 'nanf'
+CHECK-NEXT: not available: 'nanl'
+CHECK-NEXT: not available: 'nearbyint'
+CHECK-NEXT: not available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: not available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: not available: 'posix_memalign'
+CHECK-NEXT: not available: 'pow'
+CHECK-NEXT: not available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: not available: 'printf'
+CHECK-NEXT: not available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: not available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: not available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: not available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: not available: 'realloc'
+CHECK-NEXT: not available: 'reallocf'
+CHECK-NEXT: not available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: not available: 'remainder'
+CHECK-NEXT: not available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: not available: 'remquo'
+CHECK-NEXT: not available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: not available: 'fdim'
+CHECK-NEXT: not available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: not available: 'remove'
+CHECK-NEXT: not available: 'rename'
+CHECK-NEXT: not available: 'rewind'
+CHECK-NEXT: not available: 'rint'
+CHECK-NEXT: not available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: not available: 'round'
+CHECK-NEXT: not available: 'roundeven'
+CHECK-NEXT: not available: 'roundevenf'
+CHECK-NEXT: not available: 'roundevenl'
+CHECK-NEXT: not available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: not available: 'scalbln'
+CHECK-NEXT: not available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: not available: 'scalbn'
+CHECK-NEXT: not available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: not available: 'scanf'
+CHECK-NEXT: not available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: not available: 'setvbuf'
+CHECK-NEXT: not available: 'sin'
+CHECK-NEXT: not available: 'sinf'
+CHECK-NEXT: not available: 'sinh'
+CHECK-NEXT: not available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: not available: 'sincos'
+CHECK-NEXT: not available: 'sincosf'
+CHECK-NEXT: not available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: not available: 'snprintf'
+CHECK-NEXT: not available: 'sprintf'
+CHECK-NEXT: not available: 'sqrt'
+CHECK-NEXT: not available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: not available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: not available: 'strcat'
+CHECK-NEXT: not available: 'strchr'
+CHECK-NEXT: not available: 'strcmp'
+CHECK-NEXT: not available: 'strcoll'
+CHECK-NEXT: not available: 'strcpy'
+CHECK-NEXT: not available: 'strcspn'
+CHECK-NEXT: not available: 'strdup'
+CHECK-NEXT: not available: 'strlcat'
+CHECK-NEXT: not available: 'strlcpy'
+CHECK-NEXT: not available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: not available: 'strncat'
+CHECK-NEXT: not available: 'strncmp'
+CHECK-NEXT: not available: 'strncpy'
+CHECK-NEXT: not available: 'strndup'
+CHECK-NEXT: not available: 'strnlen'
+CHECK-NEXT: not available: 'strpbrk'
+CHECK-NEXT: not available: 'strrchr'
+CHECK-NEXT: not available: 'strspn'
+CHECK-NEXT: not available: 'strstr'
+CHECK-NEXT: not available: 'strtod'
+CHECK-NEXT: not available: 'strtof'
+CHECK-NEXT: not available: 'strtok'
+CHECK-NEXT: not available: 'strtok_r'
+CHECK-NEXT: not available: 'strtol'
+CHECK-NEXT: not available: 'strtold'
+CHECK-NEXT: not available: 'strtoll'
+CHECK-NEXT: not available: 'strtoul'
+CHECK-NEXT: not available: 'strtoull'
+CHECK-NEXT: not available: 'strxfrm'
+CHECK-NEXT: not available: 'system'
+CHECK-NEXT: not available: 'tan'
+CHECK-NEXT: not available: 'tanf'
+CHECK-NEXT: not available: 'tanh'
+CHECK-NEXT: not available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: not available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: not available: 'toascii'
+CHECK-NEXT: not available: 'trunc'
+CHECK-NEXT: not available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: not available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: not available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: not available: 'vfprintf'
+CHECK-NEXT: not available: 'vfscanf'
+CHECK-NEXT: not available: 'vprintf'
+CHECK-NEXT: not available: 'vscanf'
+CHECK-NEXT: not available: 'vsnprintf'
+CHECK-NEXT: not available: 'vsprintf'
+CHECK-NEXT: not available: 'vsscanf'
+CHECK-NEXT: not available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/powerpc64-ibm-aix-xcoff.test b/llvm/test/Analysis/TargetLibraryInfo/powerpc64-ibm-aix-xcoff.test
new file mode 100644
index 0000000000000..1650d9f6c5aff
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/powerpc64-ibm-aix-xcoff.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=powerpc64-ibm-aix-xcoff | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 405 available for 'powerpc64-ibm-aix-xcoff'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: available: 'vec_calloc'
+CHECK-NEXT: available: 'vec_free'
+CHECK-NEXT: available: 'vec_malloc'
+CHECK-NEXT: available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/sparc64-unknown-solaris.test b/llvm/test/Analysis/TargetLibraryInfo/sparc64-unknown-solaris.test
new file mode 100644
index 0000000000000..efbb147962334
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/sparc64-unknown-solaris.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=sparc64-unknown-solaris | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 403 available for 'sparc64-unknown-solaris'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/thumbv7-apple-ios3.0.0.test b/llvm/test/Analysis/TargetLibraryInfo/thumbv7-apple-ios3.0.0.test
new file mode 100644
index 0000000000000..4cb665b979ff1
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/thumbv7-apple-ios3.0.0.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=thumbv7-apple-ios3.0.0 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 407 available for 'thumbv7-apple-ios3.0.0'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/thumbv7-windows-msvc.test b/llvm/test/Analysis/TargetLibraryInfo/thumbv7-windows-msvc.test
new file mode 100644
index 0000000000000..dee2a3fb50bb3
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/thumbv7-windows-msvc.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=thumbv7-windows-msvc | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 402 available for 'thumbv7-windows-msvc'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/wasm64-unknown-emscripten.test b/llvm/test/Analysis/TargetLibraryInfo/wasm64-unknown-emscripten.test
new file mode 100644
index 0000000000000..1722725019ab6
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/wasm64-unknown-emscripten.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=wasm64-unknown-emscripten | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 408 available for 'wasm64-unknown-emscripten'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: available: '__small_fprintf'
+CHECK-NEXT: available: '__small_printf'
+CHECK-NEXT: available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.9.0.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.9.0.test
new file mode 100644
index 0000000000000..9496e9cdd207c
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.9.0.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-apple-darwin10.9.0 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 410 available for 'x86_64-apple-darwin10.9.0'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.test
new file mode 100644
index 0000000000000..11ce2131df25b
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-darwin10.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-apple-darwin10 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 410 available for 'x86_64-apple-darwin10'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-macosx10.5.0.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-macosx10.5.0.test
new file mode 100644
index 0000000000000..14ac222d35c87
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-apple-macosx10.5.0.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-apple-macosx10.5.0 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 410 available for 'x86_64-apple-macosx10.5.0'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: available: 'memset_pattern16'
+CHECK-NEXT: available: 'memset_pattern4'
+CHECK-NEXT: available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-cygwin.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-cygwin.test
new file mode 100644
index 0000000000000..c23002c3ffd9c
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-cygwin.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-pc-cygwin | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 402 available for 'x86_64-pc-cygwin'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc.test
new file mode 100644
index 0000000000000..d4dda65f18788
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-pc-windows-msvc | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 275 available for 'x86_64-pc-windows-msvc'
+CHECK-NEXT: available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: not available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc17.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc17.test
new file mode 100644
index 0000000000000..2653cba3a0271
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc17.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-pc-windows-msvc17 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 242 available for 'x86_64-pc-windows-msvc17'
+CHECK-NEXT: available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: not available: 'acosh'
+CHECK-NEXT: not available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: not available: 'asinh'
+CHECK-NEXT: not available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: not available: 'atanh'
+CHECK-NEXT: not available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: not available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: not available: 'cbrt'
+CHECK-NEXT: not available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: not available: 'exp2'
+CHECK-NEXT: not available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: not available: 'expm1'
+CHECK-NEXT: not available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: not available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: not available: 'fmax'
+CHECK-NEXT: not available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: not available: 'fmin'
+CHECK-NEXT: not available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: not available: 'log1p'
+CHECK-NEXT: not available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: not available: 'log2'
+CHECK-NEXT: not available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: not available: 'ilogb'
+CHECK-NEXT: not available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: not available: 'rint'
+CHECK-NEXT: not available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: not available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: not available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: not available: 'scalbln'
+CHECK-NEXT: not available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: not available: 'scalbn'
+CHECK-NEXT: not available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: not available: 'trunc'
+CHECK-NEXT: not available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc19.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc19.test
new file mode 100644
index 0000000000000..0844142daced6
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-pc-windows-msvc19.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-pc-windows-msvc19 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 275 available for 'x86_64-pc-windows-msvc19'
+CHECK-NEXT: available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: not available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: not available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: not available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: not available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: not available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: not available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: not available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '__size_returning_new'
+CHECK-NEXT: not available: '__size_returning_new_hot_cold'
+CHECK-NEXT: not available: '__size_returning_new_aligned'
+CHECK-NEXT: not available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: not available: 'acoshl'
+CHECK-NEXT: not available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: not available: 'asinhl'
+CHECK-NEXT: not available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: not available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: not available: 'atanhl'
+CHECK-NEXT: not available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: not available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: not available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: not available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: not available: 'coshl'
+CHECK-NEXT: not available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: not available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: not available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: not available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: not available: 'fabsf'
+CHECK-NEXT: not available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: not available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: not available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: not available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: not available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: not available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: not available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: not available: 'frexpf'
+CHECK-NEXT: not available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: not available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: not available: 'ldexpf'
+CHECK-NEXT: not available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: not available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: not available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: not available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: not available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: not available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: not available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: not available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: not available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: not available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: not available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: not available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: not available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: not available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: not available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: not available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: not available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: not available: 'sinhl'
+CHECK-NEXT: not available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: not available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: not available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: not available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: not available: 'tanhl'
+CHECK-NEXT: not available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: not available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-scei-ps4.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-scei-ps4.test
new file mode 100644
index 0000000000000..2eae35ffdb0ad
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-scei-ps4.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-scei-ps4 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 289 available for 'x86_64-scei-ps4'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: not available: '__atomic_load'
+CHECK-NEXT: not available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: not available: '__kmpc_alloc_shared'
+CHECK-NEXT: not available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: not available: '__memccpy_chk'
+CHECK-NEXT: not available: '__memcpy_chk'
+CHECK-NEXT: not available: '__memmove_chk'
+CHECK-NEXT: not available: '__mempcpy_chk'
+CHECK-NEXT: not available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: not available: '__snprintf_chk'
+CHECK-NEXT: not available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: not available: '__stpcpy_chk'
+CHECK-NEXT: not available: '__stpncpy_chk'
+CHECK-NEXT: not available: '__strcat_chk'
+CHECK-NEXT: not available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: not available: '__strlcat_chk'
+CHECK-NEXT: not available: '__strlcpy_chk'
+CHECK-NEXT: not available: '__strlen_chk'
+CHECK-NEXT: not available: '__strncat_chk'
+CHECK-NEXT: not available: '__strncpy_chk'
+CHECK-NEXT: not available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: not available: '__vsnprintf_chk'
+CHECK-NEXT: not available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: not available: 'cabs'
+CHECK-NEXT: not available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: not available: 'execl'
+CHECK-NEXT: not available: 'execle'
+CHECK-NEXT: not available: 'execlp'
+CHECK-NEXT: not available: 'execv'
+CHECK-NEXT: not available: 'execvP'
+CHECK-NEXT: not available: 'execve'
+CHECK-NEXT: not available: 'execvp'
+CHECK-NEXT: not available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: not available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: not available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: not available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: not available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: not available: 'reallocf'
+CHECK-NEXT: not available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: not available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: not available: 'roundeven'
+CHECK-NEXT: not available: 'roundevenf'
+CHECK-NEXT: not available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: not available: 'strlcat'
+CHECK-NEXT: not available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: not available: 'strndup'
+CHECK-NEXT: not available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: not available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: not available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: not available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: not available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-sie-ps5.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-sie-ps5.test
new file mode 100644
index 0000000000000..9cc6cb746393d
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-sie-ps5.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-sie-ps5 | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 289 available for 'x86_64-sie-ps5'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: not available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: not available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: not available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: not available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: not available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: not available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: not available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: not available: '__atomic_load'
+CHECK-NEXT: not available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: not available: '__kmpc_alloc_shared'
+CHECK-NEXT: not available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: not available: '__memccpy_chk'
+CHECK-NEXT: not available: '__memcpy_chk'
+CHECK-NEXT: not available: '__memmove_chk'
+CHECK-NEXT: not available: '__mempcpy_chk'
+CHECK-NEXT: not available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: not available: '__snprintf_chk'
+CHECK-NEXT: not available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: not available: '__stpcpy_chk'
+CHECK-NEXT: not available: '__stpncpy_chk'
+CHECK-NEXT: not available: '__strcat_chk'
+CHECK-NEXT: not available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: not available: '__strlcat_chk'
+CHECK-NEXT: not available: '__strlcpy_chk'
+CHECK-NEXT: not available: '__strlen_chk'
+CHECK-NEXT: not available: '__strncat_chk'
+CHECK-NEXT: not available: '__strncpy_chk'
+CHECK-NEXT: not available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: not available: '__vsnprintf_chk'
+CHECK-NEXT: not available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: not available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: not available: 'bcopy'
+CHECK-NEXT: not available: 'bzero'
+CHECK-NEXT: not available: 'cabs'
+CHECK-NEXT: not available: 'cabsf'
+CHECK-NEXT: not available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: not available: 'chmod'
+CHECK-NEXT: not available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: not available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: not available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: not available: 'execl'
+CHECK-NEXT: not available: 'execle'
+CHECK-NEXT: not available: 'execlp'
+CHECK-NEXT: not available: 'execv'
+CHECK-NEXT: not available: 'execvP'
+CHECK-NEXT: not available: 'execve'
+CHECK-NEXT: not available: 'execvp'
+CHECK-NEXT: not available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: not available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: not available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: not available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: not available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: not available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: not available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: not available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: not available: 'ftrylockfile'
+CHECK-NEXT: not available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: not available: 'getenv'
+CHECK-NEXT: not available: 'getitimer'
+CHECK-NEXT: not available: 'getlogin_r'
+CHECK-NEXT: not available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: not available: 'gettimeofday'
+CHECK-NEXT: not available: 'htonl'
+CHECK-NEXT: not available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: not available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: not available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: not available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: available: 'memalign'
+CHECK-NEXT: not available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: not available: 'mempcpy'
+CHECK-NEXT: not available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: not available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: not available: 'ntohl'
+CHECK-NEXT: not available: 'ntohs'
+CHECK-NEXT: not available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: not available: 'opendir'
+CHECK-NEXT: not available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: not available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: not available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: not available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: not available: 'read'
+CHECK-NEXT: not available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: not available: 'reallocf'
+CHECK-NEXT: not available: 'reallocarray'
+CHECK-NEXT: not available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: not available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: not available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: not available: 'roundeven'
+CHECK-NEXT: not available: 'roundevenf'
+CHECK-NEXT: not available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: not available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: not available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: not available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: not available: 'stpcpy'
+CHECK-NEXT: not available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: not available: 'strlcat'
+CHECK-NEXT: not available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: not available: 'strndup'
+CHECK-NEXT: not available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: not available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: not available: 'times'
+CHECK-NEXT: not available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: not available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: not available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: not available: 'unlink'
+CHECK-NEXT: not available: 'unsetenv'
+CHECK-NEXT: not available: 'utime'
+CHECK-NEXT: not available: 'utimes'
+CHECK-NEXT: not available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: not available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-freebsd.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-freebsd.test
new file mode 100644
index 0000000000000..72c855af37ad8
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-freebsd.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-unknown-freebsd | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 408 available for 'x86_64-unknown-freebsd'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: available: 'ffsl'
+CHECK-NEXT: available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: available: 'fls'
+CHECK-NEXT: available: 'flsl'
+CHECK-NEXT: available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown-gnu.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown-gnu.test
new file mode 100644
index 0000000000000..1dd39c1555dd3
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown-gnu.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-unknown-unknown-gnu | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 402 available for 'x86_64-unknown-unknown-gnu'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown.test b/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown.test
new file mode 100644
index 0000000000000..fccf11329bbdb
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/x86_64-unknown-unknown.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=x86_64-unknown-unknown | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 402 available for 'x86_64-unknown-unknown'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: not available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: not available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: not available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/test/Analysis/TargetLibraryInfo/xcore-xmos-elf.test b/llvm/test/Analysis/TargetLibraryInfo/xcore-xmos-elf.test
new file mode 100644
index 0000000000000..1f335487d28b6
--- /dev/null
+++ b/llvm/test/Analysis/TargetLibraryInfo/xcore-xmos-elf.test
@@ -0,0 +1,526 @@
+# RUN: llvm-tli-checker --dump-tli --triple=xcore-xmos-elf | FileCheck %s
+
+CHECK: TLI knows 523 symbols, 405 available for 'xcore-xmos-elf'
+CHECK-NEXT: not available: '??2 at YAPAXI@Z' aka void * __cdecl operator new(unsigned int)
+CHECK-NEXT: not available: '??2 at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??2 at YAPEAX_K@Z' aka void * __cdecl operator new(unsigned __int64)
+CHECK-NEXT: not available: '??2 at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new(unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPAXI@Z' aka void __cdecl operator delete(void *, unsigned int)
+CHECK-NEXT: not available: '??3 at YAXPEAX@Z' aka void __cdecl operator delete(void *)
+CHECK-NEXT: not available: '??3 at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete(void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??3 at YAXPEAX_K@Z' aka void __cdecl operator delete(void *, unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPAXI@Z' aka void * __cdecl operator new[](unsigned int)
+CHECK-NEXT: not available: '??_U at YAPAXIABUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned int, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_U at YAPEAX_K@Z' aka void * __cdecl operator new[](unsigned __int64)
+CHECK-NEXT: not available: '??_U at YAPEAX_KAEBUnothrow_t@std@@@Z' aka void * __cdecl operator new[](unsigned __int64, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPAXABUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPAXI@Z' aka void __cdecl operator delete[](void *, unsigned int)
+CHECK-NEXT: not available: '??_V at YAXPEAX@Z' aka void __cdecl operator delete[](void *)
+CHECK-NEXT: not available: '??_V at YAXPEAXAEBUnothrow_t@std@@@Z' aka void __cdecl operator delete[](void *, struct std::nothrow_t const &)
+CHECK-NEXT: not available: '??_V at YAXPEAX_K@Z' aka void __cdecl operator delete[](void *, unsigned __int64)
+CHECK-NEXT: not available: '_IO_getc'
+CHECK-NEXT: not available: '_IO_putc'
+CHECK-NEXT: available: '_ZdaPv' aka operator delete[](void*)
+CHECK-NEXT: available: '_ZdaPvRKSt9nothrow_t' aka operator delete[](void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_t' aka operator delete[](void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvSt11align_val_tRKSt9nothrow_t' aka operator delete[](void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdaPvj' aka operator delete[](void*, unsigned int)
+CHECK-NEXT: available: '_ZdaPvjSt11align_val_t' aka operator delete[](void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdaPvm' aka operator delete[](void*, unsigned long)
+CHECK-NEXT: available: '_ZdaPvmSt11align_val_t' aka operator delete[](void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPv' aka operator delete(void*)
+CHECK-NEXT: available: '_ZdlPvRKSt9nothrow_t' aka operator delete(void*, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_t' aka operator delete(void*, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvSt11align_val_tRKSt9nothrow_t' aka operator delete(void*, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZdlPvj' aka operator delete(void*, unsigned int)
+CHECK-NEXT: available: '_ZdlPvjSt11align_val_t' aka operator delete(void*, unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZdlPvm' aka operator delete(void*, unsigned long)
+CHECK-NEXT: available: '_ZdlPvmSt11align_val_t' aka operator delete(void*, unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_Znaj' aka operator new[](unsigned int)
+CHECK-NEXT: available: '_ZnajRKSt9nothrow_t' aka operator new[](unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnajSt11align_val_t' aka operator new[](unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnajSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znam' aka operator new[](unsigned long)
+CHECK-NEXT: available: '_Znam12__hot_cold_t' aka operator new[](unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t' aka operator new[](unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t' aka operator new[](unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new[](unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_Znwj' aka operator new(unsigned int)
+CHECK-NEXT: available: '_ZnwjRKSt9nothrow_t' aka operator new(unsigned int, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwjSt11align_val_t' aka operator new(unsigned int, std::align_val_t)
+CHECK-NEXT: available: '_ZnwjSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned int, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_Znwm' aka operator new(unsigned long)
+CHECK-NEXT: available: '_Znwm12__hot_cold_t' aka operator new(unsigned long, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t' aka operator new(unsigned long, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t' aka operator new(unsigned long, std::align_val_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, __hot_cold_t)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&)
+CHECK-NEXT: available: '_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t' aka operator new(unsigned long, std::align_val_t, std::nothrow_t const&, __hot_cold_t)
+CHECK-NEXT: available: '__size_returning_new'
+CHECK-NEXT: available: '__size_returning_new_hot_cold'
+CHECK-NEXT: available: '__size_returning_new_aligned'
+CHECK-NEXT: available: '__size_returning_new_aligned_hot_cold'
+CHECK-NEXT: not available: '__acos_finite'
+CHECK-NEXT: not available: '__acosf_finite'
+CHECK-NEXT: not available: '__acosh_finite'
+CHECK-NEXT: not available: '__acoshf_finite'
+CHECK-NEXT: not available: '__acoshl_finite'
+CHECK-NEXT: not available: '__acosl_finite'
+CHECK-NEXT: not available: '__asin_finite'
+CHECK-NEXT: not available: '__asinf_finite'
+CHECK-NEXT: not available: '__asinl_finite'
+CHECK-NEXT: not available: '__atan2_finite'
+CHECK-NEXT: not available: '__atan2f_finite'
+CHECK-NEXT: not available: '__atan2l_finite'
+CHECK-NEXT: not available: '__atanh_finite'
+CHECK-NEXT: not available: '__atanhf_finite'
+CHECK-NEXT: not available: '__atanhl_finite'
+CHECK-NEXT: available: '__atomic_load'
+CHECK-NEXT: available: '__atomic_store'
+CHECK-NEXT: not available: '__cosh_finite'
+CHECK-NEXT: not available: '__coshf_finite'
+CHECK-NEXT: not available: '__coshl_finite'
+CHECK-NEXT: not available: '__cospi'
+CHECK-NEXT: not available: '__cospif'
+CHECK-NEXT: available: '__cxa_atexit'
+CHECK-NEXT: available: 'atexit'
+CHECK-NEXT: available: 'abort'
+CHECK-NEXT: available: 'exit'
+CHECK-NEXT: available: '_Exit'
+CHECK-NEXT: available: '_ZSt9terminatev' aka std::terminate()
+CHECK-NEXT: available: '__cxa_throw'
+CHECK-NEXT: available: '__cxa_guard_abort'
+CHECK-NEXT: available: '__cxa_guard_acquire'
+CHECK-NEXT: available: '__cxa_guard_release'
+CHECK-NEXT: not available: '__exp10_finite'
+CHECK-NEXT: not available: '__exp10f_finite'
+CHECK-NEXT: not available: '__exp10l_finite'
+CHECK-NEXT: not available: '__exp2_finite'
+CHECK-NEXT: not available: '__exp2f_finite'
+CHECK-NEXT: not available: '__exp2l_finite'
+CHECK-NEXT: not available: '__exp_finite'
+CHECK-NEXT: not available: '__expf_finite'
+CHECK-NEXT: not available: '__expl_finite'
+CHECK-NEXT: not available: '__isoc99_scanf'
+CHECK-NEXT: not available: '__isoc99_sscanf'
+CHECK-NEXT: available: '__kmpc_alloc_shared'
+CHECK-NEXT: available: '__kmpc_free_shared'
+CHECK-NEXT: not available: '__log10_finite'
+CHECK-NEXT: not available: '__log10f_finite'
+CHECK-NEXT: not available: '__log10l_finite'
+CHECK-NEXT: not available: '__log2_finite'
+CHECK-NEXT: not available: '__log2f_finite'
+CHECK-NEXT: not available: '__log2l_finite'
+CHECK-NEXT: not available: '__log_finite'
+CHECK-NEXT: not available: '__logf_finite'
+CHECK-NEXT: not available: '__logl_finite'
+CHECK-NEXT: available: '__memccpy_chk'
+CHECK-NEXT: available: '__memcpy_chk'
+CHECK-NEXT: available: '__memmove_chk'
+CHECK-NEXT: available: '__mempcpy_chk'
+CHECK-NEXT: available: '__memset_chk'
+CHECK-NEXT: not available: '__nvvm_reflect'
+CHECK-NEXT: not available: '__pow_finite'
+CHECK-NEXT: not available: '__powf_finite'
+CHECK-NEXT: not available: '__powl_finite'
+CHECK-NEXT: not available: '__sincospi_stret'
+CHECK-NEXT: not available: '__sincospif_stret'
+CHECK-NEXT: not available: '__sinh_finite'
+CHECK-NEXT: not available: '__sinhf_finite'
+CHECK-NEXT: not available: '__sinhl_finite'
+CHECK-NEXT: not available: '__sinpi'
+CHECK-NEXT: not available: '__sinpif'
+CHECK-NEXT: not available: '__small_fprintf'
+CHECK-NEXT: not available: '__small_printf'
+CHECK-NEXT: not available: '__small_sprintf'
+CHECK-NEXT: available: '__snprintf_chk'
+CHECK-NEXT: available: '__sprintf_chk'
+CHECK-NEXT: not available: '__sqrt_finite'
+CHECK-NEXT: not available: '__sqrtf_finite'
+CHECK-NEXT: not available: '__sqrtl_finite'
+CHECK-NEXT: available: '__stpcpy_chk'
+CHECK-NEXT: available: '__stpncpy_chk'
+CHECK-NEXT: available: '__strcat_chk'
+CHECK-NEXT: available: '__strcpy_chk'
+CHECK-NEXT: not available: '__strdup'
+CHECK-NEXT: available: '__strlcat_chk'
+CHECK-NEXT: available: '__strlcpy_chk'
+CHECK-NEXT: available: '__strlen_chk'
+CHECK-NEXT: available: '__strncat_chk'
+CHECK-NEXT: available: '__strncpy_chk'
+CHECK-NEXT: available: '__strndup'
+CHECK-NEXT: not available: '__strtok_r'
+CHECK-NEXT: available: '__vsnprintf_chk'
+CHECK-NEXT: available: '__vsprintf_chk'
+CHECK-NEXT: available: 'abs'
+CHECK-NEXT: available: 'access'
+CHECK-NEXT: available: 'acos'
+CHECK-NEXT: available: 'acosf'
+CHECK-NEXT: available: 'acosh'
+CHECK-NEXT: available: 'acoshf'
+CHECK-NEXT: available: 'acoshl'
+CHECK-NEXT: available: 'acosl'
+CHECK-NEXT: available: 'aligned_alloc'
+CHECK-NEXT: available: 'asin'
+CHECK-NEXT: available: 'asinf'
+CHECK-NEXT: available: 'asinh'
+CHECK-NEXT: available: 'asinhf'
+CHECK-NEXT: available: 'asinhl'
+CHECK-NEXT: available: 'asinl'
+CHECK-NEXT: available: 'atan'
+CHECK-NEXT: available: 'atan2'
+CHECK-NEXT: available: 'atan2f'
+CHECK-NEXT: available: 'atan2l'
+CHECK-NEXT: available: 'atanf'
+CHECK-NEXT: available: 'atanh'
+CHECK-NEXT: available: 'atanhf'
+CHECK-NEXT: available: 'atanhl'
+CHECK-NEXT: available: 'atanl'
+CHECK-NEXT: available: 'atof'
+CHECK-NEXT: available: 'atoi'
+CHECK-NEXT: available: 'atol'
+CHECK-NEXT: available: 'atoll'
+CHECK-NEXT: not available: 'bcmp'
+CHECK-NEXT: available: 'bcopy'
+CHECK-NEXT: available: 'bzero'
+CHECK-NEXT: available: 'cabs'
+CHECK-NEXT: available: 'cabsf'
+CHECK-NEXT: available: 'cabsl'
+CHECK-NEXT: available: 'calloc'
+CHECK-NEXT: available: 'cbrt'
+CHECK-NEXT: available: 'cbrtf'
+CHECK-NEXT: available: 'cbrtl'
+CHECK-NEXT: available: 'ceil'
+CHECK-NEXT: available: 'ceilf'
+CHECK-NEXT: available: 'ceill'
+CHECK-NEXT: available: 'chmod'
+CHECK-NEXT: available: 'chown'
+CHECK-NEXT: available: 'clearerr'
+CHECK-NEXT: available: 'closedir'
+CHECK-NEXT: available: 'copysign'
+CHECK-NEXT: available: 'copysignf'
+CHECK-NEXT: available: 'copysignl'
+CHECK-NEXT: available: 'cos'
+CHECK-NEXT: available: 'cosf'
+CHECK-NEXT: available: 'cosh'
+CHECK-NEXT: available: 'coshf'
+CHECK-NEXT: available: 'coshl'
+CHECK-NEXT: available: 'cosl'
+CHECK-NEXT: available: 'ctermid'
+CHECK-NEXT: available: 'erf'
+CHECK-NEXT: available: 'erff'
+CHECK-NEXT: available: 'erfl'
+CHECK-NEXT: available: 'tgamma'
+CHECK-NEXT: available: 'tgammaf'
+CHECK-NEXT: available: 'tgammal'
+CHECK-NEXT: available: 'execl'
+CHECK-NEXT: available: 'execle'
+CHECK-NEXT: available: 'execlp'
+CHECK-NEXT: available: 'execv'
+CHECK-NEXT: available: 'execvP'
+CHECK-NEXT: available: 'execve'
+CHECK-NEXT: available: 'execvp'
+CHECK-NEXT: available: 'execvpe'
+CHECK-NEXT: available: 'exp'
+CHECK-NEXT: not available: 'exp10'
+CHECK-NEXT: not available: 'exp10f'
+CHECK-NEXT: not available: 'exp10l'
+CHECK-NEXT: available: 'exp2'
+CHECK-NEXT: available: 'exp2f'
+CHECK-NEXT: available: 'exp2l'
+CHECK-NEXT: available: 'expf'
+CHECK-NEXT: available: 'expl'
+CHECK-NEXT: available: 'expm1'
+CHECK-NEXT: available: 'expm1f'
+CHECK-NEXT: available: 'expm1l'
+CHECK-NEXT: available: 'fabs'
+CHECK-NEXT: available: 'fabsf'
+CHECK-NEXT: available: 'fabsl'
+CHECK-NEXT: available: 'fclose'
+CHECK-NEXT: available: 'fdopen'
+CHECK-NEXT: available: 'feof'
+CHECK-NEXT: available: 'ferror'
+CHECK-NEXT: available: 'fflush'
+CHECK-NEXT: available: 'ffs'
+CHECK-NEXT: not available: 'ffsl'
+CHECK-NEXT: not available: 'ffsll'
+CHECK-NEXT: available: 'fgetc'
+CHECK-NEXT: not available: 'fgetc_unlocked'
+CHECK-NEXT: available: 'fgetpos'
+CHECK-NEXT: available: 'fgets'
+CHECK-NEXT: not available: 'fgets_unlocked'
+CHECK-NEXT: available: 'fileno'
+CHECK-NEXT: available: 'fiprintf'
+CHECK-NEXT: available: 'flockfile'
+CHECK-NEXT: available: 'floor'
+CHECK-NEXT: available: 'floorf'
+CHECK-NEXT: available: 'floorl'
+CHECK-NEXT: not available: 'fls'
+CHECK-NEXT: not available: 'flsl'
+CHECK-NEXT: not available: 'flsll'
+CHECK-NEXT: available: 'fmax'
+CHECK-NEXT: available: 'fmaxf'
+CHECK-NEXT: available: 'fmaxl'
+CHECK-NEXT: available: 'fmin'
+CHECK-NEXT: available: 'fminf'
+CHECK-NEXT: available: 'fminl'
+CHECK-NEXT: available: 'fmaximum_num'
+CHECK-NEXT: available: 'fmaximum_numf'
+CHECK-NEXT: available: 'fmaximum_numl'
+CHECK-NEXT: available: 'fminimum_num'
+CHECK-NEXT: available: 'fminimum_numf'
+CHECK-NEXT: available: 'fminimum_numl'
+CHECK-NEXT: available: 'fmod'
+CHECK-NEXT: available: 'fmodf'
+CHECK-NEXT: available: 'fmodl'
+CHECK-NEXT: available: 'fopen'
+CHECK-NEXT: not available: 'fopen64'
+CHECK-NEXT: available: 'fork'
+CHECK-NEXT: available: 'fprintf'
+CHECK-NEXT: available: 'fputc'
+CHECK-NEXT: not available: 'fputc_unlocked'
+CHECK-NEXT: available: 'fputs'
+CHECK-NEXT: not available: 'fputs_unlocked'
+CHECK-NEXT: available: 'fread'
+CHECK-NEXT: not available: 'fread_unlocked'
+CHECK-NEXT: available: 'free'
+CHECK-NEXT: available: 'frexp'
+CHECK-NEXT: available: 'frexpf'
+CHECK-NEXT: available: 'frexpl'
+CHECK-NEXT: available: 'fscanf'
+CHECK-NEXT: available: 'fseek'
+CHECK-NEXT: available: 'fseeko'
+CHECK-NEXT: not available: 'fseeko64'
+CHECK-NEXT: available: 'fsetpos'
+CHECK-NEXT: available: 'fstat'
+CHECK-NEXT: not available: 'fstat64'
+CHECK-NEXT: available: 'fstatvfs'
+CHECK-NEXT: not available: 'fstatvfs64'
+CHECK-NEXT: available: 'ftell'
+CHECK-NEXT: available: 'ftello'
+CHECK-NEXT: not available: 'ftello64'
+CHECK-NEXT: available: 'ftrylockfile'
+CHECK-NEXT: available: 'funlockfile'
+CHECK-NEXT: available: 'fwrite'
+CHECK-NEXT: not available: 'fwrite_unlocked'
+CHECK-NEXT: available: 'getc'
+CHECK-NEXT: not available: 'getc_unlocked'
+CHECK-NEXT: available: 'getchar'
+CHECK-NEXT: not available: 'getchar_unlocked'
+CHECK-NEXT: available: 'getenv'
+CHECK-NEXT: available: 'getitimer'
+CHECK-NEXT: available: 'getlogin_r'
+CHECK-NEXT: available: 'getpwnam'
+CHECK-NEXT: available: 'gets'
+CHECK-NEXT: available: 'gettimeofday'
+CHECK-NEXT: available: 'htonl'
+CHECK-NEXT: available: 'htons'
+CHECK-NEXT: available: 'hypot'
+CHECK-NEXT: available: 'hypotf'
+CHECK-NEXT: available: 'hypotl'
+CHECK-NEXT: available: 'iprintf'
+CHECK-NEXT: available: 'isascii'
+CHECK-NEXT: available: 'isdigit'
+CHECK-NEXT: available: 'labs'
+CHECK-NEXT: available: 'lchown'
+CHECK-NEXT: available: 'ldexp'
+CHECK-NEXT: available: 'ldexpf'
+CHECK-NEXT: available: 'ldexpl'
+CHECK-NEXT: available: 'llabs'
+CHECK-NEXT: available: 'log'
+CHECK-NEXT: available: 'log10'
+CHECK-NEXT: available: 'log10f'
+CHECK-NEXT: available: 'log10l'
+CHECK-NEXT: available: 'log1p'
+CHECK-NEXT: available: 'log1pf'
+CHECK-NEXT: available: 'log1pl'
+CHECK-NEXT: available: 'log2'
+CHECK-NEXT: available: 'log2f'
+CHECK-NEXT: available: 'log2l'
+CHECK-NEXT: available: 'ilogb'
+CHECK-NEXT: available: 'ilogbf'
+CHECK-NEXT: available: 'ilogbl'
+CHECK-NEXT: available: 'logb'
+CHECK-NEXT: available: 'logbf'
+CHECK-NEXT: available: 'logbl'
+CHECK-NEXT: available: 'logf'
+CHECK-NEXT: available: 'logl'
+CHECK-NEXT: available: 'lstat'
+CHECK-NEXT: not available: 'lstat64'
+CHECK-NEXT: available: 'malloc'
+CHECK-NEXT: not available: 'memalign'
+CHECK-NEXT: available: 'memccpy'
+CHECK-NEXT: available: 'memchr'
+CHECK-NEXT: available: 'memcmp'
+CHECK-NEXT: available: 'memcpy'
+CHECK-NEXT: available: 'memmove'
+CHECK-NEXT: available: 'mempcpy'
+CHECK-NEXT: available: 'memrchr'
+CHECK-NEXT: available: 'memset'
+CHECK-NEXT: not available: 'memset_pattern16'
+CHECK-NEXT: not available: 'memset_pattern4'
+CHECK-NEXT: not available: 'memset_pattern8'
+CHECK-NEXT: available: 'mkdir'
+CHECK-NEXT: available: 'mktime'
+CHECK-NEXT: available: 'modf'
+CHECK-NEXT: available: 'modff'
+CHECK-NEXT: available: 'modfl'
+CHECK-NEXT: available: 'nan'
+CHECK-NEXT: available: 'nanf'
+CHECK-NEXT: available: 'nanl'
+CHECK-NEXT: available: 'nearbyint'
+CHECK-NEXT: available: 'nearbyintf'
+CHECK-NEXT: available: 'nearbyintl'
+CHECK-NEXT: available: 'ntohl'
+CHECK-NEXT: available: 'ntohs'
+CHECK-NEXT: available: 'open'
+CHECK-NEXT: not available: 'open64'
+CHECK-NEXT: available: 'opendir'
+CHECK-NEXT: available: 'pclose'
+CHECK-NEXT: available: 'perror'
+CHECK-NEXT: available: 'popen'
+CHECK-NEXT: available: 'posix_memalign'
+CHECK-NEXT: available: 'pow'
+CHECK-NEXT: available: 'powf'
+CHECK-NEXT: available: 'powl'
+CHECK-NEXT: available: 'pread'
+CHECK-NEXT: available: 'printf'
+CHECK-NEXT: available: 'putc'
+CHECK-NEXT: not available: 'putc_unlocked'
+CHECK-NEXT: available: 'putchar'
+CHECK-NEXT: not available: 'putchar_unlocked'
+CHECK-NEXT: available: 'puts'
+CHECK-NEXT: available: 'pwrite'
+CHECK-NEXT: available: 'qsort'
+CHECK-NEXT: available: 'read'
+CHECK-NEXT: available: 'readlink'
+CHECK-NEXT: available: 'realloc'
+CHECK-NEXT: available: 'reallocf'
+CHECK-NEXT: available: 'reallocarray'
+CHECK-NEXT: available: 'realpath'
+CHECK-NEXT: available: 'remainder'
+CHECK-NEXT: available: 'remainderf'
+CHECK-NEXT: available: 'remainderl'
+CHECK-NEXT: available: 'remquo'
+CHECK-NEXT: available: 'remquof'
+CHECK-NEXT: available: 'remquol'
+CHECK-NEXT: available: 'fdim'
+CHECK-NEXT: available: 'fdimf'
+CHECK-NEXT: available: 'fdiml'
+CHECK-NEXT: available: 'remove'
+CHECK-NEXT: available: 'rename'
+CHECK-NEXT: available: 'rewind'
+CHECK-NEXT: available: 'rint'
+CHECK-NEXT: available: 'rintf'
+CHECK-NEXT: available: 'rintl'
+CHECK-NEXT: available: 'rmdir'
+CHECK-NEXT: available: 'round'
+CHECK-NEXT: available: 'roundeven'
+CHECK-NEXT: available: 'roundevenf'
+CHECK-NEXT: available: 'roundevenl'
+CHECK-NEXT: available: 'roundf'
+CHECK-NEXT: available: 'roundl'
+CHECK-NEXT: available: 'scalbln'
+CHECK-NEXT: available: 'scalblnf'
+CHECK-NEXT: available: 'scalblnl'
+CHECK-NEXT: available: 'scalbn'
+CHECK-NEXT: available: 'scalbnf'
+CHECK-NEXT: available: 'scalbnl'
+CHECK-NEXT: available: 'scanf'
+CHECK-NEXT: available: 'setbuf'
+CHECK-NEXT: available: 'setitimer'
+CHECK-NEXT: available: 'setvbuf'
+CHECK-NEXT: available: 'sin'
+CHECK-NEXT: available: 'sinf'
+CHECK-NEXT: available: 'sinh'
+CHECK-NEXT: available: 'sinhf'
+CHECK-NEXT: available: 'sinhl'
+CHECK-NEXT: available: 'sinl'
+CHECK-NEXT: available: 'sincos'
+CHECK-NEXT: available: 'sincosf'
+CHECK-NEXT: available: 'sincosl'
+CHECK-NEXT: available: 'siprintf'
+CHECK-NEXT: available: 'snprintf'
+CHECK-NEXT: available: 'sprintf'
+CHECK-NEXT: available: 'sqrt'
+CHECK-NEXT: available: 'sqrtf'
+CHECK-NEXT: available: 'sqrtl'
+CHECK-NEXT: available: 'sscanf'
+CHECK-NEXT: available: 'stat'
+CHECK-NEXT: not available: 'stat64'
+CHECK-NEXT: available: 'statvfs'
+CHECK-NEXT: not available: 'statvfs64'
+CHECK-NEXT: available: 'stpcpy'
+CHECK-NEXT: available: 'stpncpy'
+CHECK-NEXT: available: 'strcasecmp'
+CHECK-NEXT: available: 'strcat'
+CHECK-NEXT: available: 'strchr'
+CHECK-NEXT: available: 'strcmp'
+CHECK-NEXT: available: 'strcoll'
+CHECK-NEXT: available: 'strcpy'
+CHECK-NEXT: available: 'strcspn'
+CHECK-NEXT: available: 'strdup'
+CHECK-NEXT: available: 'strlcat'
+CHECK-NEXT: available: 'strlcpy'
+CHECK-NEXT: available: 'strlen'
+CHECK-NEXT: available: 'strncasecmp'
+CHECK-NEXT: available: 'strncat'
+CHECK-NEXT: available: 'strncmp'
+CHECK-NEXT: available: 'strncpy'
+CHECK-NEXT: available: 'strndup'
+CHECK-NEXT: available: 'strnlen'
+CHECK-NEXT: available: 'strpbrk'
+CHECK-NEXT: available: 'strrchr'
+CHECK-NEXT: available: 'strspn'
+CHECK-NEXT: available: 'strstr'
+CHECK-NEXT: available: 'strtod'
+CHECK-NEXT: available: 'strtof'
+CHECK-NEXT: available: 'strtok'
+CHECK-NEXT: available: 'strtok_r'
+CHECK-NEXT: available: 'strtol'
+CHECK-NEXT: available: 'strtold'
+CHECK-NEXT: available: 'strtoll'
+CHECK-NEXT: available: 'strtoul'
+CHECK-NEXT: available: 'strtoull'
+CHECK-NEXT: available: 'strxfrm'
+CHECK-NEXT: available: 'system'
+CHECK-NEXT: available: 'tan'
+CHECK-NEXT: available: 'tanf'
+CHECK-NEXT: available: 'tanh'
+CHECK-NEXT: available: 'tanhf'
+CHECK-NEXT: available: 'tanhl'
+CHECK-NEXT: available: 'tanl'
+CHECK-NEXT: available: 'times'
+CHECK-NEXT: available: 'tmpfile'
+CHECK-NEXT: not available: 'tmpfile64'
+CHECK-NEXT: available: 'toascii'
+CHECK-NEXT: available: 'trunc'
+CHECK-NEXT: available: 'truncf'
+CHECK-NEXT: available: 'truncl'
+CHECK-NEXT: available: 'uname'
+CHECK-NEXT: available: 'ungetc'
+CHECK-NEXT: available: 'unlink'
+CHECK-NEXT: available: 'unsetenv'
+CHECK-NEXT: available: 'utime'
+CHECK-NEXT: available: 'utimes'
+CHECK-NEXT: available: 'valloc'
+CHECK-NEXT: not available: 'vec_calloc'
+CHECK-NEXT: not available: 'vec_free'
+CHECK-NEXT: not available: 'vec_malloc'
+CHECK-NEXT: not available: 'vec_realloc'
+CHECK-NEXT: available: 'vfprintf'
+CHECK-NEXT: available: 'vfscanf'
+CHECK-NEXT: available: 'vprintf'
+CHECK-NEXT: available: 'vscanf'
+CHECK-NEXT: available: 'vsnprintf'
+CHECK-NEXT: available: 'vsprintf'
+CHECK-NEXT: available: 'vsscanf'
+CHECK-NEXT: available: 'wcslen'
+CHECK-NEXT: available: 'write'
diff --git a/llvm/utils/emit-llvm-tli-checker-test.py b/llvm/utils/emit-llvm-tli-checker-test.py
new file mode 100755
index 0000000000000..b6d583231e411
--- /dev/null
+++ b/llvm/utils/emit-llvm-tli-checker-test.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+
+"""A test case generation script.
+
+Generate check lines for all known TargetLibraryInfo functions
+
+"""
+
+import sys
+import os
+import subprocess
+
+if len(sys.argv) < 2:
+    print("usage: " + sys.argv[0] + " target-triple-name > target-triple-name.test")
+    exit(1)
+
+triple = sys.argv[1]
+process = subprocess.Popen(
+    "llvm-tli-checker --dump-tli --triple=" + triple,
+    shell=True,
+    stdin=subprocess.DEVNULL,
+    stdout=subprocess.PIPE,
+    universal_newlines=True)
+
+print("# RUN: llvm-tli-checker --dump-tli --triple=" + triple + " | FileCheck %s\n")
+
+First = True
+for line in process.stdout.readlines():
+    if First:
+        print("CHECK: " + line.strip());
+        First = False
+    else:
+        print("CHECK-NEXT: " + line.strip());



More information about the llvm-branch-commits mailing list