TargetLibraryInfo.h revision 208130f11331eccab26c0a6f3146cd1891e53e33
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,
49208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      /// double __cospi(double x);
50208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      cospi,
51208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      /// float __cospif(float x);
52208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      cospif,
53d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int __cxa_atexit(void (*f)(void *), void *p, void *d);
54d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_atexit,
55d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void __cxa_guard_abort(guard_t *guard);
56d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi.
57d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_abort,
58d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int __cxa_guard_acquire(guard_t *guard);
59d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_acquire,
60d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void __cxa_guard_release(guard_t *guard);
61d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_release,
62cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int __isoc99_scanf (const char *format, ...)
63cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_isoc99_scanf,
64cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int __isoc99_sscanf(const char *s, const char *format, ...)
65cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_isoc99_sscanf,
66d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size);
67d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      memcpy_chk,
68208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      /// double __sincospi_stret(double x);
69208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      sincospi_stret,
70208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      /// float __sincospi_stretf(float x);
71208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      sincospi_stretf,
72208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      /// double __sinpi(double x);
73208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      sinpi,
74208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      /// float __sinpif(float x);
75208130f11331eccab26c0a6f3146cd1891e53e33Bob Wilson      sinpif,
76b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// double __sqrt_finite(double x);
77b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrt_finite,
78b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// float __sqrt_finite(float x);
79b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrtf_finite,
80b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// long double __sqrt_finite(long double x);
81b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrtl_finite,
82cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char * __strdup(const char *s);
83cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strdup,
84cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *__strndup(const char *s, size_t n);
85cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strndup,
86cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char * __strtok_r(char *s, const char *delim, char **save_ptr);
87cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strtok_r,
886098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int abs(int j);
896098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      abs,
90cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int access(const char *path, int amode);
91cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      access,
928ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double acos(double x);
938ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      acos,
948ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float acosf(float x);
958ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      acosf,
966871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double acosh(double x);
976871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acosh,
986871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float acoshf(float x);
996871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acoshf,
1006871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double acoshl(long double x);
1016871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acoshl,
102d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double acosl(long double x);
103d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      acosl,
1048ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double asin(double x);
1058ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      asin,
1068ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float asinf(float x);
1078ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      asinf,
1086871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double asinh(double x);
1096871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinh,
1106871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float asinhf(float x);
1116871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinhf,
1126871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double asinhl(long double x);
1136871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinhl,
114d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double asinl(long double x);
115d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      asinl,
1168ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double atan(double x);
1178ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      atan,
11832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double atan2(double y, double x);
11932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      atan2,
12032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float atan2f(float y, float x);
12132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      atan2f,
122d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double atan2l(long double y, long double x);
123d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atan2l,
124d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float atanf(float x);
125d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atanf,
1266871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double atanh(double x);
1276871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanh,
1286871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float atanhf(float x);
1296871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanhf,
1306871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double atanhl(long double x);
1316871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanhl,
132d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double atanl(long double x);
133d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atanl,
134cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double atof(const char *str);
135cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atof,
136cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int atoi(const char *str);
137cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atoi,
138cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long atol(const char *str);
139cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atol,
140cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long long atoll(const char *nptr);
141cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atoll,
142cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int bcmp(const void *s1, const void *s2, size_t n);
143cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bcmp,
144cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void bcopy(const void *s1, void *s2, size_t n);
145cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bcopy,
146cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void bzero(void *s, size_t n);
147cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bzero,
1488e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *calloc(size_t count, size_t size);
1498e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      calloc,
1506871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double cbrt(double x);
1516871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrt,
1526871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float cbrtf(float x);
1536871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrtf,
1546871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double cbrtl(long double x);
1556871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrtl,
1568ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double ceil(double x);
1578ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      ceil,
1588ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float ceilf(float x);
1598ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      ceilf,
160d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double ceill(long double x);
161d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      ceill,
162cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int chmod(const char *path, mode_t mode);
163cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      chmod,
164cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int chown(const char *path, uid_t owner, gid_t group);
165cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      chown,
166cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void clearerr(FILE *stream);
167cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      clearerr,
168cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int closedir(DIR *dirp);
169cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      closedir,
170243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double copysign(double x, double y);
171243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysign,
172243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float copysignf(float x, float y);
173243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysignf,
174243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double copysignl(long double x, long double y);
175243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysignl,
1768ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double cos(double x);
1778ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cos,
1788ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float cosf(float x);
1798ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cosf,
1808ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double cosh(double x);
1818ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cosh,
1828ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float coshf(float x);
1838ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      coshf,
184d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double coshl(long double x);
185d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      coshl,
186d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double cosl(long double x);
187d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cosl,
188cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *ctermid(char *s);
189cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ctermid,
1908ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double exp(double x);
1918ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp,
1926871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double exp10(double x);
1936871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10,
1946871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float exp10f(float x);
1956871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10f,
1966871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double exp10l(long double x);
1976871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10l,
1988ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double exp2(double x);
1998ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp2,
2008ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float exp2f(float x);
2018ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp2f,
202d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double exp2l(long double x);
203d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      exp2l,
204d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float expf(float x);
205d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expf,
206d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double expl(long double x);
207d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expl,
2088ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double expm1(double x);
2098ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      expm1,
2108ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float expm1f(float x);
211d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      expm1f,
212d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double expm1l(long double x);
213d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expm1l,
2148ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double fabs(double x);
2158ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      fabs,
2168ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float fabsf(float x);
2178ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      fabsf,
218d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double fabsl(long double x);
219d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fabsl,
220cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fclose(FILE *stream);
221cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fclose,
222cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fdopen(int fildes, const char *mode);
223cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fdopen,
224cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int feof(FILE *stream);
225cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      feof,
226cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ferror(FILE *stream);
227cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ferror,
228cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fflush(FILE *stream);
229cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fflush,
2306098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffs(int i);
2316098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffs,
2326098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffsl(long int i);
2336098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffsl,
2346098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffsll(long long int i);
2356098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffsll,
236cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fgetc(FILE *stream);
237cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgetc,
238cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fgetpos(FILE *stream, fpos_t *pos);
239cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgetpos,
240cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *fgets(char *s, int n, FILE *stream);
241cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgets,
242cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fileno(FILE *stream);
243cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fileno,
244d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int fiprintf(FILE *stream, const char *format, ...);
245d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fiprintf,
246cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void flockfile(FILE *file);
247cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      flockfile,
2488ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double floor(double x);
2498ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      floor,
2508ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float floorf(float x);
2518ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      floorf,
252d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double floorl(long double x);
253d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      floorl,
25432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double fmod(double x, double y);
25532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      fmod,
25632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float fmodf(float x, float y);
25732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      fmodf,
258d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double fmodl(long double x, long double y);
259d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fmodl,
260cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fopen(const char *filename, const char *mode);
261cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fopen,
262cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fopen64(const char *filename, const char *opentype)
263cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fopen64,
2646098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int fprintf(FILE *stream, const char *format, ...);
2656098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      fprintf,
2668d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int fputc(int c, FILE *stream);
2678d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      fputc,
268683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// int fputs(const char *s, FILE *stream);
269683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      fputs,
270cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
271cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fread,
2728e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void free(void *ptr);
2738e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      free,
274cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double frexp(double num, int *exp);
275cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexp,
276cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// float frexpf(float num, int *exp);
277cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexpf,
278cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long double frexpl(long double num, int *exp);
279cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexpl,
280cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fscanf(FILE *stream, const char *format, ... );
281cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fscanf,
282cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseek(FILE *stream, long offset, int whence);
283cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseek,
284cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseeko(FILE *stream, off_t offset, int whence);
285cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseeko,
286cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseeko64(FILE *stream, off64_t offset, int whence)
287cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseeko64,
288cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fsetpos(FILE *stream, const fpos_t *pos);
289cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fsetpos,
290cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstat(int fildes, struct stat *buf);
291cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstat,
292cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstat64(int filedes, struct stat64 *buf)
293cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstat64,
294cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstatvfs(int fildes, struct statvfs *buf);
295cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstatvfs,
296cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstatvfs64(int fildes, struct statvfs64 *buf);
297cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstatvfs64,
298cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long ftell(FILE *stream);
299cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftell,
300cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// off_t ftello(FILE *stream);
301cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftello,
302cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// off64_t ftello64(FILE *stream)
303cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftello64,
304cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ftrylockfile(FILE *file);
305cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftrylockfile,
306cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void funlockfile(FILE *file);
307cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      funlockfile,
308683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// size_t fwrite(const void *ptr, size_t size, size_t nitems,
309683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// FILE *stream);
310683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      fwrite,
311cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getc(FILE *stream);
312cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getc,
313cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getc_unlocked(FILE *stream);
314cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getc_unlocked,
315cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getchar(void);
316cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getchar,
317cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *getenv(const char *name);
318cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getenv,
319cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getitimer(int which, struct itimerval *value);
320cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getitimer,
321cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getlogin_r(char *name, size_t namesize);
322cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getlogin_r,
323cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// struct passwd *getpwnam(const char *name);
324cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getpwnam,
325cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *gets(char *s);
326cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      gets,
327f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman      /// int gettimeofday(struct timeval *tp, void *tzp);
328f0f85eab0469ac93f9bb6c7d19aca2c35868d83aMichael Gottesman      gettimeofday,
329cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint32_t htonl(uint32_t hostlong);
330cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      htonl,
331cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint16_t htons(uint16_t hostshort);
332cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      htons,
333683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// int iprintf(const char *format, ...);
334683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      iprintf,
3356098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int isascii(int c);
3366098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      isascii,
3376098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int isdigit(int c);
3386098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      isdigit,
3396098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// long int labs(long int j);
3406098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      labs,
341cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lchown(const char *path, uid_t owner, gid_t group);
342cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lchown,
3436098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// long long int llabs(long long int j);
3446098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      llabs,
3458ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log(double x);
3468ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log,
3478ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log10(double x);
3488ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log10,
3498ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float log10f(float x);
3508ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log10f,
351d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double log10l(long double x);
352d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log10l,
3538ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log1p(double x);
3548ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log1p,
3558ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float log1pf(float x);
3568ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log1pf,
357d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double log1pl(long double x);
358d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log1pl,
359d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// double log2(double x);
360d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2,
361d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float log2f(float x);
362d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2f,
363d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// double long double log2l(long double x);
364d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2l,
3656871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double logb(double x);
3666871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logb,
3676871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float logbf(float x);
3686871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logbf,
3696871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double logbl(long double x);
3706871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logbl,
371d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float logf(float x);
372d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      logf,
373d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double logl(long double x);
374d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      logl,
375cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lstat(const char *path, struct stat *buf);
376cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lstat,
377cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lstat64(const char *path, struct stat64 *buf);
378cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lstat64,
3798e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *malloc(size_t size);
3808e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      malloc,
381cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void *memalign(size_t boundary, size_t size);
382cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memalign,
383cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void *memccpy(void *s1, const void *s2, int c, size_t n);
384cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memccpy,
3858d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// void *memchr(const void *s, int c, size_t n);
3868d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      memchr,
3878d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int memcmp(const void *s1, const void *s2, size_t n);
3888d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      memcmp,
389683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memcpy(void *s1, const void *s2, size_t n);
390398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner      memcpy,
391683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memmove(void *s1, const void *s2, size_t n);
392149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner      memmove,
393cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // void *memrchr(const void *s, int c, size_t n);
394cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memrchr,
395683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memset(void *b, int c, size_t len);
396683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      memset,
397ce99120084f549a523213064648662a704e8b789Chris Lattner      /// void memset_pattern16(void *b, const void *pattern16, size_t len);
398ce99120084f549a523213064648662a704e8b789Chris Lattner      memset_pattern16,
399cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int mkdir(const char *path, mode_t mode);
400cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      mkdir,
401cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// time_t mktime(struct tm *timeptr);
402cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      mktime,
403cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double modf(double x, double *iptr);
404cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modf,
405cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// float modff(float, float *iptr);
406cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modff,
407cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long double modfl(long double value, long double *iptr);
408cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modfl,
409243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double nearbyint(double x);
410243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyint,
411243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float nearbyintf(float x);
412243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyintf,
413243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double nearbyintl(long double x);
414243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyintl,
415cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint32_t ntohl(uint32_t netlong);
416cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ntohl,
417cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint16_t ntohs(uint16_t netshort);
418cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ntohs,
419cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int open(const char *path, int oflag, ... );
420cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      open,
421cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int open64(const char *filename, int flags[, mode_t mode])
422cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      open64,
423cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// DIR *opendir(const char *dirname);
424cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      opendir,
425cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int pclose(FILE *stream);
426cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pclose,
427cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void perror(const char *s);
428cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      perror,
429cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *popen(const char *command, const char *mode);
430cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      popen,
4318e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// int posix_memalign(void **memptr, size_t alignment, size_t size);
4328e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      posix_memalign,
4338ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double pow(double x, double y);
4348ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      pow,
4358ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float powf(float x, float y);
4368ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      powf,
4378ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// long double powl(long double x, long double y);
4388ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      powl,
439cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
440cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pread,
4416098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int printf(const char *format, ...);
4426098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      printf,
443cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int putc(int c, FILE *stream);
444cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      putc,
4458d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int putchar(int c);
4468d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      putchar,
4478d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int puts(const char *s);
4488d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      puts,
449cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t pwrite(int fildes, const void *buf, size_t nbyte,
450cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///                off_t offset);
451cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pwrite,
452cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void qsort(void *base, size_t nel, size_t width,
453cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///            int (*compar)(const void *, const void *));
454cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      qsort,
455cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t read(int fildes, void *buf, size_t nbyte);
456cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      read,
457cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t readlink(const char *path, char *buf, size_t bufsize);
458cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      readlink,
4598e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *realloc(void *ptr, size_t size);
4608e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      realloc,
4618e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *reallocf(void *ptr, size_t size);
4628e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      reallocf,
463cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *realpath(const char *file_name, char *resolved_name);
464cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      realpath,
465cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int remove(const char *path);
466cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      remove,
467cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int rename(const char *old, const char *new);
468cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rename,
469cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void rewind(FILE *stream);
470cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rewind,
471243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double rint(double x);
472243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rint,
473243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float rintf(float x);
474243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rintf,
475d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// long double rintl(long double x);
476243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rintl,
477cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int rmdir(const char *path);
478cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rmdir,
479d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// double round(double x);
480d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      round,
481d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// float roundf(float x);
482d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      roundf,
483d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// long double roundl(long double x);
484d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      roundl,
485cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int scanf(const char *restrict format, ... );
486cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      scanf,
487cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void setbuf(FILE *stream, char *buf);
488cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setbuf,
489cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int setitimer(int which, const struct itimerval *value,
490cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///               struct itimerval *ovalue);
491cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setitimer,
492cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int setvbuf(FILE *stream, char *buf, int type, size_t size);
493cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setvbuf,
49432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double sin(double x);
49532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sin,
49632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float sinf(float x);
49732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinf,
49832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double sinh(double x);
49932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinh,
50032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float sinhf(float x);
50132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinhf,
502d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sinhl(long double x);
503d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sinhl,
504d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sinl(long double x);
505d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sinl,
506419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne      /// int siprintf(char *str, const char *format, ...);
507419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne      siprintf,
508cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int snprintf(char *s, size_t n, const char *format, ...);
509cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      snprintf,
5106098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int sprintf(char *str, const char *format, ...);
5116098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      sprintf,
5123d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      /// double sqrt(double x);
5133d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      sqrt,
5143d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      /// float sqrtf(float x);
5153d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      sqrtf,
516d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sqrtl(long double x);
517d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sqrtl,
518cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int sscanf(const char *s, const char *format, ... );
519cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      sscanf,
520cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int stat(const char *path, struct stat *buf);
521cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stat,
522cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int stat64(const char *path, struct stat64 *buf);
523cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stat64,
524cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int statvfs(const char *path, struct statvfs *buf);
525cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      statvfs,
526cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int statvfs64(const char *path, struct statvfs64 *buf)
527cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      statvfs64,
528939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *stpcpy(char *s1, const char *s2);
529939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      stpcpy,
530cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *stpncpy(char *s1, const char *s2, size_t n);
531cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stpncpy,
532cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strcasecmp(const char *s1, const char *s2);
533cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strcasecmp,
5340841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strcat(char *s1, const char *s2);
5350841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strcat,
5368d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// char *strchr(const char *s, int c);
5378d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      strchr,
538939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// int strcmp(const char *s1, const char *s2);
539939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strcmp,
540cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strcoll(const char *s1, const char *s2);
541cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strcoll,
5420841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strcpy(char *s1, const char *s2);
5430841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strcpy,
544939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// size_t strcspn(const char *s1, const char *s2);
545939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strcspn,
5468e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// char *strdup(const char *s1);
5478e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      strdup,
5480841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// size_t strlen(const char *s);
5490841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strlen,
550cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strncasecmp(const char *s1, const char *s2, size_t n);
551cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strncasecmp,
5520841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strncat(char *s1, const char *s2, size_t n);
5530841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strncat,
5548d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int strncmp(const char *s1, const char *s2, size_t n);
5558d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      strncmp,
5560841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strncpy(char *s1, const char *s2, size_t n);
5570841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strncpy,
5588e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// char *strndup(const char *s1, size_t n);
5598e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      strndup,
5600841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// size_t strnlen(const char *s, size_t maxlen);
5610841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strnlen,
562939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strpbrk(const char *s1, const char *s2);
563939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strpbrk,
564939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strrchr(const char *s, int c);
565939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strrchr,
566939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// size_t strspn(const char *s1, const char *s2);
567939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strspn,
568939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strstr(const char *s1, const char *s2);
569939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strstr,
570939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// double strtod(const char *nptr, char **endptr);
571939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtod,
572939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// float strtof(const char *nptr, char **endptr);
573939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtof,
574cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // char *strtok(char *s1, const char *s2);
575cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strtok,
576cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // char *strtok_r(char *s, const char *sep, char **lasts);
577cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strtok_r,
578939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long int strtol(const char *nptr, char **endptr, int base);
579939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtol,
580939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long double strtold(const char *nptr, char **endptr);
581939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtold,
582939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long long int strtoll(const char *nptr, char **endptr, int base);
583939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoll,
584939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// unsigned long int strtoul(const char *nptr, char **endptr, int base);
585939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoul,
586939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// unsigned long long int strtoull(const char *nptr, char **endptr,
587939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      ///                                 int base);
588939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoull,
589cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// size_t strxfrm(char *s1, const char *s2, size_t n);
590cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strxfrm,
591cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int system(const char *command);
592cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      system,
59332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double tan(double x);
59432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tan,
59532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float tanf(float x);
59632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanf,
59732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double tanh(double x);
59832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanh,
59932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float tanhf(float x);
60032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanhf,
601d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double tanhl(long double x);
602d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      tanhl,
603d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double tanl(long double x);
604d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      tanl,
605cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// clock_t times(struct tms *buffer);
606cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      times,
607cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *tmpfile(void);
608cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      tmpfile,
609cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *tmpfile64(void)
610cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      tmpfile64,
6116098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int toascii(int c);
6126098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      toascii,
613243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double trunc(double x);
614243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      trunc,
615243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float truncf(float x);
616243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      truncf,
617243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double truncl(long double x);
618243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      truncl,
619cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int uname(struct utsname *name);
620cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      uname,
621cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ungetc(int c, FILE *stream);
622cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ungetc,
623cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int unlink(const char *path);
624cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      unlink,
625cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int unsetenv(const char *name);
626cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      unsetenv,
627cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int utime(const char *path, const struct utimbuf *times);
628cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      utime,
629cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int utimes(const char *path, const struct timeval times[2]);
630cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      utimes,
6318e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *valloc(size_t size);
6328e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      valloc,
633cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vfprintf(FILE *stream, const char *format, va_list ap);
634cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vfprintf,
635cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vfscanf(FILE *stream, const char *format, va_list arg);
636cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vfscanf,
637cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vprintf(const char *restrict format, va_list ap);
638cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vprintf,
639cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vscanf(const char *format, va_list arg);
640cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vscanf,
641cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsnprintf(char *s, size_t n, const char *format, va_list ap);
642cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsnprintf,
643cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsprintf(char *s, const char *format, va_list ap);
644cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsprintf,
645cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsscanf(const char *s, const char *format, va_list arg);
646cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsscanf,
647cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t write(int fildes, const void *buf, size_t nbyte);
648cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      write,
6499d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
650ce99120084f549a523213064648662a704e8b789Chris Lattner      NumLibFuncs
651ce99120084f549a523213064648662a704e8b789Chris Lattner    };
652ce99120084f549a523213064648662a704e8b789Chris Lattner  }
653ce99120084f549a523213064648662a704e8b789Chris Lattner
654ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what
655ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a
656ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc.
657ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass {
6582d24e2a396a1d211baaeedf32148a3b657240170David Blaikie  virtual void anchor();
6599d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  unsigned char AvailableArray[(LibFunc::NumLibFuncs+3)/4];
6609d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  llvm::DenseMap<unsigned, std::string> CustomNames;
6619d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  static const char* StandardNames[LibFunc::NumLibFuncs];
6629d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
6639d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  enum AvailabilityState {
6649d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    StandardName = 3, // (memset to all ones)
6659d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    CustomName = 1,
6669d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    Unavailable = 0  // (memset to all zeros)
6679d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  };
6689d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  void setState(LibFunc::Func F, AvailabilityState State) {
6699d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailableArray[F/4] &= ~(3 << 2*(F&3));
6709d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailableArray[F/4] |= State << 2*(F&3);
6719d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6729d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  AvailabilityState getState(LibFunc::Func F) const {
6739d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return static_cast<AvailabilityState>((AvailableArray[F/4] >> 2*(F&3)) & 3);
6749d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6759d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
676ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic:
677ce99120084f549a523213064648662a704e8b789Chris Lattner  static char ID;
678ce99120084f549a523213064648662a704e8b789Chris Lattner  TargetLibraryInfo();
679ce99120084f549a523213064648662a704e8b789Chris Lattner  TargetLibraryInfo(const Triple &T);
68040f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner  explicit TargetLibraryInfo(const TargetLibraryInfo &TLI);
681ce99120084f549a523213064648662a704e8b789Chris Lattner
682d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  /// getLibFunc - Search for a particular function name.  If it is one of the
683d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  /// known library functions, return true and set F to the corresponding value.
684d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  bool getLibFunc(StringRef funcName, LibFunc::Func &F) const;
685d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson
686ce99120084f549a523213064648662a704e8b789Chris Lattner  /// has - This function is used by optimizations that want to match on or form
687ce99120084f549a523213064648662a704e8b789Chris Lattner  /// a given library function.
688ce99120084f549a523213064648662a704e8b789Chris Lattner  bool has(LibFunc::Func F) const {
6899d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return getState(F) != Unavailable;
6909d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6919d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
692982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  /// hasOptimizedCodeGen - Return true if the function is both available as
693982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  /// a builtin and a candidate for optimized code generation.
694982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  bool hasOptimizedCodeGen(LibFunc::Func F) const {
695982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    if (getState(F) == Unavailable)
696982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson      return false;
697982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    switch (F) {
698982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    default: break;
699982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::copysign:  case LibFunc::copysignf:  case LibFunc::copysignl:
700982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::fabs:      case LibFunc::fabsf:      case LibFunc::fabsl:
701982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::sin:       case LibFunc::sinf:       case LibFunc::sinl:
702982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::cos:       case LibFunc::cosf:       case LibFunc::cosl:
703982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::sqrt:      case LibFunc::sqrtf:      case LibFunc::sqrtl:
704b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd    case LibFunc::sqrt_finite: case LibFunc::sqrtf_finite:
705b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd                                                  case LibFunc::sqrtl_finite:
706982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::floor:     case LibFunc::floorf:     case LibFunc::floorl:
707982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::nearbyint: case LibFunc::nearbyintf: case LibFunc::nearbyintl:
708982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::ceil:      case LibFunc::ceilf:      case LibFunc::ceill:
709982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::rint:      case LibFunc::rintf:      case LibFunc::rintl:
71041418d17cced656f91038b2482bc9d173b4974b0Hal Finkel    case LibFunc::round:     case LibFunc::roundf:     case LibFunc::roundl:
711982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::trunc:     case LibFunc::truncf:     case LibFunc::truncl:
712982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::log2:      case LibFunc::log2f:      case LibFunc::log2l:
713982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::exp2:      case LibFunc::exp2f:      case LibFunc::exp2l:
7144fc7355a21e1fa838406e15459aaf54a58fcf909Richard Sandiford    case LibFunc::memcmp:    case LibFunc::strcmp:     case LibFunc::strcpy:
71519262ee0725a09b7c621a3d2eb66ba1513ae932aRichard Sandiford    case LibFunc::stpcpy:    case LibFunc::strlen:     case LibFunc::strnlen:
7168c20158fb0e1e5d747077f065eb0170c5af1fbfaRichard Sandiford    case LibFunc::memchr:
717982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson      return true;
718982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    }
719982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    return false;
720982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  }
721982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson
7229d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  StringRef getName(LibFunc::Func F) const {
7239d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailabilityState State = getState(F);
7249d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (State == Unavailable)
7259d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      return StringRef();
7269d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (State == StandardName)
7279d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      return StandardNames[F];
7289d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    assert(State == CustomName);
7299d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return CustomNames.find(F)->second;
730ce99120084f549a523213064648662a704e8b789Chris Lattner  }
731ce99120084f549a523213064648662a704e8b789Chris Lattner
732ce99120084f549a523213064648662a704e8b789Chris Lattner  /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to
733ce99120084f549a523213064648662a704e8b789Chris Lattner  /// ban use of specific library functions.
734ce99120084f549a523213064648662a704e8b789Chris Lattner  void setUnavailable(LibFunc::Func F) {
7359d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    setState(F, Unavailable);
736ce99120084f549a523213064648662a704e8b789Chris Lattner  }
737ce99120084f549a523213064648662a704e8b789Chris Lattner
738ce99120084f549a523213064648662a704e8b789Chris Lattner  void setAvailable(LibFunc::Func F) {
7399d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    setState(F, StandardName);
740ce99120084f549a523213064648662a704e8b789Chris Lattner  }
7419d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
7429d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  void setAvailableWithName(LibFunc::Func F, StringRef Name) {
7439d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (StandardNames[F] != Name) {
7449d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      setState(F, CustomName);
7459d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      CustomNames[F] = Name;
7469d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      assert(CustomNames.find(F) != CustomNames.end());
7479d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    } else {
7489d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      setState(F, StandardName);
7499d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    }
7509d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
7519d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
752188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  /// disableAllFunctions - This disables all builtins, which is used for
753188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  /// options like -fno-builtin.
754188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  void disableAllFunctions();
755ce99120084f549a523213064648662a704e8b789Chris Lattner};
756ce99120084f549a523213064648662a704e8b789Chris Lattner
757ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm
758ce99120084f549a523213064648662a704e8b789Chris Lattner
759ce99120084f549a523213064648662a704e8b789Chris Lattner#endif
760