16b9be1dbSAhmed Bougacha //===--- TargetLibraryInfoTest.cpp - TLI/LibFunc unit tests ---------------===//
26b9be1dbSAhmed Bougacha //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66b9be1dbSAhmed Bougacha //
76b9be1dbSAhmed Bougacha //===----------------------------------------------------------------------===//
86b9be1dbSAhmed Bougacha 
96b9be1dbSAhmed Bougacha #include "llvm/Analysis/TargetLibraryInfo.h"
106b9be1dbSAhmed Bougacha #include "llvm/AsmParser/Parser.h"
116b9be1dbSAhmed Bougacha #include "llvm/IR/LLVMContext.h"
126b9be1dbSAhmed Bougacha #include "llvm/IR/LegacyPassManager.h"
136b9be1dbSAhmed Bougacha #include "llvm/IR/Module.h"
146b9be1dbSAhmed Bougacha #include "llvm/Support/SourceMgr.h"
156b9be1dbSAhmed Bougacha #include "gtest/gtest.h"
166b9be1dbSAhmed Bougacha 
176b9be1dbSAhmed Bougacha using namespace llvm;
186b9be1dbSAhmed Bougacha 
196b9be1dbSAhmed Bougacha namespace {
206b9be1dbSAhmed Bougacha 
216b9be1dbSAhmed Bougacha class TargetLibraryInfoTest : public testing::Test {
226b9be1dbSAhmed Bougacha protected:
236b9be1dbSAhmed Bougacha   LLVMContext Context;
246b9be1dbSAhmed Bougacha   TargetLibraryInfoImpl TLII;
256b9be1dbSAhmed Bougacha   TargetLibraryInfo TLI;
266b9be1dbSAhmed Bougacha 
276b9be1dbSAhmed Bougacha   std::unique_ptr<Module> M;
286b9be1dbSAhmed Bougacha 
TargetLibraryInfoTest()296b9be1dbSAhmed Bougacha   TargetLibraryInfoTest() : TLI(TLII) {}
306b9be1dbSAhmed Bougacha 
parseAssembly(const char * Assembly)316b9be1dbSAhmed Bougacha   void parseAssembly(const char *Assembly) {
326b9be1dbSAhmed Bougacha     SMDiagnostic Error;
336b9be1dbSAhmed Bougacha     M = parseAssemblyString(Assembly, Error, Context);
346b9be1dbSAhmed Bougacha 
356b9be1dbSAhmed Bougacha     std::string errMsg;
366b9be1dbSAhmed Bougacha     raw_string_ostream os(errMsg);
376b9be1dbSAhmed Bougacha     Error.print("", os);
386b9be1dbSAhmed Bougacha 
396b9be1dbSAhmed Bougacha     if (!M)
402e5daac2SSimon Pilgrim       report_fatal_error(Twine(os.str()));
416b9be1dbSAhmed Bougacha   }
426b9be1dbSAhmed Bougacha 
isLibFunc(const Function * FDecl,LibFunc ExpectedLF)436b9be1dbSAhmed Bougacha   ::testing::AssertionResult isLibFunc(const Function *FDecl,
44d21529faSDavid L. Jones                                        LibFunc ExpectedLF) {
456b9be1dbSAhmed Bougacha     StringRef ExpectedLFName = TLI.getName(ExpectedLF);
466b9be1dbSAhmed Bougacha 
476b9be1dbSAhmed Bougacha     if (!FDecl)
486b9be1dbSAhmed Bougacha       return ::testing::AssertionFailure() << ExpectedLFName << " not found";
496b9be1dbSAhmed Bougacha 
50d21529faSDavid L. Jones     LibFunc F;
516b9be1dbSAhmed Bougacha     if (!TLI.getLibFunc(*FDecl, F))
526b9be1dbSAhmed Bougacha       return ::testing::AssertionFailure() << ExpectedLFName << " invalid";
536b9be1dbSAhmed Bougacha 
546b9be1dbSAhmed Bougacha     return ::testing::AssertionSuccess() << ExpectedLFName << " is LibFunc";
556b9be1dbSAhmed Bougacha   }
566b9be1dbSAhmed Bougacha };
576b9be1dbSAhmed Bougacha 
586b9be1dbSAhmed Bougacha } // end anonymous namespace
596b9be1dbSAhmed Bougacha 
606b9be1dbSAhmed Bougacha // Check that we don't accept egregiously incorrect prototypes.
TEST_F(TargetLibraryInfoTest,InvalidProto)616b9be1dbSAhmed Bougacha TEST_F(TargetLibraryInfoTest, InvalidProto) {
626b9be1dbSAhmed Bougacha   parseAssembly("%foo = type { %foo }\n");
636b9be1dbSAhmed Bougacha 
64fe431683SNick Lewycky   auto *StructTy = StructType::getTypeByName(Context, "foo");
659fbfeefaSXin Tong   auto *InvalidFTy = FunctionType::get(StructTy, /*isVarArg=*/false);
669fbfeefaSXin Tong 
676b9be1dbSAhmed Bougacha   for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) {
68d21529faSDavid L. Jones     LibFunc LF = (LibFunc)FI;
696b9be1dbSAhmed Bougacha     auto *F = cast<Function>(
7013680223SJames Y Knight         M->getOrInsertFunction(TLI.getName(LF), InvalidFTy).getCallee());
716b9be1dbSAhmed Bougacha     EXPECT_FALSE(isLibFunc(F, LF));
726b9be1dbSAhmed Bougacha   }
736b9be1dbSAhmed Bougacha }
746b9be1dbSAhmed Bougacha 
756b9be1dbSAhmed Bougacha // Check that we do accept know-correct prototypes.
TEST_F(TargetLibraryInfoTest,ValidProto)766b9be1dbSAhmed Bougacha TEST_F(TargetLibraryInfoTest, ValidProto) {
776b9be1dbSAhmed Bougacha   parseAssembly(
786b9be1dbSAhmed Bougacha       // These functions use a 64-bit size_t; use the appropriate datalayout.
796b9be1dbSAhmed Bougacha       "target datalayout = \"p:64:64:64\"\n"
806b9be1dbSAhmed Bougacha 
816b9be1dbSAhmed Bougacha       // Struct pointers are replaced with an opaque pointer.
826b9be1dbSAhmed Bougacha       "%struct = type opaque\n"
836b9be1dbSAhmed Bougacha 
846b9be1dbSAhmed Bougacha       // These functions were extracted as-is from the OS X headers.
856b9be1dbSAhmed Bougacha       "declare double @__cospi(double)\n"
866b9be1dbSAhmed Bougacha       "declare float @__cospif(float)\n"
876b9be1dbSAhmed Bougacha       "declare { double, double } @__sincospi_stret(double)\n"
886b9be1dbSAhmed Bougacha       "declare <2 x float> @__sincospif_stret(float)\n"
896b9be1dbSAhmed Bougacha       "declare double @__sinpi(double)\n"
906b9be1dbSAhmed Bougacha       "declare float @__sinpif(float)\n"
916b9be1dbSAhmed Bougacha       "declare i32 @abs(i32)\n"
926b9be1dbSAhmed Bougacha       "declare i32 @access(i8*, i32)\n"
936b9be1dbSAhmed Bougacha       "declare double @acos(double)\n"
946b9be1dbSAhmed Bougacha       "declare float @acosf(float)\n"
956b9be1dbSAhmed Bougacha       "declare double @acosh(double)\n"
966b9be1dbSAhmed Bougacha       "declare float @acoshf(float)\n"
976b9be1dbSAhmed Bougacha       "declare x86_fp80 @acoshl(x86_fp80)\n"
986b9be1dbSAhmed Bougacha       "declare x86_fp80 @acosl(x86_fp80)\n"
99c0955edfSUday Bondhugula       "declare i8* @aligned_alloc(i64, i64)\n"
1006b9be1dbSAhmed Bougacha       "declare double @asin(double)\n"
1016b9be1dbSAhmed Bougacha       "declare float @asinf(float)\n"
1026b9be1dbSAhmed Bougacha       "declare double @asinh(double)\n"
1036b9be1dbSAhmed Bougacha       "declare float @asinhf(float)\n"
1046b9be1dbSAhmed Bougacha       "declare x86_fp80 @asinhl(x86_fp80)\n"
1056b9be1dbSAhmed Bougacha       "declare x86_fp80 @asinl(x86_fp80)\n"
1066b9be1dbSAhmed Bougacha       "declare double @atan(double)\n"
1076b9be1dbSAhmed Bougacha       "declare double @atan2(double, double)\n"
1086b9be1dbSAhmed Bougacha       "declare float @atan2f(float, float)\n"
1096b9be1dbSAhmed Bougacha       "declare x86_fp80 @atan2l(x86_fp80, x86_fp80)\n"
1106b9be1dbSAhmed Bougacha       "declare float @atanf(float)\n"
1116b9be1dbSAhmed Bougacha       "declare double @atanh(double)\n"
1126b9be1dbSAhmed Bougacha       "declare float @atanhf(float)\n"
1136b9be1dbSAhmed Bougacha       "declare x86_fp80 @atanhl(x86_fp80)\n"
1146b9be1dbSAhmed Bougacha       "declare x86_fp80 @atanl(x86_fp80)\n"
1156b9be1dbSAhmed Bougacha       "declare double @atof(i8*)\n"
1166b9be1dbSAhmed Bougacha       "declare i32 @atoi(i8*)\n"
1176b9be1dbSAhmed Bougacha       "declare i64 @atol(i8*)\n"
1186b9be1dbSAhmed Bougacha       "declare i64 @atoll(i8*)\n"
1196b9be1dbSAhmed Bougacha       "declare i32 @bcmp(i8*, i8*, i64)\n"
1206b9be1dbSAhmed Bougacha       "declare void @bcopy(i8*, i8*, i64)\n"
1216b9be1dbSAhmed Bougacha       "declare void @bzero(i8*, i64)\n"
1226b9be1dbSAhmed Bougacha       "declare i8* @calloc(i64, i64)\n"
1236b9be1dbSAhmed Bougacha       "declare double @cbrt(double)\n"
1246b9be1dbSAhmed Bougacha       "declare float @cbrtf(float)\n"
1256b9be1dbSAhmed Bougacha       "declare x86_fp80 @cbrtl(x86_fp80)\n"
1266b9be1dbSAhmed Bougacha       "declare double @ceil(double)\n"
1276b9be1dbSAhmed Bougacha       "declare float @ceilf(float)\n"
1286b9be1dbSAhmed Bougacha       "declare x86_fp80 @ceill(x86_fp80)\n"
1296b9be1dbSAhmed Bougacha       "declare i32 @chown(i8*, i32, i32)\n"
1306b9be1dbSAhmed Bougacha       "declare void @clearerr(%struct*)\n"
1316b9be1dbSAhmed Bougacha       "declare double @copysign(double, double)\n"
1326b9be1dbSAhmed Bougacha       "declare float @copysignf(float, float)\n"
1336b9be1dbSAhmed Bougacha       "declare x86_fp80 @copysignl(x86_fp80, x86_fp80)\n"
1342ff24731SHal Finkel       "declare double @cabs([2 x double])\n"
1352ff24731SHal Finkel       "declare float @cabsf([2 x float])\n"
1362ff24731SHal Finkel       "declare x86_fp80 @cabsl([2 x x86_fp80])\n"
1376b9be1dbSAhmed Bougacha       "declare double @cos(double)\n"
1386b9be1dbSAhmed Bougacha       "declare float @cosf(float)\n"
1396b9be1dbSAhmed Bougacha       "declare double @cosh(double)\n"
1406b9be1dbSAhmed Bougacha       "declare float @coshf(float)\n"
1416b9be1dbSAhmed Bougacha       "declare x86_fp80 @coshl(x86_fp80)\n"
1426b9be1dbSAhmed Bougacha       "declare x86_fp80 @cosl(x86_fp80)\n"
1436b9be1dbSAhmed Bougacha       "declare i8* @ctermid(i8*)\n"
1446b9be1dbSAhmed Bougacha       "declare double @exp(double)\n"
1456b9be1dbSAhmed Bougacha       "declare double @exp2(double)\n"
1466b9be1dbSAhmed Bougacha       "declare float @exp2f(float)\n"
1476b9be1dbSAhmed Bougacha       "declare x86_fp80 @exp2l(x86_fp80)\n"
1486b9be1dbSAhmed Bougacha       "declare float @expf(float)\n"
1496b9be1dbSAhmed Bougacha       "declare x86_fp80 @expl(x86_fp80)\n"
1506b9be1dbSAhmed Bougacha       "declare double @expm1(double)\n"
1516b9be1dbSAhmed Bougacha       "declare float @expm1f(float)\n"
1526b9be1dbSAhmed Bougacha       "declare x86_fp80 @expm1l(x86_fp80)\n"
1536b9be1dbSAhmed Bougacha       "declare double @fabs(double)\n"
1546b9be1dbSAhmed Bougacha       "declare float @fabsf(float)\n"
1556b9be1dbSAhmed Bougacha       "declare x86_fp80 @fabsl(x86_fp80)\n"
1566b9be1dbSAhmed Bougacha       "declare i32 @fclose(%struct*)\n"
1576b9be1dbSAhmed Bougacha       "declare i32 @feof(%struct*)\n"
1586b9be1dbSAhmed Bougacha       "declare i32 @ferror(%struct*)\n"
1596b9be1dbSAhmed Bougacha       "declare i32 @fflush(%struct*)\n"
1606b9be1dbSAhmed Bougacha       "declare i32 @ffs(i32)\n"
1616b9be1dbSAhmed Bougacha       "declare i32 @ffsl(i64)\n"
1626b9be1dbSAhmed Bougacha       "declare i32 @ffsll(i64)\n"
1636b9be1dbSAhmed Bougacha       "declare i32 @fgetc(%struct*)\n"
164ca22d427SDavid Bolvansky       "declare i32 @fgetc_unlocked(%struct*)\n"
1656b9be1dbSAhmed Bougacha       "declare i32 @fgetpos(%struct*, i64*)\n"
1666b9be1dbSAhmed Bougacha       "declare i8* @fgets(i8*, i32, %struct*)\n"
167ca22d427SDavid Bolvansky       "declare i8* @fgets_unlocked(i8*, i32, %struct*)\n"
1686b9be1dbSAhmed Bougacha       "declare i32 @fileno(%struct*)\n"
1696b9be1dbSAhmed Bougacha       "declare void @flockfile(%struct*)\n"
1706b9be1dbSAhmed Bougacha       "declare double @floor(double)\n"
1716b9be1dbSAhmed Bougacha       "declare float @floorf(float)\n"
1726b9be1dbSAhmed Bougacha       "declare x86_fp80 @floorl(x86_fp80)\n"
1736b9be1dbSAhmed Bougacha       "declare i32 @fls(i32)\n"
1746b9be1dbSAhmed Bougacha       "declare i32 @flsl(i64)\n"
1756b9be1dbSAhmed Bougacha       "declare i32 @flsll(i64)\n"
1766b9be1dbSAhmed Bougacha       "declare double @fmax(double, double)\n"
1776b9be1dbSAhmed Bougacha       "declare float @fmaxf(float, float)\n"
1786b9be1dbSAhmed Bougacha       "declare x86_fp80 @fmaxl(x86_fp80, x86_fp80)\n"
1796b9be1dbSAhmed Bougacha       "declare double @fmin(double, double)\n"
1806b9be1dbSAhmed Bougacha       "declare float @fminf(float, float)\n"
1816b9be1dbSAhmed Bougacha       "declare x86_fp80 @fminl(x86_fp80, x86_fp80)\n"
1826b9be1dbSAhmed Bougacha       "declare double @fmod(double, double)\n"
1836b9be1dbSAhmed Bougacha       "declare float @fmodf(float, float)\n"
1846b9be1dbSAhmed Bougacha       "declare x86_fp80 @fmodl(x86_fp80, x86_fp80)\n"
1856b9be1dbSAhmed Bougacha       "declare i32 @fprintf(%struct*, i8*, ...)\n"
1866b9be1dbSAhmed Bougacha       "declare i32 @fputc(i32, %struct*)\n"
187ca22d427SDavid Bolvansky       "declare i32 @fputc_unlocked(i32, %struct*)\n"
1886b9be1dbSAhmed Bougacha       "declare i64 @fread(i8*, i64, i64, %struct*)\n"
189ca22d427SDavid Bolvansky       "declare i64 @fread_unlocked(i8*, i64, i64, %struct*)\n"
1906b9be1dbSAhmed Bougacha       "declare void @free(i8*)\n"
1916b9be1dbSAhmed Bougacha       "declare double @frexp(double, i32*)\n"
1926b9be1dbSAhmed Bougacha       "declare float @frexpf(float, i32*)\n"
1936b9be1dbSAhmed Bougacha       "declare x86_fp80 @frexpl(x86_fp80, i32*)\n"
1946b9be1dbSAhmed Bougacha       "declare i32 @fscanf(%struct*, i8*, ...)\n"
1956b9be1dbSAhmed Bougacha       "declare i32 @fseek(%struct*, i64, i32)\n"
1966b9be1dbSAhmed Bougacha       "declare i32 @fseeko(%struct*, i64, i32)\n"
1976b9be1dbSAhmed Bougacha       "declare i32 @fsetpos(%struct*, i64*)\n"
1986b9be1dbSAhmed Bougacha       "declare i32 @fstatvfs(i32, %struct*)\n"
1996b9be1dbSAhmed Bougacha       "declare i64 @ftell(%struct*)\n"
2006b9be1dbSAhmed Bougacha       "declare i64 @ftello(%struct*)\n"
2016b9be1dbSAhmed Bougacha       "declare i32 @ftrylockfile(%struct*)\n"
2026b9be1dbSAhmed Bougacha       "declare void @funlockfile(%struct*)\n"
2036b9be1dbSAhmed Bougacha       "declare i32 @getc(%struct*)\n"
2046b9be1dbSAhmed Bougacha       "declare i32 @getc_unlocked(%struct*)\n"
2056b9be1dbSAhmed Bougacha       "declare i32 @getchar()\n"
206ca22d427SDavid Bolvansky       "declare i32 @getchar_unlocked()\n"
2076b9be1dbSAhmed Bougacha       "declare i8* @getenv(i8*)\n"
2086b9be1dbSAhmed Bougacha       "declare i32 @getitimer(i32, %struct*)\n"
2096b9be1dbSAhmed Bougacha       "declare i32 @getlogin_r(i8*, i64)\n"
2106b9be1dbSAhmed Bougacha       "declare %struct* @getpwnam(i8*)\n"
2116b9be1dbSAhmed Bougacha       "declare i8* @gets(i8*)\n"
2126b9be1dbSAhmed Bougacha       "declare i32 @gettimeofday(%struct*, i8*)\n"
2136b9be1dbSAhmed Bougacha       "declare i32 @_Z7isasciii(i32)\n"
2146b9be1dbSAhmed Bougacha       "declare i32 @_Z7isdigiti(i32)\n"
2156b9be1dbSAhmed Bougacha       "declare i64 @labs(i64)\n"
2166b9be1dbSAhmed Bougacha       "declare double @ldexp(double, i32)\n"
2176b9be1dbSAhmed Bougacha       "declare float @ldexpf(float, i32)\n"
2186b9be1dbSAhmed Bougacha       "declare x86_fp80 @ldexpl(x86_fp80, i32)\n"
2196b9be1dbSAhmed Bougacha       "declare i64 @llabs(i64)\n"
2206b9be1dbSAhmed Bougacha       "declare double @log(double)\n"
2216b9be1dbSAhmed Bougacha       "declare double @log10(double)\n"
2226b9be1dbSAhmed Bougacha       "declare float @log10f(float)\n"
2236b9be1dbSAhmed Bougacha       "declare x86_fp80 @log10l(x86_fp80)\n"
2246b9be1dbSAhmed Bougacha       "declare double @log1p(double)\n"
2256b9be1dbSAhmed Bougacha       "declare float @log1pf(float)\n"
2266b9be1dbSAhmed Bougacha       "declare x86_fp80 @log1pl(x86_fp80)\n"
2276b9be1dbSAhmed Bougacha       "declare double @log2(double)\n"
2286b9be1dbSAhmed Bougacha       "declare float @log2f(float)\n"
2296b9be1dbSAhmed Bougacha       "declare x86_fp80 @log2l(x86_fp80)\n"
2306b9be1dbSAhmed Bougacha       "declare double @logb(double)\n"
2316b9be1dbSAhmed Bougacha       "declare float @logbf(float)\n"
2326b9be1dbSAhmed Bougacha       "declare x86_fp80 @logbl(x86_fp80)\n"
2336b9be1dbSAhmed Bougacha       "declare float @logf(float)\n"
2346b9be1dbSAhmed Bougacha       "declare x86_fp80 @logl(x86_fp80)\n"
2356b9be1dbSAhmed Bougacha       "declare i8* @malloc(i64)\n"
2366b9be1dbSAhmed Bougacha       "declare i8* @memccpy(i8*, i8*, i32, i64)\n"
2376b9be1dbSAhmed Bougacha       "declare i8* @memchr(i8*, i32, i64)\n"
2386b9be1dbSAhmed Bougacha       "declare i32 @memcmp(i8*, i8*, i64)\n"
2396b9be1dbSAhmed Bougacha       "declare i8* @memcpy(i8*, i8*, i64)\n"
2406b9be1dbSAhmed Bougacha       "declare i8* @memmove(i8*, i8*, i64)\n"
2416b9be1dbSAhmed Bougacha       "declare i8* @memset(i8*, i32, i64)\n"
2426b9be1dbSAhmed Bougacha       "declare void @memset_pattern16(i8*, i8*, i64)\n"
243*ad88a37cSFlorian Hahn       "declare void @memset_pattern4(i8*, i8*, i64)\n"
244*ad88a37cSFlorian Hahn       "declare void @memset_pattern8(i8*, i8*, i64)\n"
2456b9be1dbSAhmed Bougacha       "declare i32 @mkdir(i8*, i16)\n"
2466b9be1dbSAhmed Bougacha       "declare double @modf(double, double*)\n"
2476b9be1dbSAhmed Bougacha       "declare float @modff(float, float*)\n"
2486b9be1dbSAhmed Bougacha       "declare x86_fp80 @modfl(x86_fp80, x86_fp80*)\n"
2496b9be1dbSAhmed Bougacha       "declare double @nearbyint(double)\n"
2506b9be1dbSAhmed Bougacha       "declare float @nearbyintf(float)\n"
2516b9be1dbSAhmed Bougacha       "declare x86_fp80 @nearbyintl(x86_fp80)\n"
2526b9be1dbSAhmed Bougacha       "declare i32 @pclose(%struct*)\n"
2536b9be1dbSAhmed Bougacha       "declare void @perror(i8*)\n"
2546b9be1dbSAhmed Bougacha       "declare i32 @posix_memalign(i8**, i64, i64)\n"
2556b9be1dbSAhmed Bougacha       "declare double @pow(double, double)\n"
2566b9be1dbSAhmed Bougacha       "declare float @powf(float, float)\n"
2576b9be1dbSAhmed Bougacha       "declare x86_fp80 @powl(x86_fp80, x86_fp80)\n"
2586b9be1dbSAhmed Bougacha       "declare i32 @printf(i8*, ...)\n"
2596b9be1dbSAhmed Bougacha       "declare i32 @putc(i32, %struct*)\n"
260ca22d427SDavid Bolvansky       "declare i32 @putc_unlocked(i32, %struct*)\n"
2616b9be1dbSAhmed Bougacha       "declare i32 @putchar(i32)\n"
262ca22d427SDavid Bolvansky       "declare i32 @putchar_unlocked(i32)\n"
2636b9be1dbSAhmed Bougacha       "declare i32 @puts(i8*)\n"
2646b9be1dbSAhmed Bougacha       "declare void @qsort(i8*, i64, i64, i32 (i8*, i8*)*)\n"
2656b9be1dbSAhmed Bougacha       "declare i64 @readlink(i8*, i8*, i64)\n"
2666b9be1dbSAhmed Bougacha       "declare i8* @realloc(i8*, i64)\n"
2676b9be1dbSAhmed Bougacha       "declare i8* @reallocf(i8*, i64)\n"
268167c4284SEhud Katz       "declare double @remainder(double, double)\n"
269167c4284SEhud Katz       "declare float @remainderf(float, float)\n"
270167c4284SEhud Katz       "declare x86_fp80 @remainderl(x86_fp80, x86_fp80)\n"
2716b9be1dbSAhmed Bougacha       "declare i32 @remove(i8*)\n"
2726b9be1dbSAhmed Bougacha       "declare i32 @rename(i8*, i8*)\n"
2736b9be1dbSAhmed Bougacha       "declare void @rewind(%struct*)\n"
2746b9be1dbSAhmed Bougacha       "declare double @rint(double)\n"
2756b9be1dbSAhmed Bougacha       "declare float @rintf(float)\n"
2766b9be1dbSAhmed Bougacha       "declare x86_fp80 @rintl(x86_fp80)\n"
2776b9be1dbSAhmed Bougacha       "declare i32 @rmdir(i8*)\n"
2786b9be1dbSAhmed Bougacha       "declare double @round(double)\n"
2796b9be1dbSAhmed Bougacha       "declare float @roundf(float)\n"
2806b9be1dbSAhmed Bougacha       "declare x86_fp80 @roundl(x86_fp80)\n"
2814d20e31fSSerge Pavlov       "declare double @roundeven(double)\n"
2824d20e31fSSerge Pavlov       "declare float @roundevenf(float)\n"
2834d20e31fSSerge Pavlov       "declare x86_fp80 @roundevenl(x86_fp80)\n"
2846b9be1dbSAhmed Bougacha       "declare i32 @scanf(i8*, ...)\n"
2856b9be1dbSAhmed Bougacha       "declare void @setbuf(%struct*, i8*)\n"
2866b9be1dbSAhmed Bougacha       "declare i32 @setitimer(i32, %struct*, %struct*)\n"
2876b9be1dbSAhmed Bougacha       "declare i32 @setvbuf(%struct*, i8*, i32, i64)\n"
2886b9be1dbSAhmed Bougacha       "declare double @sin(double)\n"
2896b9be1dbSAhmed Bougacha       "declare float @sinf(float)\n"
2906b9be1dbSAhmed Bougacha       "declare double @sinh(double)\n"
2916b9be1dbSAhmed Bougacha       "declare float @sinhf(float)\n"
2926b9be1dbSAhmed Bougacha       "declare x86_fp80 @sinhl(x86_fp80)\n"
2936b9be1dbSAhmed Bougacha       "declare x86_fp80 @sinl(x86_fp80)\n"
2946b9be1dbSAhmed Bougacha       "declare i32 @snprintf(i8*, i64, i8*, ...)\n"
2956b9be1dbSAhmed Bougacha       "declare i32 @sprintf(i8*, i8*, ...)\n"
2966b9be1dbSAhmed Bougacha       "declare double @sqrt(double)\n"
2976b9be1dbSAhmed Bougacha       "declare float @sqrtf(float)\n"
2986b9be1dbSAhmed Bougacha       "declare x86_fp80 @sqrtl(x86_fp80)\n"
2996b9be1dbSAhmed Bougacha       "declare i32 @sscanf(i8*, i8*, ...)\n"
3006b9be1dbSAhmed Bougacha       "declare i32 @statvfs(i8*, %struct*)\n"
3016b9be1dbSAhmed Bougacha       "declare i8* @stpcpy(i8*, i8*)\n"
3026b9be1dbSAhmed Bougacha       "declare i8* @stpncpy(i8*, i8*, i64)\n"
3036b9be1dbSAhmed Bougacha       "declare i32 @strcasecmp(i8*, i8*)\n"
3046b9be1dbSAhmed Bougacha       "declare i8* @strcat(i8*, i8*)\n"
3056b9be1dbSAhmed Bougacha       "declare i8* @strchr(i8*, i32)\n"
3066b9be1dbSAhmed Bougacha       "declare i32 @strcmp(i8*, i8*)\n"
3076b9be1dbSAhmed Bougacha       "declare i32 @strcoll(i8*, i8*)\n"
3086b9be1dbSAhmed Bougacha       "declare i8* @strcpy(i8*, i8*)\n"
3096b9be1dbSAhmed Bougacha       "declare i64 @strcspn(i8*, i8*)\n"
3106b9be1dbSAhmed Bougacha       "declare i8* @strdup(i8*)\n"
3116b9be1dbSAhmed Bougacha       "declare i64 @strlen(i8*)\n"
3126b9be1dbSAhmed Bougacha       "declare i32 @strncasecmp(i8*, i8*, i64)\n"
3136b9be1dbSAhmed Bougacha       "declare i8* @strncat(i8*, i8*, i64)\n"
3146b9be1dbSAhmed Bougacha       "declare i32 @strncmp(i8*, i8*, i64)\n"
3156b9be1dbSAhmed Bougacha       "declare i8* @strncpy(i8*, i8*, i64)\n"
3166b9be1dbSAhmed Bougacha       "declare i8* @strndup(i8*, i64)\n"
3176b9be1dbSAhmed Bougacha       "declare i64 @strnlen(i8*, i64)\n"
3186b9be1dbSAhmed Bougacha       "declare i8* @strpbrk(i8*, i8*)\n"
3196b9be1dbSAhmed Bougacha       "declare i8* @strrchr(i8*, i32)\n"
3206b9be1dbSAhmed Bougacha       "declare i64 @strspn(i8*, i8*)\n"
3216b9be1dbSAhmed Bougacha       "declare i8* @strstr(i8*, i8*)\n"
3226b9be1dbSAhmed Bougacha       "declare i8* @strtok(i8*, i8*)\n"
3236b9be1dbSAhmed Bougacha       "declare i8* @strtok_r(i8*, i8*, i8**)\n"
3246b9be1dbSAhmed Bougacha       "declare i64 @strtol(i8*, i8**, i32)\n"
325abb2a93cSErik Pilkington       "declare i64 @strlcat(i8*, i8**, i64)\n"
326abb2a93cSErik Pilkington       "declare i64 @strlcpy(i8*, i8**, i64)\n"
3276b9be1dbSAhmed Bougacha       "declare x86_fp80 @strtold(i8*, i8**)\n"
3286b9be1dbSAhmed Bougacha       "declare i64 @strtoll(i8*, i8**, i32)\n"
3296b9be1dbSAhmed Bougacha       "declare i64 @strtoul(i8*, i8**, i32)\n"
3306b9be1dbSAhmed Bougacha       "declare i64 @strtoull(i8*, i8**, i32)\n"
3316b9be1dbSAhmed Bougacha       "declare i64 @strxfrm(i8*, i8*, i64)\n"
3326b9be1dbSAhmed Bougacha       "declare double @tan(double)\n"
3336b9be1dbSAhmed Bougacha       "declare float @tanf(float)\n"
3346b9be1dbSAhmed Bougacha       "declare double @tanh(double)\n"
3356b9be1dbSAhmed Bougacha       "declare float @tanhf(float)\n"
3366b9be1dbSAhmed Bougacha       "declare x86_fp80 @tanhl(x86_fp80)\n"
3376b9be1dbSAhmed Bougacha       "declare x86_fp80 @tanl(x86_fp80)\n"
3386b9be1dbSAhmed Bougacha       "declare i64 @times(%struct*)\n"
3396b9be1dbSAhmed Bougacha       "declare %struct* @tmpfile()\n"
3406b9be1dbSAhmed Bougacha       "declare i32 @_Z7toasciii(i32)\n"
3416b9be1dbSAhmed Bougacha       "declare double @trunc(double)\n"
3426b9be1dbSAhmed Bougacha       "declare float @truncf(float)\n"
3436b9be1dbSAhmed Bougacha       "declare x86_fp80 @truncl(x86_fp80)\n"
3446b9be1dbSAhmed Bougacha       "declare i32 @uname(%struct*)\n"
3456b9be1dbSAhmed Bougacha       "declare i32 @ungetc(i32, %struct*)\n"
3466b9be1dbSAhmed Bougacha       "declare i32 @unlink(i8*)\n"
3476b9be1dbSAhmed Bougacha       "declare i32 @utime(i8*, %struct*)\n"
3486b9be1dbSAhmed Bougacha       "declare i32 @utimes(i8*, %struct*)\n"
3496b9be1dbSAhmed Bougacha       "declare i8* @valloc(i64)\n"
3506b9be1dbSAhmed Bougacha       "declare i32 @vfprintf(%struct*, i8*, %struct*)\n"
3516b9be1dbSAhmed Bougacha       "declare i32 @vfscanf(%struct*, i8*, %struct*)\n"
3526b9be1dbSAhmed Bougacha       "declare i32 @vprintf(i8*, %struct*)\n"
3536b9be1dbSAhmed Bougacha       "declare i32 @vscanf(i8*, %struct*)\n"
3546b9be1dbSAhmed Bougacha       "declare i32 @vsnprintf(i8*, i64, i8*, %struct*)\n"
3556b9be1dbSAhmed Bougacha       "declare i32 @vsprintf(i8*, i8*, %struct*)\n"
3566b9be1dbSAhmed Bougacha       "declare i32 @vsscanf(i8*, i8*, %struct*)\n"
35760b40b8fSMatthias Braun       "declare i64 @wcslen(i32*)\n"
3588f07efc7SCalixte Denizet       "declare i32 @fork()\n"
3598f07efc7SCalixte Denizet       "declare i32 @execl(i8*, i8*, ...)\n"
3608f07efc7SCalixte Denizet       "declare i32 @execle(i8*, i8*, ...)\n"
3618f07efc7SCalixte Denizet       "declare i32 @execlp(i8*, i8*, ...)\n"
3628f07efc7SCalixte Denizet       "declare i32 @execv(i8*, i8**)\n"
3638f07efc7SCalixte Denizet       "declare i32 @execvP(i8*, i8*, i8**)\n"
3648f07efc7SCalixte Denizet       "declare i32 @execve(i8*, i8**, i8**)\n"
3658f07efc7SCalixte Denizet       "declare i32 @execvp(i8*, i8**)\n"
3668f07efc7SCalixte Denizet       "declare i32 @execvpe(i8*, i8**, i8**)\n"
3676b9be1dbSAhmed Bougacha 
3686b9be1dbSAhmed Bougacha       // These functions were also extracted from the OS X headers, but they are
3696b9be1dbSAhmed Bougacha       // available with a special name on darwin.
3706b9be1dbSAhmed Bougacha       // This test uses the default TLI name instead.
3716b9be1dbSAhmed Bougacha       "declare i32 @chmod(i8*, i16)\n"
3726b9be1dbSAhmed Bougacha       "declare i32 @closedir(%struct*)\n"
3736b9be1dbSAhmed Bougacha       "declare %struct* @fdopen(i32, i8*)\n"
3746b9be1dbSAhmed Bougacha       "declare %struct* @fopen(i8*, i8*)\n"
3756b9be1dbSAhmed Bougacha       "declare i32 @fputs(i8*, %struct*)\n"
376ca22d427SDavid Bolvansky       "declare i32 @fputs_unlocked(i8*, %struct*)\n"
3776b9be1dbSAhmed Bougacha       "declare i32 @fstat(i32, %struct*)\n"
3786b9be1dbSAhmed Bougacha       "declare i64 @fwrite(i8*, i64, i64, %struct*)\n"
379ca22d427SDavid Bolvansky       "declare i64 @fwrite_unlocked(i8*, i64, i64, %struct*)\n"
3806b9be1dbSAhmed Bougacha       "declare i32 @lchown(i8*, i32, i32)\n"
3816b9be1dbSAhmed Bougacha       "declare i32 @lstat(i8*, %struct*)\n"
3826b9be1dbSAhmed Bougacha       "declare i64 @mktime(%struct*)\n"
3836b9be1dbSAhmed Bougacha       "declare i32 @open(i8*, i32, ...)\n"
3846b9be1dbSAhmed Bougacha       "declare %struct* @opendir(i8*)\n"
3856b9be1dbSAhmed Bougacha       "declare %struct* @popen(i8*, i8*)\n"
3866b9be1dbSAhmed Bougacha       "declare i64 @pread(i32, i8*, i64, i64)\n"
3876b9be1dbSAhmed Bougacha       "declare i64 @pwrite(i32, i8*, i64, i64)\n"
3886b9be1dbSAhmed Bougacha       "declare i64 @read(i32, i8*, i64)\n"
3896b9be1dbSAhmed Bougacha       "declare i8* @realpath(i8*, i8*)\n"
3906b9be1dbSAhmed Bougacha       "declare i32 @stat(i8*, %struct*)\n"
3916b9be1dbSAhmed Bougacha       "declare double @strtod(i8*, i8**)\n"
3926b9be1dbSAhmed Bougacha       "declare float @strtof(i8*, i8**)\n"
3936b9be1dbSAhmed Bougacha       "declare i32 @system(i8*)\n"
3946b9be1dbSAhmed Bougacha       "declare i32 @unsetenv(i8*)\n"
3956b9be1dbSAhmed Bougacha       "declare i64 @write(i32, i8*, i64)\n"
3966b9be1dbSAhmed Bougacha 
3976b9be1dbSAhmed Bougacha       // These functions are available on Linux but not Darwin; they only differ
3986b9be1dbSAhmed Bougacha       // from their non-64 counterparts in the struct type.
3996b9be1dbSAhmed Bougacha       // Use the same prototype as the non-64 variant.
4006b9be1dbSAhmed Bougacha       "declare %struct* @fopen64(i8*, i8*)\n"
4016b9be1dbSAhmed Bougacha       "declare i32 @fstat64(i32, %struct*)\n"
4026b9be1dbSAhmed Bougacha       "declare i32 @fstatvfs64(i32, %struct*)\n"
4036b9be1dbSAhmed Bougacha       "declare i32 @lstat64(i8*, %struct*)\n"
4046b9be1dbSAhmed Bougacha       "declare i32 @open64(i8*, i32, ...)\n"
4056b9be1dbSAhmed Bougacha       "declare i32 @stat64(i8*, %struct*)\n"
4066b9be1dbSAhmed Bougacha       "declare i32 @statvfs64(i8*, %struct*)\n"
4076b9be1dbSAhmed Bougacha       "declare %struct* @tmpfile64()\n"
4086b9be1dbSAhmed Bougacha 
4096b9be1dbSAhmed Bougacha       // These functions are also -64 variants, but do differ in the type of the
4106b9be1dbSAhmed Bougacha       // off_t (vs off64_t) parameter.  The non-64 variants declared above used
4116b9be1dbSAhmed Bougacha       // a 64-bit off_t, so, in practice, they are also equivalent.
4126b9be1dbSAhmed Bougacha       "declare i32 @fseeko64(%struct*, i64, i32)\n"
4136b9be1dbSAhmed Bougacha       "declare i64 @ftello64(%struct*)\n"
4146b9be1dbSAhmed Bougacha 
4156b9be1dbSAhmed Bougacha       "declare void @_ZdaPv(i8*)\n"
4166b9be1dbSAhmed Bougacha       "declare void @_ZdaPvRKSt9nothrow_t(i8*, %struct*)\n"
41796bbec79SEric Fiselier       "declare void @_ZdaPvSt11align_val_t(i8*, i64)\n"
41896bbec79SEric Fiselier       "declare void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8*, i64, %struct*)\n"
4196b9be1dbSAhmed Bougacha       "declare void @_ZdaPvj(i8*, i32)\n"
4206bc2b042SHiroshi Yamauchi       "declare void @_ZdaPvjSt11align_val_t(i8*, i32, i32)\n"
4216b9be1dbSAhmed Bougacha       "declare void @_ZdaPvm(i8*, i64)\n"
4226bc2b042SHiroshi Yamauchi       "declare void @_ZdaPvmSt11align_val_t(i8*, i64, i64)\n"
4236b9be1dbSAhmed Bougacha       "declare void @_ZdlPv(i8*)\n"
4246b9be1dbSAhmed Bougacha       "declare void @_ZdlPvRKSt9nothrow_t(i8*, %struct*)\n"
42596bbec79SEric Fiselier       "declare void @_ZdlPvSt11align_val_t(i8*, i64)\n"
42696bbec79SEric Fiselier       "declare void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8*, i64, %struct*)\n"
4276b9be1dbSAhmed Bougacha       "declare void @_ZdlPvj(i8*, i32)\n"
4286bc2b042SHiroshi Yamauchi       "declare void @_ZdlPvjSt11align_val_t(i8*, i32, i32)\n"
4296b9be1dbSAhmed Bougacha       "declare void @_ZdlPvm(i8*, i64)\n"
4306bc2b042SHiroshi Yamauchi       "declare void @_ZdlPvmSt11align_val_t(i8*, i64, i64)\n"
4316b9be1dbSAhmed Bougacha       "declare i8* @_Znaj(i32)\n"
4326b9be1dbSAhmed Bougacha       "declare i8* @_ZnajRKSt9nothrow_t(i32, %struct*)\n"
43396bbec79SEric Fiselier       "declare i8* @_ZnajSt11align_val_t(i32, i32)\n"
43496bbec79SEric Fiselier       "declare i8* @_ZnajSt11align_val_tRKSt9nothrow_t(i32, i32, %struct*)\n"
4356b9be1dbSAhmed Bougacha       "declare i8* @_Znam(i64)\n"
4366b9be1dbSAhmed Bougacha       "declare i8* @_ZnamRKSt9nothrow_t(i64, %struct*)\n"
43796bbec79SEric Fiselier       "declare i8* @_ZnamSt11align_val_t(i64, i64)\n"
43896bbec79SEric Fiselier       "declare i8* @_ZnamSt11align_val_tRKSt9nothrow_t(i64, i64, %struct*)\n"
4396b9be1dbSAhmed Bougacha       "declare i8* @_Znwj(i32)\n"
4406b9be1dbSAhmed Bougacha       "declare i8* @_ZnwjRKSt9nothrow_t(i32, %struct*)\n"
44196bbec79SEric Fiselier       "declare i8* @_ZnwjSt11align_val_t(i32, i32)\n"
44296bbec79SEric Fiselier       "declare i8* @_ZnwjSt11align_val_tRKSt9nothrow_t(i32, i32, %struct*)\n"
4436b9be1dbSAhmed Bougacha       "declare i8* @_Znwm(i64)\n"
4446b9be1dbSAhmed Bougacha       "declare i8* @_ZnwmRKSt9nothrow_t(i64, %struct*)\n"
44596bbec79SEric Fiselier       "declare i8* @_ZnwmSt11align_val_t(i64, i64)\n"
44696bbec79SEric Fiselier       "declare i8* @_ZnwmSt11align_val_tRKSt9nothrow_t(i64, i64, %struct*)\n"
4476b9be1dbSAhmed Bougacha 
4486b9be1dbSAhmed Bougacha       "declare void @\"??3@YAXPEAX@Z\"(i8*)\n"
4496b9be1dbSAhmed Bougacha       "declare void @\"??3@YAXPEAXAEBUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
4506b9be1dbSAhmed Bougacha       "declare void @\"??3@YAXPEAX_K@Z\"(i8*, i64)\n"
4516b9be1dbSAhmed Bougacha       "declare void @\"??_V@YAXPEAX@Z\"(i8*)\n"
4526b9be1dbSAhmed Bougacha       "declare void @\"??_V@YAXPEAXAEBUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
4536b9be1dbSAhmed Bougacha       "declare void @\"??_V@YAXPEAX_K@Z\"(i8*, i64)\n"
4546b9be1dbSAhmed Bougacha       "declare i8* @\"??2@YAPAXI@Z\"(i32)\n"
4556b9be1dbSAhmed Bougacha       "declare i8* @\"??2@YAPAXIABUnothrow_t@std@@@Z\"(i32, %struct*)\n"
4566b9be1dbSAhmed Bougacha       "declare i8* @\"??2@YAPEAX_K@Z\"(i64)\n"
4576b9be1dbSAhmed Bougacha       "declare i8* @\"??2@YAPEAX_KAEBUnothrow_t@std@@@Z\"(i64, %struct*)\n"
4586b9be1dbSAhmed Bougacha       "declare i8* @\"??_U@YAPAXI@Z\"(i32)\n"
4596b9be1dbSAhmed Bougacha       "declare i8* @\"??_U@YAPAXIABUnothrow_t@std@@@Z\"(i32, %struct*)\n"
4606b9be1dbSAhmed Bougacha       "declare i8* @\"??_U@YAPEAX_K@Z\"(i64)\n"
4616b9be1dbSAhmed Bougacha       "declare i8* @\"??_U@YAPEAX_KAEBUnothrow_t@std@@@Z\"(i64, %struct*)\n"
4626b9be1dbSAhmed Bougacha 
4636b9be1dbSAhmed Bougacha       "declare void @\"??3@YAXPAX@Z\"(i8*)\n"
4646b9be1dbSAhmed Bougacha       "declare void @\"??3@YAXPAXABUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
4656b9be1dbSAhmed Bougacha       "declare void @\"??3@YAXPAXI@Z\"(i8*, i32)\n"
4666b9be1dbSAhmed Bougacha       "declare void @\"??_V@YAXPAX@Z\"(i8*)\n"
4676b9be1dbSAhmed Bougacha       "declare void @\"??_V@YAXPAXABUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
4686b9be1dbSAhmed Bougacha       "declare void @\"??_V@YAXPAXI@Z\"(i8*, i32)\n"
4696b9be1dbSAhmed Bougacha 
4706b9be1dbSAhmed Bougacha       // These other functions were derived from the .def C declaration.
4716b9be1dbSAhmed Bougacha       "declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*)\n"
4726b9be1dbSAhmed Bougacha       "declare void @__cxa_guard_abort(%struct*)\n"
4736b9be1dbSAhmed Bougacha       "declare i32 @__cxa_guard_acquire(%struct*)\n"
4746b9be1dbSAhmed Bougacha       "declare void @__cxa_guard_release(%struct*)\n"
4756b9be1dbSAhmed Bougacha 
4766b9be1dbSAhmed Bougacha       "declare i32 @__nvvm_reflect(i8*)\n"
4776b9be1dbSAhmed Bougacha 
4786b9be1dbSAhmed Bougacha       "declare i8* @__memcpy_chk(i8*, i8*, i64, i64)\n"
4796b9be1dbSAhmed Bougacha       "declare i8* @__memmove_chk(i8*, i8*, i64, i64)\n"
4806b9be1dbSAhmed Bougacha       "declare i8* @__memset_chk(i8*, i32, i64, i64)\n"
4816b9be1dbSAhmed Bougacha       "declare i8* @__stpcpy_chk(i8*, i8*, i64)\n"
4826b9be1dbSAhmed Bougacha       "declare i8* @__stpncpy_chk(i8*, i8*, i64, i64)\n"
4836b9be1dbSAhmed Bougacha       "declare i8* @__strcpy_chk(i8*, i8*, i64)\n"
4846b9be1dbSAhmed Bougacha       "declare i8* @__strncpy_chk(i8*, i8*, i64, i64)\n"
485abb2a93cSErik Pilkington       "declare i8* @__memccpy_chk(i8*, i8*, i32, i64)\n"
48686429c4eSDávid Bolvanský       "declare i8* @__mempcpy_chk(i8*, i8*, i64, i64)\n"
487abb2a93cSErik Pilkington       "declare i32 @__snprintf_chk(i8*, i64, i32, i64, i8*, ...)\n"
488abb2a93cSErik Pilkington       "declare i32 @__sprintf_chk(i8*, i32, i64, i8*, ...)\n"
489abb2a93cSErik Pilkington       "declare i8* @__strcat_chk(i8*, i8*, i64)\n"
490abb2a93cSErik Pilkington       "declare i64 @__strlcat_chk(i8*, i8*, i64, i64)\n"
491f8c9ceb1SGeorge Burgess IV       "declare i64 @__strlen_chk(i8*, i64)\n"
492abb2a93cSErik Pilkington       "declare i8* @__strncat_chk(i8*, i8*, i64, i64)\n"
493abb2a93cSErik Pilkington       "declare i64 @__strlcpy_chk(i8*, i8*, i64, i64)\n"
494abb2a93cSErik Pilkington       "declare i32 @__vsnprintf_chk(i8*, i64, i32, i64, i8*, %struct*)\n"
495abb2a93cSErik Pilkington       "declare i32 @__vsprintf_chk(i8*, i32, i64, i8*, %struct*)\n"
4966b9be1dbSAhmed Bougacha 
4976b9be1dbSAhmed Bougacha       "declare i8* @memalign(i64, i64)\n"
4986b9be1dbSAhmed Bougacha       "declare i8* @mempcpy(i8*, i8*, i64)\n"
4996b9be1dbSAhmed Bougacha       "declare i8* @memrchr(i8*, i32, i64)\n"
5006b9be1dbSAhmed Bougacha 
501c4250941SGui Andrade       "declare void @__atomic_load(i64, i8*, i8*, i32)\n"
502c4250941SGui Andrade       "declare void @__atomic_store(i64, i8*, i8*, i32)\n"
503c4250941SGui Andrade 
5046b9be1dbSAhmed Bougacha       // These are similar to the FILE* fgetc/fputc.
5056b9be1dbSAhmed Bougacha       "declare i32 @_IO_getc(%struct*)\n"
5066b9be1dbSAhmed Bougacha       "declare i32 @_IO_putc(i32, %struct*)\n"
5076b9be1dbSAhmed Bougacha 
5086b9be1dbSAhmed Bougacha       "declare i32 @__isoc99_scanf(i8*, ...)\n"
5096b9be1dbSAhmed Bougacha       "declare i32 @__isoc99_sscanf(i8*, i8*, ...)\n"
5106b9be1dbSAhmed Bougacha       "declare i8* @__strdup(i8*)\n"
5116b9be1dbSAhmed Bougacha       "declare i8* @__strndup(i8*, i64)\n"
5126b9be1dbSAhmed Bougacha       "declare i8* @__strtok_r(i8*, i8*, i8**)\n"
5136b9be1dbSAhmed Bougacha 
5146b9be1dbSAhmed Bougacha       "declare double @__sqrt_finite(double)\n"
5156b9be1dbSAhmed Bougacha       "declare float @__sqrtf_finite(float)\n"
5166b9be1dbSAhmed Bougacha       "declare x86_fp80 @__sqrtl_finite(x86_fp80)\n"
5176b9be1dbSAhmed Bougacha       "declare double @exp10(double)\n"
5186b9be1dbSAhmed Bougacha       "declare float @exp10f(float)\n"
5196b9be1dbSAhmed Bougacha       "declare x86_fp80 @exp10l(x86_fp80)\n"
5206b9be1dbSAhmed Bougacha 
5216b9be1dbSAhmed Bougacha       // These printf variants have the same prototype as the non-'i' versions.
5226b9be1dbSAhmed Bougacha       "declare i32 @fiprintf(%struct*, i8*, ...)\n"
5236b9be1dbSAhmed Bougacha       "declare i32 @iprintf(i8*, ...)\n"
5246b9be1dbSAhmed Bougacha       "declare i32 @siprintf(i8*, i8*, ...)\n"
5256b9be1dbSAhmed Bougacha 
526*ad88a37cSFlorian Hahn       // __small_printf variants have the same prototype as the non-'i'
527*ad88a37cSFlorian Hahn       // versions.
5285e349afcSSam Clegg       "declare i32 @__small_fprintf(%struct*, i8*, ...)\n"
5295e349afcSSam Clegg       "declare i32 @__small_printf(i8*, ...)\n"
5305e349afcSSam Clegg       "declare i32 @__small_sprintf(i8*, i8*, ...)\n"
5315e349afcSSam Clegg 
5326b9be1dbSAhmed Bougacha       "declare i32 @htonl(i32)\n"
5336b9be1dbSAhmed Bougacha       "declare i16 @htons(i16)\n"
5346b9be1dbSAhmed Bougacha       "declare i32 @ntohl(i32)\n"
5356b9be1dbSAhmed Bougacha       "declare i16 @ntohs(i16)\n"
5366b9be1dbSAhmed Bougacha 
5376b9be1dbSAhmed Bougacha       "declare i32 @isascii(i32)\n"
5386b9be1dbSAhmed Bougacha       "declare i32 @isdigit(i32)\n"
5396b9be1dbSAhmed Bougacha       "declare i32 @toascii(i32)\n"
5403cd8c16dSAndrew Kaylor 
5413cd8c16dSAndrew Kaylor       // These functions were extracted from math-finite.h which provides
5423cd8c16dSAndrew Kaylor       // functions similar to those in math.h, but optimized for handling
5433cd8c16dSAndrew Kaylor       // finite values only.
5443cd8c16dSAndrew Kaylor       "declare double @__acos_finite(double)\n"
5453cd8c16dSAndrew Kaylor       "declare float @__acosf_finite(float)\n"
5463cd8c16dSAndrew Kaylor       "declare x86_fp80 @__acosl_finite(x86_fp80)\n"
5473cd8c16dSAndrew Kaylor       "declare double @__acosh_finite(double)\n"
5483cd8c16dSAndrew Kaylor       "declare float @__acoshf_finite(float)\n"
5493cd8c16dSAndrew Kaylor       "declare x86_fp80 @__acoshl_finite(x86_fp80)\n"
5503cd8c16dSAndrew Kaylor       "declare double @__asin_finite(double)\n"
5513cd8c16dSAndrew Kaylor       "declare float @__asinf_finite(float)\n"
5523cd8c16dSAndrew Kaylor       "declare x86_fp80 @__asinl_finite(x86_fp80)\n"
5533cd8c16dSAndrew Kaylor       "declare double @__atan2_finite(double, double)\n"
5543cd8c16dSAndrew Kaylor       "declare float @__atan2f_finite(float, float)\n"
5553cd8c16dSAndrew Kaylor       "declare x86_fp80 @__atan2l_finite(x86_fp80, x86_fp80)\n"
5563cd8c16dSAndrew Kaylor       "declare double @__atanh_finite(double)\n"
5573cd8c16dSAndrew Kaylor       "declare float @__atanhf_finite(float)\n"
5583cd8c16dSAndrew Kaylor       "declare x86_fp80 @__atanhl_finite(x86_fp80)\n"
5593cd8c16dSAndrew Kaylor       "declare double @__cosh_finite(double)\n"
5603cd8c16dSAndrew Kaylor       "declare float @__coshf_finite(float)\n"
5613cd8c16dSAndrew Kaylor       "declare x86_fp80 @__coshl_finite(x86_fp80)\n"
5623cd8c16dSAndrew Kaylor       "declare double @__exp10_finite(double)\n"
5633cd8c16dSAndrew Kaylor       "declare float @__exp10f_finite(float)\n"
5643cd8c16dSAndrew Kaylor       "declare x86_fp80 @__exp10l_finite(x86_fp80)\n"
5653cd8c16dSAndrew Kaylor       "declare double @__exp2_finite(double)\n"
5663cd8c16dSAndrew Kaylor       "declare float @__exp2f_finite(float)\n"
5673cd8c16dSAndrew Kaylor       "declare x86_fp80 @__exp2l_finite(x86_fp80)\n"
5683cd8c16dSAndrew Kaylor       "declare double @__exp_finite(double)\n"
5693cd8c16dSAndrew Kaylor       "declare float @__expf_finite(float)\n"
5703cd8c16dSAndrew Kaylor       "declare x86_fp80 @__expl_finite(x86_fp80)\n"
5713cd8c16dSAndrew Kaylor       "declare double @__log10_finite(double)\n"
5723cd8c16dSAndrew Kaylor       "declare float @__log10f_finite(float)\n"
5733cd8c16dSAndrew Kaylor       "declare x86_fp80 @__log10l_finite(x86_fp80)\n"
5743cd8c16dSAndrew Kaylor       "declare double @__log2_finite(double)\n"
5753cd8c16dSAndrew Kaylor       "declare float @__log2f_finite(float)\n"
5763cd8c16dSAndrew Kaylor       "declare x86_fp80 @__log2l_finite(x86_fp80)\n"
5773cd8c16dSAndrew Kaylor       "declare double @__log_finite(double)\n"
5783cd8c16dSAndrew Kaylor       "declare float @__logf_finite(float)\n"
5793cd8c16dSAndrew Kaylor       "declare x86_fp80 @__logl_finite(x86_fp80)\n"
5803cd8c16dSAndrew Kaylor       "declare double @__pow_finite(double, double)\n"
5813cd8c16dSAndrew Kaylor       "declare float @__powf_finite(float, float)\n"
5823cd8c16dSAndrew Kaylor       "declare x86_fp80 @__powl_finite(x86_fp80, x86_fp80)\n"
5833cd8c16dSAndrew Kaylor       "declare double @__sinh_finite(double)\n"
5843cd8c16dSAndrew Kaylor       "declare float @__sinhf_finite(float)\n"
5853cd8c16dSAndrew Kaylor       "declare x86_fp80 @__sinhl_finite(x86_fp80)\n"
58699a0aa07SShimin Cui 
58799a0aa07SShimin Cui       // These functions are aix vec allocation/free routines
58899a0aa07SShimin Cui       "declare i8* @vec_calloc(i64, i64)\n"
58999a0aa07SShimin Cui       "declare i8* @vec_malloc(i64)\n"
59099a0aa07SShimin Cui       "declare i8* @vec_realloc(i8*, i64)\n"
59199a0aa07SShimin Cui       "declare void @vec_free(i8*)\n"
5922662351eSJoseph Huber 
5932662351eSJoseph Huber       // These functions are OpenMP Offloading allocation / free routines
5942662351eSJoseph Huber       "declare i8* @__kmpc_alloc_shared(i64)\n"
595*ad88a37cSFlorian Hahn       "declare void @__kmpc_free_shared(i8*, i64)\n");
5966b9be1dbSAhmed Bougacha 
5976b9be1dbSAhmed Bougacha   for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) {
598d21529faSDavid L. Jones     LibFunc LF = (LibFunc)FI;
5996b9be1dbSAhmed Bougacha     // Make sure everything is available; we're not testing target defaults.
6006b9be1dbSAhmed Bougacha     TLII.setAvailable(LF);
6016b9be1dbSAhmed Bougacha     Function *F = M->getFunction(TLI.getName(LF));
6026b9be1dbSAhmed Bougacha     EXPECT_TRUE(isLibFunc(F, LF));
6036b9be1dbSAhmed Bougacha   }
6046b9be1dbSAhmed Bougacha }
605