TargetLibraryInfo.h revision 72c8331ec1437f8c33fff1dac1ea0ebb11009411
1ce99120084f549a523213064648662a704e8b789Chris Lattner//===-- llvm/Target/TargetLibraryInfo.h - Library information ---*- C++ -*-===//
2ce99120084f549a523213064648662a704e8b789Chris Lattner//
3ce99120084f549a523213064648662a704e8b789Chris Lattner//                     The LLVM Compiler Infrastructure
4ce99120084f549a523213064648662a704e8b789Chris Lattner//
5ce99120084f549a523213064648662a704e8b789Chris Lattner// This file is distributed under the University of Illinois Open Source
6ce99120084f549a523213064648662a704e8b789Chris Lattner// License. See LICENSE.TXT for details.
7ce99120084f549a523213064648662a704e8b789Chris Lattner//
8ce99120084f549a523213064648662a704e8b789Chris Lattner//===----------------------------------------------------------------------===//
9ce99120084f549a523213064648662a704e8b789Chris Lattner
10ce99120084f549a523213064648662a704e8b789Chris Lattner#ifndef LLVM_TARGET_TARGETLIBRARYINFO_H
11ce99120084f549a523213064648662a704e8b789Chris Lattner#define LLVM_TARGET_TARGETLIBRARYINFO_H
12ce99120084f549a523213064648662a704e8b789Chris Lattner
139d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman#include "llvm/ADT/DenseMap.h"
14255f89faee13dc491cb64fbeae3c763e7e2ea4e6Chandler Carruth#include "llvm/Pass.h"
15ce99120084f549a523213064648662a704e8b789Chris Lattner
16ce99120084f549a523213064648662a704e8b789Chris Lattnernamespace llvm {
17ce99120084f549a523213064648662a704e8b789Chris Lattner  class Triple;
18ce99120084f549a523213064648662a704e8b789Chris Lattner
19ce99120084f549a523213064648662a704e8b789Chris Lattner  namespace LibFunc {
20ce99120084f549a523213064648662a704e8b789Chris Lattner    enum Func {
21cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int _IO_getc(_IO_FILE * __fp);
22cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      under_IO_getc,
23cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int _IO_putc(int __c, _IO_FILE * __fp);
24cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      under_IO_putc,
258e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void operator delete[](void*);
268e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZdaPv,
2772c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith      /// void operator delete[](void*, nothrow);
2872c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith      ZdaPvRKSt9nothrow_t,
298e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void operator delete(void*);
308e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZdlPv,
3172c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith      /// void operator delete(void*, nothrow);
3272c8331ec1437f8c33fff1dac1ea0ebb11009411Richard Smith      ZdlPvRKSt9nothrow_t,
338e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned int);
348e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znaj,
358e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned int, nothrow);
368e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnajRKSt9nothrow_t,
378e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned long);
388e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znam,
398e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned long, nothrow);
408e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnamRKSt9nothrow_t,
418e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned int);
428e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znwj,
438e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned int, nothrow);
448e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnwjRKSt9nothrow_t,
458e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned long);
468e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znwm,
478e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned long, nothrow);
488e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnwmRKSt9nothrow_t,
49d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int __cxa_atexit(void (*f)(void *), void *p, void *d);
50d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_atexit,
51d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void __cxa_guard_abort(guard_t *guard);
52d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi.
53d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_abort,
54d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int __cxa_guard_acquire(guard_t *guard);
55d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_acquire,
56d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void __cxa_guard_release(guard_t *guard);
57d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_release,
58cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int __isoc99_scanf (const char *format, ...)
59cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_isoc99_scanf,
60cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int __isoc99_sscanf(const char *s, const char *format, ...)
61cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_isoc99_sscanf,
62d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size);
63d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      memcpy_chk,
64b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// double __sqrt_finite(double x);
65b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrt_finite,
66b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// float __sqrt_finite(float x);
67b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrtf_finite,
68b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// long double __sqrt_finite(long double x);
69b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrtl_finite,
70cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char * __strdup(const char *s);
71cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strdup,
72cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *__strndup(const char *s, size_t n);
73cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strndup,
74cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char * __strtok_r(char *s, const char *delim, char **save_ptr);
75cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strtok_r,
766098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int abs(int j);
776098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      abs,
78cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int access(const char *path, int amode);
79cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      access,
808ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double acos(double x);
818ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      acos,
828ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float acosf(float x);
838ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      acosf,
846871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double acosh(double x);
856871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acosh,
866871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float acoshf(float x);
876871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acoshf,
886871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double acoshl(long double x);
896871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acoshl,
90d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double acosl(long double x);
91d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      acosl,
928ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double asin(double x);
938ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      asin,
948ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float asinf(float x);
958ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      asinf,
966871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double asinh(double x);
976871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinh,
986871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float asinhf(float x);
996871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinhf,
1006871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double asinhl(long double x);
1016871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinhl,
102d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double asinl(long double x);
103d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      asinl,
1048ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double atan(double x);
1058ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      atan,
10632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double atan2(double y, double x);
10732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      atan2,
10832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float atan2f(float y, float x);
10932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      atan2f,
110d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double atan2l(long double y, long double x);
111d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atan2l,
112d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float atanf(float x);
113d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atanf,
1146871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double atanh(double x);
1156871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanh,
1166871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float atanhf(float x);
1176871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanhf,
1186871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double atanhl(long double x);
1196871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanhl,
120d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double atanl(long double x);
121d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atanl,
122cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double atof(const char *str);
123cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atof,
124cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int atoi(const char *str);
125cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atoi,
126cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long atol(const char *str);
127cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atol,
128cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long long atoll(const char *nptr);
129cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atoll,
130cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int bcmp(const void *s1, const void *s2, size_t n);
131cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bcmp,
132cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void bcopy(const void *s1, void *s2, size_t n);
133cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bcopy,
134cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void bzero(void *s, size_t n);
135cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bzero,
1368e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *calloc(size_t count, size_t size);
1378e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      calloc,
1386871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double cbrt(double x);
1396871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrt,
1406871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float cbrtf(float x);
1416871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrtf,
1426871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double cbrtl(long double x);
1436871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrtl,
1448ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double ceil(double x);
1458ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      ceil,
1468ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float ceilf(float x);
1478ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      ceilf,
148d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double ceill(long double x);
149d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      ceill,
150cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int chmod(const char *path, mode_t mode);
151cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      chmod,
152cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int chown(const char *path, uid_t owner, gid_t group);
153cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      chown,
154cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void clearerr(FILE *stream);
155cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      clearerr,
156cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int closedir(DIR *dirp);
157cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      closedir,
158243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double copysign(double x, double y);
159243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysign,
160243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float copysignf(float x, float y);
161243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysignf,
162243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double copysignl(long double x, long double y);
163243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysignl,
1648ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double cos(double x);
1658ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cos,
1668ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float cosf(float x);
1678ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cosf,
1688ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double cosh(double x);
1698ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cosh,
1708ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float coshf(float x);
1718ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      coshf,
172d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double coshl(long double x);
173d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      coshl,
174d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double cosl(long double x);
175d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cosl,
176cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *ctermid(char *s);
177cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ctermid,
1788ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double exp(double x);
1798ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp,
1806871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double exp10(double x);
1816871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10,
1826871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float exp10f(float x);
1836871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10f,
1846871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double exp10l(long double x);
1856871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10l,
1868ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double exp2(double x);
1878ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp2,
1888ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float exp2f(float x);
1898ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp2f,
190d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double exp2l(long double x);
191d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      exp2l,
192d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float expf(float x);
193d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expf,
194d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double expl(long double x);
195d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expl,
1968ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double expm1(double x);
1978ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      expm1,
1988ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float expm1f(float x);
199d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      expm1f,
200d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double expm1l(long double x);
201d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expm1l,
2028ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double fabs(double x);
2038ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      fabs,
2048ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float fabsf(float x);
2058ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      fabsf,
206d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double fabsl(long double x);
207d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fabsl,
208cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fclose(FILE *stream);
209cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fclose,
210cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fdopen(int fildes, const char *mode);
211cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fdopen,
212cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int feof(FILE *stream);
213cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      feof,
214cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ferror(FILE *stream);
215cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ferror,
216cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fflush(FILE *stream);
217cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fflush,
2186098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffs(int i);
2196098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffs,
2206098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffsl(long int i);
2216098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffsl,
2226098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffsll(long long int i);
2236098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffsll,
224cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fgetc(FILE *stream);
225cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgetc,
226cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fgetpos(FILE *stream, fpos_t *pos);
227cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgetpos,
228cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *fgets(char *s, int n, FILE *stream);
229cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgets,
230cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fileno(FILE *stream);
231cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fileno,
232d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int fiprintf(FILE *stream, const char *format, ...);
233d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fiprintf,
234cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void flockfile(FILE *file);
235cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      flockfile,
2368ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double floor(double x);
2378ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      floor,
2388ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float floorf(float x);
2398ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      floorf,
240d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double floorl(long double x);
241d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      floorl,
24232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double fmod(double x, double y);
24332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      fmod,
24432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float fmodf(float x, float y);
24532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      fmodf,
246d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double fmodl(long double x, long double y);
247d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fmodl,
248cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fopen(const char *filename, const char *mode);
249cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fopen,
250cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fopen64(const char *filename, const char *opentype)
251cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fopen64,
2526098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int fprintf(FILE *stream, const char *format, ...);
2536098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      fprintf,
2548d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int fputc(int c, FILE *stream);
2558d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      fputc,
256683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// int fputs(const char *s, FILE *stream);
257683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      fputs,
258cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
259cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fread,
2608e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void free(void *ptr);
2618e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      free,
262cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double frexp(double num, int *exp);
263cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexp,
264cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// float frexpf(float num, int *exp);
265cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexpf,
266cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long double frexpl(long double num, int *exp);
267cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexpl,
268cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fscanf(FILE *stream, const char *format, ... );
269cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fscanf,
270cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseek(FILE *stream, long offset, int whence);
271cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseek,
272cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseeko(FILE *stream, off_t offset, int whence);
273cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseeko,
274cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseeko64(FILE *stream, off64_t offset, int whence)
275cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseeko64,
276cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fsetpos(FILE *stream, const fpos_t *pos);
277cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fsetpos,
278cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstat(int fildes, struct stat *buf);
279cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstat,
280cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstat64(int filedes, struct stat64 *buf)
281cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstat64,
282cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstatvfs(int fildes, struct statvfs *buf);
283cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstatvfs,
284cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstatvfs64(int fildes, struct statvfs64 *buf);
285cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstatvfs64,
286cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long ftell(FILE *stream);
287cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftell,
288cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// off_t ftello(FILE *stream);
289cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftello,
290cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// off64_t ftello64(FILE *stream)
291cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftello64,
292cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ftrylockfile(FILE *file);
293cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftrylockfile,
294cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void funlockfile(FILE *file);
295cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      funlockfile,
296683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// size_t fwrite(const void *ptr, size_t size, size_t nitems,
297683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// FILE *stream);
298683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      fwrite,
299cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getc(FILE *stream);
300cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getc,
301cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getc_unlocked(FILE *stream);
302cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getc_unlocked,
303cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getchar(void);
304cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getchar,
305cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *getenv(const char *name);
306cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getenv,
307cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getitimer(int which, struct itimerval *value);
308cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getitimer,
309cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getlogin_r(char *name, size_t namesize);
310cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getlogin_r,
311cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// struct passwd *getpwnam(const char *name);
312cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getpwnam,
313cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *gets(char *s);
314cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      gets,
315f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman      /// int gettimeofday(struct timeval *tp, void *tzp);
316f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman      gettimeofday,
317cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint32_t htonl(uint32_t hostlong);
318cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      htonl,
319cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint16_t htons(uint16_t hostshort);
320cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      htons,
321683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// int iprintf(const char *format, ...);
322683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      iprintf,
3236098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int isascii(int c);
3246098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      isascii,
3256098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int isdigit(int c);
3266098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      isdigit,
3276098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// long int labs(long int j);
3286098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      labs,
329cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lchown(const char *path, uid_t owner, gid_t group);
330cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lchown,
3316098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// long long int llabs(long long int j);
3326098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      llabs,
3338ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log(double x);
3348ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log,
3358ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log10(double x);
3368ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log10,
3378ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float log10f(float x);
3388ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log10f,
339d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double log10l(long double x);
340d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log10l,
3418ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log1p(double x);
3428ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log1p,
3438ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float log1pf(float x);
3448ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log1pf,
345d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double log1pl(long double x);
346d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log1pl,
347d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// double log2(double x);
348d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2,
349d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float log2f(float x);
350d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2f,
351d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// double long double log2l(long double x);
352d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2l,
3536871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double logb(double x);
3546871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logb,
3556871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float logbf(float x);
3566871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logbf,
3576871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double logbl(long double x);
3586871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logbl,
359d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float logf(float x);
360d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      logf,
361d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double logl(long double x);
362d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      logl,
363cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lstat(const char *path, struct stat *buf);
364cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lstat,
365cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lstat64(const char *path, struct stat64 *buf);
366cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lstat64,
3678e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *malloc(size_t size);
3688e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      malloc,
369cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void *memalign(size_t boundary, size_t size);
370cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memalign,
371cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void *memccpy(void *s1, const void *s2, int c, size_t n);
372cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memccpy,
3738d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// void *memchr(const void *s, int c, size_t n);
3748d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      memchr,
3758d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int memcmp(const void *s1, const void *s2, size_t n);
3768d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      memcmp,
377683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memcpy(void *s1, const void *s2, size_t n);
378398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner      memcpy,
379683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memmove(void *s1, const void *s2, size_t n);
380149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner      memmove,
381cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // void *memrchr(const void *s, int c, size_t n);
382cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memrchr,
383683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memset(void *b, int c, size_t len);
384683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      memset,
385ce99120084f549a523213064648662a704e8b789Chris Lattner      /// void memset_pattern16(void *b, const void *pattern16, size_t len);
386ce99120084f549a523213064648662a704e8b789Chris Lattner      memset_pattern16,
387cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int mkdir(const char *path, mode_t mode);
388cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      mkdir,
389cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// time_t mktime(struct tm *timeptr);
390cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      mktime,
391cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double modf(double x, double *iptr);
392cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modf,
393cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// float modff(float, float *iptr);
394cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modff,
395cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long double modfl(long double value, long double *iptr);
396cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modfl,
397243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double nearbyint(double x);
398243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyint,
399243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float nearbyintf(float x);
400243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyintf,
401243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double nearbyintl(long double x);
402243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyintl,
403cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint32_t ntohl(uint32_t netlong);
404cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ntohl,
405cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint16_t ntohs(uint16_t netshort);
406cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ntohs,
407cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int open(const char *path, int oflag, ... );
408cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      open,
409cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int open64(const char *filename, int flags[, mode_t mode])
410cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      open64,
411cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// DIR *opendir(const char *dirname);
412cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      opendir,
413cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int pclose(FILE *stream);
414cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pclose,
415cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void perror(const char *s);
416cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      perror,
417cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *popen(const char *command, const char *mode);
418cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      popen,
4198e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// int posix_memalign(void **memptr, size_t alignment, size_t size);
4208e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      posix_memalign,
4218ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double pow(double x, double y);
4228ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      pow,
4238ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float powf(float x, float y);
4248ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      powf,
4258ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// long double powl(long double x, long double y);
4268ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      powl,
427cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
428cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pread,
4296098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int printf(const char *format, ...);
4306098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      printf,
431cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int putc(int c, FILE *stream);
432cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      putc,
4338d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int putchar(int c);
4348d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      putchar,
4358d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int puts(const char *s);
4368d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      puts,
437cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t pwrite(int fildes, const void *buf, size_t nbyte,
438cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///                off_t offset);
439cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pwrite,
440cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void qsort(void *base, size_t nel, size_t width,
441cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///            int (*compar)(const void *, const void *));
442cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      qsort,
443cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t read(int fildes, void *buf, size_t nbyte);
444cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      read,
445cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t readlink(const char *path, char *buf, size_t bufsize);
446cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      readlink,
4478e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *realloc(void *ptr, size_t size);
4488e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      realloc,
4498e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *reallocf(void *ptr, size_t size);
4508e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      reallocf,
451cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *realpath(const char *file_name, char *resolved_name);
452cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      realpath,
453cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int remove(const char *path);
454cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      remove,
455cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int rename(const char *old, const char *new);
456cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rename,
457cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void rewind(FILE *stream);
458cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rewind,
459243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double rint(double x);
460243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rint,
461243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float rintf(float x);
462243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rintf,
463d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// long double rintl(long double x);
464243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rintl,
465cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int rmdir(const char *path);
466cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rmdir,
467d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// double round(double x);
468d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      round,
469d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// float roundf(float x);
470d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      roundf,
471d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// long double roundl(long double x);
472d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      roundl,
473cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int scanf(const char *restrict format, ... );
474cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      scanf,
475cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void setbuf(FILE *stream, char *buf);
476cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setbuf,
477cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int setitimer(int which, const struct itimerval *value,
478cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///               struct itimerval *ovalue);
479cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setitimer,
480cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int setvbuf(FILE *stream, char *buf, int type, size_t size);
481cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setvbuf,
48232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double sin(double x);
48332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sin,
48432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float sinf(float x);
48532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinf,
48632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double sinh(double x);
48732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinh,
48832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float sinhf(float x);
48932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinhf,
490d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sinhl(long double x);
491d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sinhl,
492d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sinl(long double x);
493d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sinl,
494419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne      /// int siprintf(char *str, const char *format, ...);
495419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne      siprintf,
496cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int snprintf(char *s, size_t n, const char *format, ...);
497cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      snprintf,
4986098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int sprintf(char *str, const char *format, ...);
4996098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      sprintf,
5003d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      /// double sqrt(double x);
5013d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      sqrt,
5023d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      /// float sqrtf(float x);
5033d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      sqrtf,
504d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sqrtl(long double x);
505d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sqrtl,
506cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int sscanf(const char *s, const char *format, ... );
507cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      sscanf,
508cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int stat(const char *path, struct stat *buf);
509cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stat,
510cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int stat64(const char *path, struct stat64 *buf);
511cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stat64,
512cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int statvfs(const char *path, struct statvfs *buf);
513cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      statvfs,
514cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int statvfs64(const char *path, struct statvfs64 *buf)
515cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      statvfs64,
516939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *stpcpy(char *s1, const char *s2);
517939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      stpcpy,
518cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *stpncpy(char *s1, const char *s2, size_t n);
519cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stpncpy,
520cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strcasecmp(const char *s1, const char *s2);
521cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strcasecmp,
5220841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strcat(char *s1, const char *s2);
5230841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strcat,
5248d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// char *strchr(const char *s, int c);
5258d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      strchr,
526939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// int strcmp(const char *s1, const char *s2);
527939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strcmp,
528cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strcoll(const char *s1, const char *s2);
529cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strcoll,
5300841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strcpy(char *s1, const char *s2);
5310841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strcpy,
532939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// size_t strcspn(const char *s1, const char *s2);
533939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strcspn,
5348e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// char *strdup(const char *s1);
5358e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      strdup,
5360841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// size_t strlen(const char *s);
5370841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strlen,
538cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strncasecmp(const char *s1, const char *s2, size_t n);
539cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strncasecmp,
5400841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strncat(char *s1, const char *s2, size_t n);
5410841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strncat,
5428d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int strncmp(const char *s1, const char *s2, size_t n);
5438d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      strncmp,
5440841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strncpy(char *s1, const char *s2, size_t n);
5450841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strncpy,
5468e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// char *strndup(const char *s1, size_t n);
5478e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      strndup,
5480841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// size_t strnlen(const char *s, size_t maxlen);
5490841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strnlen,
550939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strpbrk(const char *s1, const char *s2);
551939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strpbrk,
552939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strrchr(const char *s, int c);
553939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strrchr,
554939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// size_t strspn(const char *s1, const char *s2);
555939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strspn,
556939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strstr(const char *s1, const char *s2);
557939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strstr,
558939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// double strtod(const char *nptr, char **endptr);
559939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtod,
560939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// float strtof(const char *nptr, char **endptr);
561939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtof,
562cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // char *strtok(char *s1, const char *s2);
563cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strtok,
564cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // char *strtok_r(char *s, const char *sep, char **lasts);
565cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strtok_r,
566939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long int strtol(const char *nptr, char **endptr, int base);
567939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtol,
568939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long double strtold(const char *nptr, char **endptr);
569939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtold,
570939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long long int strtoll(const char *nptr, char **endptr, int base);
571939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoll,
572939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// unsigned long int strtoul(const char *nptr, char **endptr, int base);
573939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoul,
574939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// unsigned long long int strtoull(const char *nptr, char **endptr,
575939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      ///                                 int base);
576939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoull,
577cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// size_t strxfrm(char *s1, const char *s2, size_t n);
578cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strxfrm,
579cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int system(const char *command);
580cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      system,
58132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double tan(double x);
58232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tan,
58332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float tanf(float x);
58432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanf,
58532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double tanh(double x);
58632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanh,
58732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float tanhf(float x);
58832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanhf,
589d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double tanhl(long double x);
590d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      tanhl,
591d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double tanl(long double x);
592d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      tanl,
593cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// clock_t times(struct tms *buffer);
594cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      times,
595cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *tmpfile(void);
596cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      tmpfile,
597cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *tmpfile64(void)
598cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      tmpfile64,
5996098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int toascii(int c);
6006098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      toascii,
601243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double trunc(double x);
602243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      trunc,
603243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float truncf(float x);
604243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      truncf,
605243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double truncl(long double x);
606243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      truncl,
607cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int uname(struct utsname *name);
608cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      uname,
609cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ungetc(int c, FILE *stream);
610cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ungetc,
611cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int unlink(const char *path);
612cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      unlink,
613cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int unsetenv(const char *name);
614cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      unsetenv,
615cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int utime(const char *path, const struct utimbuf *times);
616cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      utime,
617cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int utimes(const char *path, const struct timeval times[2]);
618cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      utimes,
6198e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *valloc(size_t size);
6208e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      valloc,
621cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vfprintf(FILE *stream, const char *format, va_list ap);
622cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vfprintf,
623cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vfscanf(FILE *stream, const char *format, va_list arg);
624cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vfscanf,
625cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vprintf(const char *restrict format, va_list ap);
626cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vprintf,
627cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vscanf(const char *format, va_list arg);
628cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vscanf,
629cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsnprintf(char *s, size_t n, const char *format, va_list ap);
630cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsnprintf,
631cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsprintf(char *s, const char *format, va_list ap);
632cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsprintf,
633cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsscanf(const char *s, const char *format, va_list arg);
634cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsscanf,
635cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t write(int fildes, const void *buf, size_t nbyte);
636cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      write,
6379d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
638ce99120084f549a523213064648662a704e8b789Chris Lattner      NumLibFuncs
639ce99120084f549a523213064648662a704e8b789Chris Lattner    };
640ce99120084f549a523213064648662a704e8b789Chris Lattner  }
641ce99120084f549a523213064648662a704e8b789Chris Lattner
642ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what
643ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a
644ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc.
645ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass {
6462d24e2a396a1d211baaeedf32148a3b657240170David Blaikie  virtual void anchor();
6479d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  unsigned char AvailableArray[(LibFunc::NumLibFuncs+3)/4];
6489d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  llvm::DenseMap<unsigned, std::string> CustomNames;
6499d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  static const char* StandardNames[LibFunc::NumLibFuncs];
6509d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
6519d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  enum AvailabilityState {
6529d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    StandardName = 3, // (memset to all ones)
6539d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    CustomName = 1,
6549d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    Unavailable = 0  // (memset to all zeros)
6559d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  };
6569d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  void setState(LibFunc::Func F, AvailabilityState State) {
6579d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailableArray[F/4] &= ~(3 << 2*(F&3));
6589d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailableArray[F/4] |= State << 2*(F&3);
6599d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6609d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  AvailabilityState getState(LibFunc::Func F) const {
6619d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return static_cast<AvailabilityState>((AvailableArray[F/4] >> 2*(F&3)) & 3);
6629d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6639d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
664ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic:
665ce99120084f549a523213064648662a704e8b789Chris Lattner  static char ID;
666ce99120084f549a523213064648662a704e8b789Chris Lattner  TargetLibraryInfo();
667ce99120084f549a523213064648662a704e8b789Chris Lattner  TargetLibraryInfo(const Triple &T);
66840f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner  explicit TargetLibraryInfo(const TargetLibraryInfo &TLI);
669ce99120084f549a523213064648662a704e8b789Chris Lattner
670d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  /// getLibFunc - Search for a particular function name.  If it is one of the
671d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  /// known library functions, return true and set F to the corresponding value.
672d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  bool getLibFunc(StringRef funcName, LibFunc::Func &F) const;
673d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson
674ce99120084f549a523213064648662a704e8b789Chris Lattner  /// has - This function is used by optimizations that want to match on or form
675ce99120084f549a523213064648662a704e8b789Chris Lattner  /// a given library function.
676ce99120084f549a523213064648662a704e8b789Chris Lattner  bool has(LibFunc::Func F) const {
6779d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return getState(F) != Unavailable;
6789d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6799d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
680982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  /// hasOptimizedCodeGen - Return true if the function is both available as
681982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  /// a builtin and a candidate for optimized code generation.
682982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  bool hasOptimizedCodeGen(LibFunc::Func F) const {
683982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    if (getState(F) == Unavailable)
684982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson      return false;
685982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    switch (F) {
686982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    default: break;
687982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::copysign:  case LibFunc::copysignf:  case LibFunc::copysignl:
688982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::fabs:      case LibFunc::fabsf:      case LibFunc::fabsl:
689982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::sin:       case LibFunc::sinf:       case LibFunc::sinl:
690982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::cos:       case LibFunc::cosf:       case LibFunc::cosl:
691982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::sqrt:      case LibFunc::sqrtf:      case LibFunc::sqrtl:
692b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd    case LibFunc::sqrt_finite: case LibFunc::sqrtf_finite:
693b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd                                                  case LibFunc::sqrtl_finite:
694982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::floor:     case LibFunc::floorf:     case LibFunc::floorl:
695982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::nearbyint: case LibFunc::nearbyintf: case LibFunc::nearbyintl:
696982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::ceil:      case LibFunc::ceilf:      case LibFunc::ceill:
697982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::rint:      case LibFunc::rintf:      case LibFunc::rintl:
698982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::trunc:     case LibFunc::truncf:     case LibFunc::truncl:
699982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::log2:      case LibFunc::log2f:      case LibFunc::log2l:
700982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::exp2:      case LibFunc::exp2f:      case LibFunc::exp2l:
701982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::memcmp:
702982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson      return true;
703982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    }
704982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    return false;
705982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  }
706982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson
7079d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  StringRef getName(LibFunc::Func F) const {
7089d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailabilityState State = getState(F);
7099d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (State == Unavailable)
7109d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      return StringRef();
7119d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (State == StandardName)
7129d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      return StandardNames[F];
7139d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    assert(State == CustomName);
7149d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return CustomNames.find(F)->second;
715ce99120084f549a523213064648662a704e8b789Chris Lattner  }
716ce99120084f549a523213064648662a704e8b789Chris Lattner
717ce99120084f549a523213064648662a704e8b789Chris Lattner  /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to
718ce99120084f549a523213064648662a704e8b789Chris Lattner  /// ban use of specific library functions.
719ce99120084f549a523213064648662a704e8b789Chris Lattner  void setUnavailable(LibFunc::Func F) {
7209d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    setState(F, Unavailable);
721ce99120084f549a523213064648662a704e8b789Chris Lattner  }
722ce99120084f549a523213064648662a704e8b789Chris Lattner
723ce99120084f549a523213064648662a704e8b789Chris Lattner  void setAvailable(LibFunc::Func F) {
7249d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    setState(F, StandardName);
725ce99120084f549a523213064648662a704e8b789Chris Lattner  }
7269d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
7279d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  void setAvailableWithName(LibFunc::Func F, StringRef Name) {
7289d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (StandardNames[F] != Name) {
7299d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      setState(F, CustomName);
7309d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      CustomNames[F] = Name;
7319d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      assert(CustomNames.find(F) != CustomNames.end());
7329d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    } else {
7339d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      setState(F, StandardName);
7349d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    }
7359d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
7369d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
737188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  /// disableAllFunctions - This disables all builtins, which is used for
738188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  /// options like -fno-builtin.
739188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  void disableAllFunctions();
740ce99120084f549a523213064648662a704e8b789Chris Lattner};
741ce99120084f549a523213064648662a704e8b789Chris Lattner
742ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm
743ce99120084f549a523213064648662a704e8b789Chris Lattner
744ce99120084f549a523213064648662a704e8b789Chris Lattner#endif
745