"git@repo.hca.bsc.es:rferrer/llvm-epi-0.8.git" did not exist on "a83c0482dda12d68c9c96ba5f504fb1b1ddcd526"
Newer
Older
//===-- TargetLibraryInfo.cpp - Runtime library information ----------------==//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the TargetLibraryInfo class.
//
//===----------------------------------------------------------------------===//
#include "llvm/Target/TargetLibraryInfo.h"
#include "llvm/ADT/Triple.h"
using namespace llvm;
// Register the default implementation.
INITIALIZE_PASS(TargetLibraryInfo, "targetlibinfo",
"Target Library Information", false, true)
char TargetLibraryInfo::ID = 0;
David Blaikie
committed
void TargetLibraryInfo::anchor() { }
Eli Friedman
committed
const char* TargetLibraryInfo::StandardNames[LibFunc::NumLibFuncs] =
{
"acos",
"acosl",
"acosf",
"asin",
"asinl",
"asinf",
"atan",
"atanl",
"atanf",
"atan2",
"atan2l",
"atan2f",
Owen Anderson
committed
"copysign",
"copysignf",
"copysignl",
"cos",
"cosl",
"cosf",
"cosh",
"coshl",
"coshf",
"exp",
"expl",
"expf",
"exp2",
"exp2l",
"exp2f",
"expm1",
"expm1l",
"expl1f",
"fabs",
"fabsl",
"fabsf",
"floor",
"floorl",
"floorf",
"fiprintf",
"fmod",
"fmodl",
"fmodf",
"fputs",
"fwrite",
"iprintf",
"log",
"logl",
"logf",
"log2",
"log2l",
"log2f",
"log10",
"log10l",
"log10f",
"log1p",
"log1pl",
"log1pf",
Eli Friedman
committed
"memcpy",
"memmove",
"memset",
Eli Friedman
committed
"memset_pattern16",
Owen Anderson
committed
"nearbyint",
"nearbyintf",
"nearbyintl",
Owen Anderson
committed
"rint",
"rintf",
"rintl",
"sin",
"sinl",
"sinf",
"sqrt",
"sqrtf",
"tan",
"tanl",
"tanf",
"tanh",
"tanhl",
Owen Anderson
committed
"tanhf",
"trunc",
"truncf",
Nick Lewycky
committed
"truncl",
"__cxa_atexit",
"__cxa_guard_abort",
"__cxa_guard_acquire",
"__cxa_guard_release"
Eli Friedman
committed
};
/// initialize - Initialize the set of available library functions based on the
/// specified target triple. This should be carefully written so that a missing
/// target triple gets a sane set of defaults.
static void initialize(TargetLibraryInfo &TLI, const Triple &T) {
initializeTargetLibraryInfoPass(*PassRegistry::getPassRegistry());
// memset_pattern16 is only available on iOS 3.0 and Mac OS/X 10.5 and later.
Daniel Dunbar
committed
if (T.isMacOSX()) {
if (T.isMacOSXVersionLT(10, 5))
TLI.setUnavailable(LibFunc::memset_pattern16);
} else if (T.getOS() == Triple::IOS) {
if (T.isOSVersionLT(3, 0))
TLI.setUnavailable(LibFunc::memset_pattern16);
} else {
TLI.setUnavailable(LibFunc::memset_pattern16);
Eli Friedman
committed
if (T.isMacOSX() && T.getArch() == Triple::x86 &&
!T.isMacOSXVersionLT(10, 7)) {
// x86-32 OSX has a scheme where fwrite and fputs (and some other functions
// we don't care about) have two versions; on recent OSX, the one we want
// has a $UNIX2003 suffix. The two implementations are identical except
// for the return value in some edge cases. However, we don't want to
// generate code that depends on the old symbols.
TLI.setAvailableWithName(LibFunc::fwrite, "fwrite$UNIX2003");
TLI.setAvailableWithName(LibFunc::fputs, "fputs$UNIX2003");
}
// iprintf and friends are only available on XCore and TCE.
if (T.getArch() != Triple::xcore && T.getArch() != Triple::tce) {
TLI.setUnavailable(LibFunc::iprintf);
TLI.setUnavailable(LibFunc::siprintf);
TLI.setUnavailable(LibFunc::fiprintf);
}
}
TargetLibraryInfo::TargetLibraryInfo() : ImmutablePass(ID) {
// Default to everything being available.
memset(AvailableArray, -1, sizeof(AvailableArray));
initialize(*this, Triple());
}
TargetLibraryInfo::TargetLibraryInfo(const Triple &T) : ImmutablePass(ID) {
// Default to everything being available.
memset(AvailableArray, -1, sizeof(AvailableArray));
initialize(*this, T);
}
Chris Lattner
committed
TargetLibraryInfo::TargetLibraryInfo(const TargetLibraryInfo &TLI)
: ImmutablePass(ID) {
memcpy(AvailableArray, TLI.AvailableArray, sizeof(AvailableArray));
Eli Friedman
committed
CustomNames = TLI.CustomNames;
Chris Lattner
committed
/// disableAllFunctions - This disables all builtins, which is used for options
/// like -fno-builtin.
void TargetLibraryInfo::disableAllFunctions() {
memset(AvailableArray, 0, sizeof(AvailableArray));
}