TargetLibraryInfo.h revision b704d23062aa78b00999b75dcdcb628d4d84ee3f
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,
278e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void operator delete(void*);
288e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZdlPv,
298e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned int);
308e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znaj,
318e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned int, nothrow);
328e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnajRKSt9nothrow_t,
338e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned long);
348e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znam,
358e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new[](unsigned long, nothrow);
368e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnamRKSt9nothrow_t,
378e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned int);
388e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znwj,
398e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned int, nothrow);
408e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnwjRKSt9nothrow_t,
418e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned long);
428e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      Znwm,
438e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *new(unsigned long, nothrow);
448e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      ZnwmRKSt9nothrow_t,
45d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int __cxa_atexit(void (*f)(void *), void *p, void *d);
46d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_atexit,
47d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void __cxa_guard_abort(guard_t *guard);
48d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// guard_t is int64_t in Itanium ABI or int32_t on ARM eabi.
49d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_abort,
50d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int __cxa_guard_acquire(guard_t *guard);
51d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_acquire,
52d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void __cxa_guard_release(guard_t *guard);
53d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cxa_guard_release,
54cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int __isoc99_scanf (const char *format, ...)
55cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_isoc99_scanf,
56cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int __isoc99_sscanf(const char *s, const char *format, ...)
57cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_isoc99_sscanf,
58d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// void *__memcpy_chk(void *s1, const void *s2, size_t n, size_t s1size);
59d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      memcpy_chk,
60b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// double __sqrt_finite(double x);
61b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrt_finite,
62b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// float __sqrt_finite(float x);
63b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrtf_finite,
64b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      /// long double __sqrt_finite(long double x);
65b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd      sqrtl_finite,
66cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char * __strdup(const char *s);
67cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strdup,
68cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *__strndup(const char *s, size_t n);
69cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strndup,
70cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char * __strtok_r(char *s, const char *delim, char **save_ptr);
71cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      dunder_strtok_r,
726098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int abs(int j);
736098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      abs,
74cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int access(const char *path, int amode);
75cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      access,
768ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double acos(double x);
778ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      acos,
788ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float acosf(float x);
798ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      acosf,
806871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double acosh(double x);
816871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acosh,
826871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float acoshf(float x);
836871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acoshf,
846871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double acoshl(long double x);
856871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      acoshl,
86d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double acosl(long double x);
87d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      acosl,
888ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double asin(double x);
898ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      asin,
908ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float asinf(float x);
918ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      asinf,
926871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double asinh(double x);
936871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinh,
946871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float asinhf(float x);
956871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinhf,
966871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double asinhl(long double x);
976871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      asinhl,
98d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double asinl(long double x);
99d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      asinl,
1008ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double atan(double x);
1018ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      atan,
10232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double atan2(double y, double x);
10332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      atan2,
10432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float atan2f(float y, float x);
10532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      atan2f,
106d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double atan2l(long double y, long double x);
107d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atan2l,
108d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float atanf(float x);
109d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atanf,
1106871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double atanh(double x);
1116871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanh,
1126871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float atanhf(float x);
1136871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanhf,
1146871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double atanhl(long double x);
1156871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      atanhl,
116d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double atanl(long double x);
117d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      atanl,
118cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double atof(const char *str);
119cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atof,
120cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int atoi(const char *str);
121cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atoi,
122cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long atol(const char *str);
123cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atol,
124cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long long atoll(const char *nptr);
125cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      atoll,
126cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int bcmp(const void *s1, const void *s2, size_t n);
127cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bcmp,
128cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void bcopy(const void *s1, void *s2, size_t n);
129cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bcopy,
130cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void bzero(void *s, size_t n);
131cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      bzero,
1328e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *calloc(size_t count, size_t size);
1338e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      calloc,
1346871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double cbrt(double x);
1356871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrt,
1366871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float cbrtf(float x);
1376871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrtf,
1386871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double cbrtl(long double x);
1396871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      cbrtl,
1408ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double ceil(double x);
1418ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      ceil,
1428ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float ceilf(float x);
1438ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      ceilf,
144d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double ceill(long double x);
145d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      ceill,
146cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int chmod(const char *path, mode_t mode);
147cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      chmod,
148cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int chown(const char *path, uid_t owner, gid_t group);
149cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      chown,
150cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void clearerr(FILE *stream);
151cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      clearerr,
152cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int closedir(DIR *dirp);
153cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      closedir,
154243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double copysign(double x, double y);
155243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysign,
156243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float copysignf(float x, float y);
157243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysignf,
158243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double copysignl(long double x, long double y);
159243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      copysignl,
1608ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double cos(double x);
1618ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cos,
1628ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float cosf(float x);
1638ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cosf,
1648ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double cosh(double x);
1658ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      cosh,
1668ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float coshf(float x);
1678ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      coshf,
168d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double coshl(long double x);
169d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      coshl,
170d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double cosl(long double x);
171d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      cosl,
172cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *ctermid(char *s);
173cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ctermid,
1748ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double exp(double x);
1758ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp,
1766871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double exp10(double x);
1776871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10,
1786871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float exp10f(float x);
1796871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10f,
1806871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double exp10l(long double x);
1816871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      exp10l,
1828ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double exp2(double x);
1838ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp2,
1848ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float exp2f(float x);
1858ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      exp2f,
186d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double exp2l(long double x);
187d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      exp2l,
188d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float expf(float x);
189d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expf,
190d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double expl(long double x);
191d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expl,
1928ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double expm1(double x);
1938ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      expm1,
1948ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float expm1f(float x);
195d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      expm1f,
196d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double expm1l(long double x);
197d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      expm1l,
1988ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double fabs(double x);
1998ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      fabs,
2008ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float fabsf(float x);
2018ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      fabsf,
202d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double fabsl(long double x);
203d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fabsl,
204cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fclose(FILE *stream);
205cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fclose,
206cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fdopen(int fildes, const char *mode);
207cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fdopen,
208cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int feof(FILE *stream);
209cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      feof,
210cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ferror(FILE *stream);
211cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ferror,
212cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fflush(FILE *stream);
213cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fflush,
2146098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffs(int i);
2156098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffs,
2166098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffsl(long int i);
2176098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffsl,
2186098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int ffsll(long long int i);
2196098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      ffsll,
220cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fgetc(FILE *stream);
221cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgetc,
222cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fgetpos(FILE *stream, fpos_t *pos);
223cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgetpos,
224cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *fgets(char *s, int n, FILE *stream);
225cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fgets,
226cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fileno(FILE *stream);
227cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fileno,
228d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// int fiprintf(FILE *stream, const char *format, ...);
229d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fiprintf,
230cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void flockfile(FILE *file);
231cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      flockfile,
2328ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double floor(double x);
2338ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      floor,
2348ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float floorf(float x);
2358ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      floorf,
236d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double floorl(long double x);
237d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      floorl,
23832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double fmod(double x, double y);
23932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      fmod,
24032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float fmodf(float x, float y);
24132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      fmodf,
242d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double fmodl(long double x, long double y);
243d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      fmodl,
244cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fopen(const char *filename, const char *mode);
245cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fopen,
246cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *fopen64(const char *filename, const char *opentype)
247cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fopen64,
2486098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int fprintf(FILE *stream, const char *format, ...);
2496098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      fprintf,
2508d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int fputc(int c, FILE *stream);
2518d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      fputc,
252683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// int fputs(const char *s, FILE *stream);
253683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      fputs,
254cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
255cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fread,
2568e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void free(void *ptr);
2578e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      free,
258cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double frexp(double num, int *exp);
259cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexp,
260cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// float frexpf(float num, int *exp);
261cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexpf,
262cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long double frexpl(long double num, int *exp);
263cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      frexpl,
264cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fscanf(FILE *stream, const char *format, ... );
265cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fscanf,
266cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseek(FILE *stream, long offset, int whence);
267cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseek,
268cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseeko(FILE *stream, off_t offset, int whence);
269cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseeko,
270cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fseeko64(FILE *stream, off64_t offset, int whence)
271cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fseeko64,
272cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fsetpos(FILE *stream, const fpos_t *pos);
273cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fsetpos,
274cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstat(int fildes, struct stat *buf);
275cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstat,
276cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstat64(int filedes, struct stat64 *buf)
277cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstat64,
278cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstatvfs(int fildes, struct statvfs *buf);
279cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstatvfs,
280cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int fstatvfs64(int fildes, struct statvfs64 *buf);
281cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      fstatvfs64,
282cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long ftell(FILE *stream);
283cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftell,
284cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// off_t ftello(FILE *stream);
285cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftello,
286cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// off64_t ftello64(FILE *stream)
287cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftello64,
288cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ftrylockfile(FILE *file);
289cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ftrylockfile,
290cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void funlockfile(FILE *file);
291cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      funlockfile,
292683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// size_t fwrite(const void *ptr, size_t size, size_t nitems,
293683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// FILE *stream);
294683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      fwrite,
295cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getc(FILE *stream);
296cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getc,
297cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getc_unlocked(FILE *stream);
298cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getc_unlocked,
299cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getchar(void);
300cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getchar,
301cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *getenv(const char *name);
302cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getenv,
303cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getitimer(int which, struct itimerval *value);
304cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getitimer,
305cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int getlogin_r(char *name, size_t namesize);
306cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getlogin_r,
307cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// struct passwd *getpwnam(const char *name);
308cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      getpwnam,
309cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *gets(char *s);
310cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      gets,
311cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint32_t htonl(uint32_t hostlong);
312cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      htonl,
313cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint16_t htons(uint16_t hostshort);
314cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      htons,
315683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// int iprintf(const char *format, ...);
316683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      iprintf,
3176098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int isascii(int c);
3186098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      isascii,
3196098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int isdigit(int c);
3206098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      isdigit,
3216098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// long int labs(long int j);
3226098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      labs,
323cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lchown(const char *path, uid_t owner, gid_t group);
324cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lchown,
3256098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// long long int llabs(long long int j);
3266098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      llabs,
3278ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log(double x);
3288ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log,
3298ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log10(double x);
3308ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log10,
3318ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float log10f(float x);
3328ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log10f,
333d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double log10l(long double x);
334d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log10l,
3358ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double log1p(double x);
3368ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log1p,
3378ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float log1pf(float x);
3388ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      log1pf,
339d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double log1pl(long double x);
340d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log1pl,
341d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// double log2(double x);
342d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2,
343d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float log2f(float x);
344d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2f,
345d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// double long double log2l(long double x);
346d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      log2l,
3476871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// double logb(double x);
3486871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logb,
3496871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// float logbf(float x);
3506871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logbf,
3516871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      /// long double logbl(long double x);
3526871d1eceba0455707de29708c36ae3c2778c160Chad Rosier      logbl,
353d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// float logf(float x);
354d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      logf,
355d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double logl(long double x);
356d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      logl,
357cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lstat(const char *path, struct stat *buf);
358cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lstat,
359cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int lstat64(const char *path, struct stat64 *buf);
360cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      lstat64,
3618e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *malloc(size_t size);
3628e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      malloc,
363cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void *memalign(size_t boundary, size_t size);
364cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memalign,
365cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void *memccpy(void *s1, const void *s2, int c, size_t n);
366cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memccpy,
3678d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// void *memchr(const void *s, int c, size_t n);
3688d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      memchr,
3698d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int memcmp(const void *s1, const void *s2, size_t n);
3708d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      memcmp,
371683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memcpy(void *s1, const void *s2, size_t n);
372398c0d8b7417dedbe244020ffb67abb54aaa1c59Chris Lattner      memcpy,
373683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memmove(void *s1, const void *s2, size_t n);
374149f5283f93ec85b96888c284f56099a72cc2731Chris Lattner      memmove,
375cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // void *memrchr(const void *s, int c, size_t n);
376cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      memrchr,
377683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      /// void *memset(void *b, int c, size_t len);
378683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier      memset,
379ce99120084f549a523213064648662a704e8b789Chris Lattner      /// void memset_pattern16(void *b, const void *pattern16, size_t len);
380ce99120084f549a523213064648662a704e8b789Chris Lattner      memset_pattern16,
381cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int mkdir(const char *path, mode_t mode);
382cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      mkdir,
383cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// time_t mktime(struct tm *timeptr);
384cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      mktime,
385cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// double modf(double x, double *iptr);
386cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modf,
387cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// float modff(float, float *iptr);
388cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modff,
389cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// long double modfl(long double value, long double *iptr);
390cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      modfl,
391243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double nearbyint(double x);
392243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyint,
393243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float nearbyintf(float x);
394243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyintf,
395243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double nearbyintl(long double x);
396243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      nearbyintl,
397cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint32_t ntohl(uint32_t netlong);
398cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ntohl,
399cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// uint16_t ntohs(uint16_t netshort);
400cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ntohs,
401cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int open(const char *path, int oflag, ... );
402cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      open,
403cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int open64(const char *filename, int flags[, mode_t mode])
404cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      open64,
405cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// DIR *opendir(const char *dirname);
406cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      opendir,
407cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int pclose(FILE *stream);
408cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pclose,
409cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void perror(const char *s);
410cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      perror,
411cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *popen(const char *command, const char *mode);
412cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      popen,
4138e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// int posix_memalign(void **memptr, size_t alignment, size_t size);
4148e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      posix_memalign,
4158ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// double pow(double x, double y);
4168ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      pow,
4178ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// float powf(float x, float y);
4188ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      powf,
4198ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      /// long double powl(long double x, long double y);
4208ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier      powl,
421cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
422cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pread,
4236098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int printf(const char *format, ...);
4246098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      printf,
425cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int putc(int c, FILE *stream);
426cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      putc,
4278d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int putchar(int c);
4288d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      putchar,
4298d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int puts(const char *s);
4308d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      puts,
431cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t pwrite(int fildes, const void *buf, size_t nbyte,
432cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///                off_t offset);
433cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      pwrite,
434cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void qsort(void *base, size_t nel, size_t width,
435cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///            int (*compar)(const void *, const void *));
436cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      qsort,
437cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t read(int fildes, void *buf, size_t nbyte);
438cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      read,
439cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t readlink(const char *path, char *buf, size_t bufsize);
440cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      readlink,
4418e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *realloc(void *ptr, size_t size);
4428e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      realloc,
4438e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *reallocf(void *ptr, size_t size);
4448e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      reallocf,
445cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *realpath(const char *file_name, char *resolved_name);
446cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      realpath,
447cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int remove(const char *path);
448cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      remove,
449cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int rename(const char *old, const char *new);
450cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rename,
451cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void rewind(FILE *stream);
452cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rewind,
453243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double rint(double x);
454243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rint,
455243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float rintf(float x);
456243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rintf,
457d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// long double rintl(long double x);
458243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      rintl,
459cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int rmdir(const char *path);
460cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      rmdir,
461d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// double round(double x);
462d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      round,
463d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// float roundf(float x);
464d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      roundf,
465d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      /// long double roundl(long double x);
466d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff      roundl,
467cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int scanf(const char *restrict format, ... );
468cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      scanf,
469cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// void setbuf(FILE *stream, char *buf);
470cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setbuf,
471cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int setitimer(int which, const struct itimerval *value,
472cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ///               struct itimerval *ovalue);
473cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setitimer,
474cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int setvbuf(FILE *stream, char *buf, int type, size_t size);
475cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      setvbuf,
47632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double sin(double x);
47732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sin,
47832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float sinf(float x);
47932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinf,
48032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double sinh(double x);
48132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinh,
48232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float sinhf(float x);
48332b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      sinhf,
484d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sinhl(long double x);
485d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sinhl,
486d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sinl(long double x);
487d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sinl,
488419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne      /// int siprintf(char *str, const char *format, ...);
489419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne      siprintf,
490cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int snprintf(char *s, size_t n, const char *format, ...);
491cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      snprintf,
4926098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int sprintf(char *str, const char *format, ...);
4936098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      sprintf,
4943d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      /// double sqrt(double x);
4953d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      sqrt,
4963d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      /// float sqrtf(float x);
4973d925d24e8c54cde05228258c25cc21687cad922Chad Rosier      sqrtf,
498d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double sqrtl(long double x);
499d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      sqrtl,
500cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int sscanf(const char *s, const char *format, ... );
501cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      sscanf,
502cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int stat(const char *path, struct stat *buf);
503cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stat,
504cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int stat64(const char *path, struct stat64 *buf);
505cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stat64,
506cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int statvfs(const char *path, struct statvfs *buf);
507cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      statvfs,
508cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int statvfs64(const char *path, struct statvfs64 *buf)
509cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      statvfs64,
510939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *stpcpy(char *s1, const char *s2);
511939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      stpcpy,
512cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// char *stpncpy(char *s1, const char *s2, size_t n);
513cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      stpncpy,
514cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strcasecmp(const char *s1, const char *s2);
515cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strcasecmp,
5160841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strcat(char *s1, const char *s2);
5170841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strcat,
5188d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// char *strchr(const char *s, int c);
5198d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      strchr,
520939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// int strcmp(const char *s1, const char *s2);
521939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strcmp,
522cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strcoll(const char *s1, const char *s2);
523cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strcoll,
5240841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strcpy(char *s1, const char *s2);
5250841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strcpy,
526939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// size_t strcspn(const char *s1, const char *s2);
527939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strcspn,
5288e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// char *strdup(const char *s1);
5298e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      strdup,
5300841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// size_t strlen(const char *s);
5310841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strlen,
532cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int strncasecmp(const char *s1, const char *s2, size_t n);
533cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strncasecmp,
5340841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strncat(char *s1, const char *s2, size_t n);
5350841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strncat,
5368d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      /// int strncmp(const char *s1, const char *s2, size_t n);
5378d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes      strncmp,
5380841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// char *strncpy(char *s1, const char *s2, size_t n);
5390841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strncpy,
5408e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// char *strndup(const char *s1, size_t n);
5418e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      strndup,
5420841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      /// size_t strnlen(const char *s, size_t maxlen);
5430841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes      strnlen,
544939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strpbrk(const char *s1, const char *s2);
545939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strpbrk,
546939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strrchr(const char *s, int c);
547939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strrchr,
548939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// size_t strspn(const char *s1, const char *s2);
549939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strspn,
550939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// char *strstr(const char *s1, const char *s2);
551939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strstr,
552939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// double strtod(const char *nptr, char **endptr);
553939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtod,
554939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// float strtof(const char *nptr, char **endptr);
555939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtof,
556cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // char *strtok(char *s1, const char *s2);
557cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strtok,
558cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      // char *strtok_r(char *s, const char *sep, char **lasts);
559cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strtok_r,
560939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long int strtol(const char *nptr, char **endptr, int base);
561939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtol,
562939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long double strtold(const char *nptr, char **endptr);
563939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtold,
564939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// long long int strtoll(const char *nptr, char **endptr, int base);
565939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoll,
566939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// unsigned long int strtoul(const char *nptr, char **endptr, int base);
567939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoul,
568939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      /// unsigned long long int strtoull(const char *nptr, char **endptr,
569939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      ///                                 int base);
570939f5002027e3ccb710ac1c3050dc25471251565Meador Inge      strtoull,
571cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// size_t strxfrm(char *s1, const char *s2, size_t n);
572cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      strxfrm,
573cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int system(const char *command);
574cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      system,
57532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double tan(double x);
57632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tan,
57732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float tanf(float x);
57832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanf,
57932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// double tanh(double x);
58032b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanh,
58132b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      /// float tanhf(float x);
58232b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier      tanhf,
583d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double tanhl(long double x);
584d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      tanhl,
585d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      /// long double tanl(long double x);
586d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson      tanl,
587cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// clock_t times(struct tms *buffer);
588cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      times,
589cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *tmpfile(void);
590cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      tmpfile,
591cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// FILE *tmpfile64(void)
592cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      tmpfile64,
5936098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      /// int toascii(int c);
5946098c6b56be5a8e3c7ac5273110589f251b03573Meador Inge      toascii,
595243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// double trunc(double x);
596243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      trunc,
597243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// float truncf(float x);
598243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      truncf,
599243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      /// long double truncl(long double x);
600243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson      truncl,
601cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int uname(struct utsname *name);
602cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      uname,
603cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int ungetc(int c, FILE *stream);
604cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      ungetc,
605cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int unlink(const char *path);
606cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      unlink,
607cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int unsetenv(const char *name);
608cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      unsetenv,
609cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int utime(const char *path, const struct utimbuf *times);
610cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      utime,
611cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int utimes(const char *path, const struct timeval times[2]);
612cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      utimes,
6138e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      /// void *valloc(size_t size);
6148e0d1c03ca7fd86e6879b4e37d0d7f0e982feef6Benjamin Kramer      valloc,
615cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vfprintf(FILE *stream, const char *format, va_list ap);
616cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vfprintf,
617cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vfscanf(FILE *stream, const char *format, va_list arg);
618cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vfscanf,
619cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vprintf(const char *restrict format, va_list ap);
620cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vprintf,
621cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vscanf(const char *format, va_list arg);
622cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vscanf,
623cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsnprintf(char *s, size_t n, const char *format, va_list ap);
624cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsnprintf,
625cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsprintf(char *s, const char *format, va_list ap);
626cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsprintf,
627cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// int vsscanf(const char *s, const char *format, va_list arg);
628cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      vsscanf,
629cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      /// ssize_t write(int fildes, const void *buf, size_t nbyte);
630cf70590c38ef580758c8a255519959fc7160fdb2Meador Inge      write,
6319d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
632ce99120084f549a523213064648662a704e8b789Chris Lattner      NumLibFuncs
633ce99120084f549a523213064648662a704e8b789Chris Lattner    };
634ce99120084f549a523213064648662a704e8b789Chris Lattner  }
635ce99120084f549a523213064648662a704e8b789Chris Lattner
636ce99120084f549a523213064648662a704e8b789Chris Lattner/// TargetLibraryInfo - This immutable pass captures information about what
637ce99120084f549a523213064648662a704e8b789Chris Lattner/// library functions are available for the current target, and allows a
638ce99120084f549a523213064648662a704e8b789Chris Lattner/// frontend to disable optimizations through -fno-builtin etc.
639ce99120084f549a523213064648662a704e8b789Chris Lattnerclass TargetLibraryInfo : public ImmutablePass {
6402d24e2a396a1d211baaeedf32148a3b657240170David Blaikie  virtual void anchor();
6419d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  unsigned char AvailableArray[(LibFunc::NumLibFuncs+3)/4];
6429d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  llvm::DenseMap<unsigned, std::string> CustomNames;
6439d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  static const char* StandardNames[LibFunc::NumLibFuncs];
6449d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
6459d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  enum AvailabilityState {
6469d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    StandardName = 3, // (memset to all ones)
6479d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    CustomName = 1,
6489d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    Unavailable = 0  // (memset to all zeros)
6499d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  };
6509d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  void setState(LibFunc::Func F, AvailabilityState State) {
6519d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailableArray[F/4] &= ~(3 << 2*(F&3));
6529d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailableArray[F/4] |= State << 2*(F&3);
6539d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6549d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  AvailabilityState getState(LibFunc::Func F) const {
6559d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return static_cast<AvailabilityState>((AvailableArray[F/4] >> 2*(F&3)) & 3);
6569d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6579d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
658ce99120084f549a523213064648662a704e8b789Chris Lattnerpublic:
659ce99120084f549a523213064648662a704e8b789Chris Lattner  static char ID;
660ce99120084f549a523213064648662a704e8b789Chris Lattner  TargetLibraryInfo();
661ce99120084f549a523213064648662a704e8b789Chris Lattner  TargetLibraryInfo(const Triple &T);
66240f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner  explicit TargetLibraryInfo(const TargetLibraryInfo &TLI);
663ce99120084f549a523213064648662a704e8b789Chris Lattner
664d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  /// getLibFunc - Search for a particular function name.  If it is one of the
665d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  /// known library functions, return true and set F to the corresponding value.
666d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson  bool getLibFunc(StringRef funcName, LibFunc::Func &F) const;
667d1e672e0234b99dbff78baed0e47d033cf963abeBob Wilson
668ce99120084f549a523213064648662a704e8b789Chris Lattner  /// has - This function is used by optimizations that want to match on or form
669ce99120084f549a523213064648662a704e8b789Chris Lattner  /// a given library function.
670ce99120084f549a523213064648662a704e8b789Chris Lattner  bool has(LibFunc::Func F) const {
6719d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return getState(F) != Unavailable;
6729d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
6739d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
674982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  /// hasOptimizedCodeGen - Return true if the function is both available as
675982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  /// a builtin and a candidate for optimized code generation.
676982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  bool hasOptimizedCodeGen(LibFunc::Func F) const {
677982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    if (getState(F) == Unavailable)
678982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson      return false;
679982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    switch (F) {
680982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    default: break;
681982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::copysign:  case LibFunc::copysignf:  case LibFunc::copysignl:
682982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::fabs:      case LibFunc::fabsf:      case LibFunc::fabsl:
683982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::sin:       case LibFunc::sinf:       case LibFunc::sinl:
684982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::cos:       case LibFunc::cosf:       case LibFunc::cosl:
685982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::sqrt:      case LibFunc::sqrtf:      case LibFunc::sqrtl:
686b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd    case LibFunc::sqrt_finite: case LibFunc::sqrtf_finite:
687b704d23062aa78b00999b75dcdcb628d4d84ee3fPreston Gurd                                                  case LibFunc::sqrtl_finite:
688982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::floor:     case LibFunc::floorf:     case LibFunc::floorl:
689982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::nearbyint: case LibFunc::nearbyintf: case LibFunc::nearbyintl:
690982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::ceil:      case LibFunc::ceilf:      case LibFunc::ceill:
691982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::rint:      case LibFunc::rintf:      case LibFunc::rintl:
692982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::trunc:     case LibFunc::truncf:     case LibFunc::truncl:
693982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::log2:      case LibFunc::log2f:      case LibFunc::log2l:
694982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::exp2:      case LibFunc::exp2f:      case LibFunc::exp2l:
695982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    case LibFunc::memcmp:
696982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson      return true;
697982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    }
698982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson    return false;
699982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson  }
700982dc84762fc0c2ca35e6947d648a690dd22343cBob Wilson
7019d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  StringRef getName(LibFunc::Func F) const {
7029d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    AvailabilityState State = getState(F);
7039d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (State == Unavailable)
7049d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      return StringRef();
7059d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (State == StandardName)
7069d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      return StandardNames[F];
7079d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    assert(State == CustomName);
7089d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    return CustomNames.find(F)->second;
709ce99120084f549a523213064648662a704e8b789Chris Lattner  }
710ce99120084f549a523213064648662a704e8b789Chris Lattner
711ce99120084f549a523213064648662a704e8b789Chris Lattner  /// setUnavailable - this can be used by whatever sets up TargetLibraryInfo to
712ce99120084f549a523213064648662a704e8b789Chris Lattner  /// ban use of specific library functions.
713ce99120084f549a523213064648662a704e8b789Chris Lattner  void setUnavailable(LibFunc::Func F) {
7149d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    setState(F, Unavailable);
715ce99120084f549a523213064648662a704e8b789Chris Lattner  }
716ce99120084f549a523213064648662a704e8b789Chris Lattner
717ce99120084f549a523213064648662a704e8b789Chris Lattner  void setAvailable(LibFunc::Func F) {
7189d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    setState(F, StandardName);
719ce99120084f549a523213064648662a704e8b789Chris Lattner  }
7209d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
7219d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  void setAvailableWithName(LibFunc::Func F, StringRef Name) {
7229d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    if (StandardNames[F] != Name) {
7239d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      setState(F, CustomName);
7249d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      CustomNames[F] = Name;
7259d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      assert(CustomNames.find(F) != CustomNames.end());
7269d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    } else {
7279d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman      setState(F, StandardName);
7289d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman    }
7299d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman  }
7309d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman
731188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  /// disableAllFunctions - This disables all builtins, which is used for
732188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  /// options like -fno-builtin.
733188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner  void disableAllFunctions();
734ce99120084f549a523213064648662a704e8b789Chris Lattner};
735ce99120084f549a523213064648662a704e8b789Chris Lattner
736ce99120084f549a523213064648662a704e8b789Chris Lattner} // end namespace llvm
737ce99120084f549a523213064648662a704e8b789Chris Lattner
738ce99120084f549a523213064648662a704e8b789Chris Lattner#endif
739