diff options
| author | Chris Lattner <sabre@nondot.org> | 2011-02-18 21:50:34 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2011-02-18 21:50:34 +0000 |
| commit | 0e125bb4d0f153ac18fc86adc1bedc33c6176f34 (patch) | |
| tree | 2fac1a7b2fc21c78ad0ec6c0fd343f128589197f /llvm/lib | |
| parent | d2f7431fa80367fb7b7cc773561e38c11a9777a2 (diff) | |
| download | bcm5719-llvm-0e125bb4d0f153ac18fc86adc1bedc33c6176f34.tar.gz bcm5719-llvm-0e125bb4d0f153ac18fc86adc1bedc33c6176f34.zip | |
introduce a new TargetLibraryInfo pass, which transformations can use to
query about available library functions. For now this just has
memset_pattern16, which exists on darwin, but it can be extended for a
bunch of other things in the future.
llvm-svn: 125965
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/Target.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/TargetLibraryInfo.cpp | 49 |
3 files changed, 51 insertions, 0 deletions
diff --git a/llvm/lib/Target/CMakeLists.txt b/llvm/lib/Target/CMakeLists.txt index 4d02d1e4a5b..f7a98664a36 100644 --- a/llvm/lib/Target/CMakeLists.txt +++ b/llvm/lib/Target/CMakeLists.txt @@ -9,6 +9,7 @@ add_llvm_library(LLVMTarget TargetFrameLowering.cpp TargetInstrInfo.cpp TargetIntrinsicInfo.cpp + TargetLibraryInfo.cpp TargetLoweringObjectFile.cpp TargetMachine.cpp TargetRegisterInfo.cpp diff --git a/llvm/lib/Target/Target.cpp b/llvm/lib/Target/Target.cpp index 9609099e914..0919fe42dc0 100644 --- a/llvm/lib/Target/Target.cpp +++ b/llvm/lib/Target/Target.cpp @@ -24,6 +24,7 @@ using namespace llvm; void llvm::initializeTarget(PassRegistry &Registry) { initializeTargetDataPass(Registry); + initializeTargetLibraryInfoPass(Registry); } void LLVMInitializeTarget(LLVMPassRegistryRef R) { diff --git a/llvm/lib/Target/TargetLibraryInfo.cpp b/llvm/lib/Target/TargetLibraryInfo.cpp new file mode 100644 index 00000000000..f4a85b0cd62 --- /dev/null +++ b/llvm/lib/Target/TargetLibraryInfo.cpp @@ -0,0 +1,49 @@ +//===-- 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; + +/// 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. + if (T.getOS() != Triple::Darwin || T.getDarwinMajorNumber() < 9) + TLI.setUnavailable(LibFunc::memset_pattern16); + +} + + +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); +} |

