TargetLibraryInfo.cpp revision 8d32463a9fa2aba9de552350a5019099edf0b90d
1ce99120084f549a523213064648662a704e8b789Chris Lattner//===-- TargetLibraryInfo.cpp - Runtime library information ----------------==// 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// This file implements the TargetLibraryInfo class. 11ce99120084f549a523213064648662a704e8b789Chris Lattner// 12ce99120084f549a523213064648662a704e8b789Chris Lattner//===----------------------------------------------------------------------===// 13ce99120084f549a523213064648662a704e8b789Chris Lattner 14ce99120084f549a523213064648662a704e8b789Chris Lattner#include "llvm/Target/TargetLibraryInfo.h" 15ce99120084f549a523213064648662a704e8b789Chris Lattner#include "llvm/ADT/Triple.h" 16ce99120084f549a523213064648662a704e8b789Chris Lattnerusing namespace llvm; 17ce99120084f549a523213064648662a704e8b789Chris Lattner 18ce99120084f549a523213064648662a704e8b789Chris Lattner// Register the default implementation. 19ce99120084f549a523213064648662a704e8b789Chris LattnerINITIALIZE_PASS(TargetLibraryInfo, "targetlibinfo", 20ce99120084f549a523213064648662a704e8b789Chris Lattner "Target Library Information", false, true) 21ce99120084f549a523213064648662a704e8b789Chris Lattnerchar TargetLibraryInfo::ID = 0; 22ce99120084f549a523213064648662a704e8b789Chris Lattner 232d24e2a396a1d211baaeedf32148a3b657240170David Blaikievoid TargetLibraryInfo::anchor() { } 242d24e2a396a1d211baaeedf32148a3b657240170David Blaikie 259d434dbff3eb0501efc3457acec2401afdffef2fEli Friedmanconst char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] = 269d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman { 278ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "acos", 288ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "acosl", 298ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "acosf", 308ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "asin", 318ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "asinl", 328ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "asinf", 338ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "atan", 348ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "atanl", 358ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "atanf", 3632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "atan2", 3732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "atan2l", 3832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "atan2f", 398ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "ceil", 408ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "ceill", 418ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "ceilf", 42243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "copysign", 43243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "copysignf", 44243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "copysignl", 458ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "cos", 468ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "cosl", 478ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "cosf", 488ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "cosh", 498ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "coshl", 508ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "coshf", 518ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "exp", 528ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "expl", 538ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "expf", 548ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "exp2", 558ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "exp2l", 568ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "exp2f", 578ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "expm1", 588ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "expm1l", 59d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff "expm1f", 608ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "fabs", 618ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "fabsl", 628ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "fabsf", 638ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "floor", 648ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "floorl", 658ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "floorf", 66683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier "fiprintf", 6732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "fmod", 6832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "fmodl", 6932b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "fmodf", 708d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes "fputc", 71683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier "fputs", 72683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier "fwrite", 73683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier "iprintf", 748ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log", 758ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "logl", 768ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "logf", 778ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log2", 788ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log2l", 798ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log2f", 808ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log10", 818ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log10l", 828ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log10f", 838ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log1p", 848ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log1pl", 858ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "log1pf", 868d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes "memchr", 878d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes "memcmp", 889d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman "memcpy", 899d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman "memmove", 90683e47b1dd8672b0b026a45022cf91f4faf7df9bChad Rosier "memset", 919d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman "memset_pattern16", 92243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "nearbyint", 93243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "nearbyintf", 94243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "nearbyintl", 958ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "pow", 968ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "powf", 978ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "powl", 988d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes "putchar", 998d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes "puts", 100243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "rint", 101243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "rintf", 102243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "rintl", 103d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff "round", 104d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff "roundf", 105d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff "roundl", 10632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "sin", 10732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "sinl", 10832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "sinf", 109fbd828d8e1133763c8acee540bcd221bc2aab355Chad Rosier "sinh", 110fbd828d8e1133763c8acee540bcd221bc2aab355Chad Rosier "sinhl", 111fbd828d8e1133763c8acee540bcd221bc2aab355Chad Rosier "sinhf", 112fbd828d8e1133763c8acee540bcd221bc2aab355Chad Rosier "siprintf", 1133d925d24e8c54cde05228258c25cc21687cad922Chad Rosier "sqrt", 1148ff4115ef0bcad0a46750bb2bd4376a61b346362Chad Rosier "sqrtl", 11532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "sqrtf", 1160841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes "strcat", 1178d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes "strchr", 1180841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes "strcpy", 1190841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes "strlen", 1200841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes "strncat", 1218d32463a9fa2aba9de552350a5019099edf0b90dNuno Lopes "strncmp", 1220841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes "strncpy", 1230841e63ede092283d824843a068df3f7b0b90dd8Nuno Lopes "strnlen", 12432b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "tan", 12532b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "tanl", 12632b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "tanf", 12732b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "tanh", 12832b6c59ad068d2bb2466dd33bc17d8c865760215Chad Rosier "tanhl", 129243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "tanhf", 130243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "trunc", 131243eb9ecbbc6775e346e94025bd255bbceac9fcaOwen Anderson "truncf", 1326a7df9aae620801d97da72d718e9aff76eebac9bNick Lewycky "truncl", 1336a7df9aae620801d97da72d718e9aff76eebac9bNick Lewycky "__cxa_atexit", 1346a7df9aae620801d97da72d718e9aff76eebac9bNick Lewycky "__cxa_guard_abort", 1356a7df9aae620801d97da72d718e9aff76eebac9bNick Lewycky "__cxa_guard_acquire", 1366a7df9aae620801d97da72d718e9aff76eebac9bNick Lewycky "__cxa_guard_release" 1379d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman }; 1389d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 139ce99120084f549a523213064648662a704e8b789Chris Lattner/// initialize - Initialize the set of available library functions based on the 140ce99120084f549a523213064648662a704e8b789Chris Lattner/// specified target triple. This should be carefully written so that a missing 141ce99120084f549a523213064648662a704e8b789Chris Lattner/// target triple gets a sane set of defaults. 142ce99120084f549a523213064648662a704e8b789Chris Lattnerstatic void initialize(TargetLibraryInfo &TLI, const Triple &T) { 143ce99120084f549a523213064648662a704e8b789Chris Lattner initializeTargetLibraryInfoPass(*PassRegistry::getPassRegistry()); 144ce99120084f549a523213064648662a704e8b789Chris Lattner 145ce99120084f549a523213064648662a704e8b789Chris Lattner 146ce99120084f549a523213064648662a704e8b789Chris Lattner // memset_pattern16 is only available on iOS 3.0 and Mac OS/X 10.5 and later. 147558692fd0a31d4d3ae4fd09a3a02f80da2e44e5cDaniel Dunbar if (T.isMacOSX()) { 148558692fd0a31d4d3ae4fd09a3a02f80da2e44e5cDaniel Dunbar if (T.isMacOSXVersionLT(10, 5)) 14913fb3b5706bf3778c6b76a39a45a9dca5b215940Daniel Dunbar TLI.setUnavailable(LibFunc::memset_pattern16); 15013fb3b5706bf3778c6b76a39a45a9dca5b215940Daniel Dunbar } else if (T.getOS() == Triple::IOS) { 15113fb3b5706bf3778c6b76a39a45a9dca5b215940Daniel Dunbar if (T.isOSVersionLT(3, 0)) 15213fb3b5706bf3778c6b76a39a45a9dca5b215940Daniel Dunbar TLI.setUnavailable(LibFunc::memset_pattern16); 15313fb3b5706bf3778c6b76a39a45a9dca5b215940Daniel Dunbar } else { 154ce99120084f549a523213064648662a704e8b789Chris Lattner TLI.setUnavailable(LibFunc::memset_pattern16); 15513fb3b5706bf3778c6b76a39a45a9dca5b215940Daniel Dunbar } 1563649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne 1579d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman if (T.isMacOSX() && T.getArch() == Triple::x86 && 1589d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman !T.isMacOSXVersionLT(10, 7)) { 1599d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman // x86-32 OSX has a scheme where fwrite and fputs (and some other functions 1609d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman // we don't care about) have two versions; on recent OSX, the one we want 1619d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman // has a $UNIX2003 suffix. The two implementations are identical except 1629d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman // for the return value in some edge cases. However, we don't want to 1639d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman // generate code that depends on the old symbols. 1649d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman TLI.setAvailableWithName(LibFunc::fwrite, "fwrite$UNIX2003"); 1659d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman TLI.setAvailableWithName(LibFunc::fputs, "fputs$UNIX2003"); 1669d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman } 1679d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman 1689fe88973be6bf0f47b36f40ada87176b9d7edd4bDuncan Sands // iprintf and friends are only available on XCore and TCE. 1699fe88973be6bf0f47b36f40ada87176b9d7edd4bDuncan Sands if (T.getArch() != Triple::xcore && T.getArch() != Triple::tce) { 1703649824bec09768cbdee7aa7cfbbcdd865373626Richard Osborne TLI.setUnavailable(LibFunc::iprintf); 171419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne TLI.setUnavailable(LibFunc::siprintf); 172022708f221e2a9ea1a42c07c7cd7817a8de881dcRichard Osborne TLI.setUnavailable(LibFunc::fiprintf); 173419454ad3720b8cf4613d9e790669c8beaccd1a4Richard Osborne } 174d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff 175d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff if (T.getOS() == Triple::Win32) { 176d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff // Win32 does not support long double 177d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::acosl); 178d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::asinl); 179d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::atanl); 180d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::atan2l); 181d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::ceill); 182d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::copysignl); 183d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::cosl); 184d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::coshl); 185d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::expl); 186d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::fabsf); // Win32 and Win64 both lack fabsf 187d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::fabsl); 188d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::floorl); 189d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::fmodl); 190d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::logl); 191d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::powl); 192d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::sinl); 193d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::sinhl); 194d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::sqrtl); 195d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::tanl); 196d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::tanhl); 197d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff 198d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff // Win32 only has C89 math 199d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::exp2); 200d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::exp2f); 201d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::exp2l); 202d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::expm1); 203d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::expm1f); 204d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::expm1l); 205d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::log2); 206d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::log2f); 207d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::log2l); 208d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::log1p); 209d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::log1pf); 210d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::log1pl); 211d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::nearbyint); 212d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::nearbyintf); 213d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::nearbyintl); 214d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::rint); 215d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::rintf); 216d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::rintl); 217d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::round); 218d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::roundf); 219d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::roundl); 220d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::trunc); 221d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::truncf); 222d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::truncl); 223d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff 224d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff // Win32 provides some C99 math with mangled names 225d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setAvailableWithName(LibFunc::copysign, "_copysign"); 226d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff 227d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff if (T.getArch() == Triple::x86) { 228d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff // Win32 on x86 implements single-precision math functions as macros 229d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::acosf); 230d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::asinf); 231d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::atanf); 232d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::atan2f); 233d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::ceilf); 234d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::copysignf); 235d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::cosf); 236d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::coshf); 237d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::expf); 238d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::floorf); 239d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::fmodf); 240d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::logf); 241d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::powf); 242d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::sinf); 243d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::sinhf); 244d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::sqrtf); 245d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::tanf); 246d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff TLI.setUnavailable(LibFunc::tanhf); 247d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff } 248d5bda5ec663f43710fe462f44b77ddbcf8fe9d9eJoe Groff } 249ce99120084f549a523213064648662a704e8b789Chris Lattner} 250ce99120084f549a523213064648662a704e8b789Chris Lattner 251ce99120084f549a523213064648662a704e8b789Chris Lattner 252ce99120084f549a523213064648662a704e8b789Chris LattnerTargetLibraryInfo::TargetLibraryInfo() : ImmutablePass(ID) { 253ce99120084f549a523213064648662a704e8b789Chris Lattner // Default to everything being available. 254ce99120084f549a523213064648662a704e8b789Chris Lattner memset(AvailableArray, -1, sizeof(AvailableArray)); 255ce99120084f549a523213064648662a704e8b789Chris Lattner 256ce99120084f549a523213064648662a704e8b789Chris Lattner initialize(*this, Triple()); 257ce99120084f549a523213064648662a704e8b789Chris Lattner} 258ce99120084f549a523213064648662a704e8b789Chris Lattner 259ce99120084f549a523213064648662a704e8b789Chris LattnerTargetLibraryInfo::TargetLibraryInfo(const Triple &T) : ImmutablePass(ID) { 260ce99120084f549a523213064648662a704e8b789Chris Lattner // Default to everything being available. 261ce99120084f549a523213064648662a704e8b789Chris Lattner memset(AvailableArray, -1, sizeof(AvailableArray)); 262ce99120084f549a523213064648662a704e8b789Chris Lattner 263ce99120084f549a523213064648662a704e8b789Chris Lattner initialize(*this, T); 264ce99120084f549a523213064648662a704e8b789Chris Lattner} 265188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner 26640f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris LattnerTargetLibraryInfo::TargetLibraryInfo(const TargetLibraryInfo &TLI) 26740f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner : ImmutablePass(ID) { 26840f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner memcpy(AvailableArray, TLI.AvailableArray, sizeof(AvailableArray)); 2699d434dbff3eb0501efc3457acec2401afdffef2fEli Friedman CustomNames = TLI.CustomNames; 27040f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner} 27140f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner 27240f5fbcc5c95bb96c43ce2d06d57ae9b7f852539Chris Lattner 273188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner/// disableAllFunctions - This disables all builtins, which is used for options 274188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner/// like -fno-builtin. 275188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattnervoid TargetLibraryInfo::disableAllFunctions() { 276188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner memset(AvailableArray, 0, sizeof(AvailableArray)); 277188a7e00e784f78d6b5b250a64ac5c374f0fd3f0Chris Lattner} 278