From 43025a08699db9ca83c4f5a4607e056aab470b04 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Fri, 22 Jul 2011 08:16:53 +0000 Subject: Move TargetRegistry.cpp from lib/Support to lib/Target where it belongs. The header file was already properly located. The previous need for it in Support had to do with the version string printing which was fixed in r135757. Also update build dependencies where libraries that needed the functionality of the Target library (in the form of the TargetRegistry) were picking it up via Support. This is pretty pervasive, essentially every TargetInfo library (ARMInfo, etc) uses TargetRegistry, making it depend on Target. All of these were previously just sneaking by. llvm-svn: 135760 --- llvm/lib/Support/TargetRegistry.cpp | 122 ------------------------------------ 1 file changed, 122 deletions(-) delete mode 100644 llvm/lib/Support/TargetRegistry.cpp (limited to 'llvm/lib/Support/TargetRegistry.cpp') diff --git a/llvm/lib/Support/TargetRegistry.cpp b/llvm/lib/Support/TargetRegistry.cpp deleted file mode 100644 index cdb3e1fda05..00000000000 --- a/llvm/lib/Support/TargetRegistry.cpp +++ /dev/null @@ -1,122 +0,0 @@ -//===--- TargetRegistry.cpp - Target registration -------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/ADT/STLExtras.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Target/TargetRegistry.h" -#include "llvm/Support/Host.h" -#include "llvm/Support/raw_ostream.h" -#include -#include -using namespace llvm; - -// Clients are responsible for avoid race conditions in registration. -static Target *FirstTarget = 0; - -TargetRegistry::iterator TargetRegistry::begin() { - return iterator(FirstTarget); -} - -const Target *TargetRegistry::lookupTarget(const std::string &TT, - std::string &Error) { - // Provide special warning when no targets are initialized. - if (begin() == end()) { - Error = "Unable to find target for this triple (no targets are registered)"; - return 0; - } - const Target *Best = 0, *EquallyBest = 0; - unsigned BestQuality = 0; - for (iterator it = begin(), ie = end(); it != ie; ++it) { - if (unsigned Qual = it->TripleMatchQualityFn(TT)) { - if (!Best || Qual > BestQuality) { - Best = &*it; - EquallyBest = 0; - BestQuality = Qual; - } else if (Qual == BestQuality) - EquallyBest = &*it; - } - } - - if (!Best) { - Error = "No available targets are compatible with this triple, " - "see -version for the available targets."; - return 0; - } - - // Otherwise, take the best target, but make sure we don't have two equally - // good best targets. - if (EquallyBest) { - Error = std::string("Cannot choose between targets \"") + - Best->Name + "\" and \"" + EquallyBest->Name + "\""; - return 0; - } - - return Best; -} - -void TargetRegistry::RegisterTarget(Target &T, - const char *Name, - const char *ShortDesc, - Target::TripleMatchQualityFnTy TQualityFn, - bool HasJIT) { - assert(Name && ShortDesc && TQualityFn && - "Missing required target information!"); - - // Check if this target has already been initialized, we allow this as a - // convenience to some clients. - if (T.Name) - return; - - // Add to the list of targets. - T.Next = FirstTarget; - FirstTarget = &T; - - T.Name = Name; - T.ShortDesc = ShortDesc; - T.TripleMatchQualityFn = TQualityFn; - T.HasJIT = HasJIT; -} - -const Target *TargetRegistry::getClosestTargetForJIT(std::string &Error) { - const Target *TheTarget = lookupTarget(sys::getHostTriple(), Error); - - if (TheTarget && !TheTarget->hasJIT()) { - Error = "No JIT compatible target available for this host"; - return 0; - } - - return TheTarget; -} - -static int TargetArraySortFn(const void *LHS, const void *RHS) { - typedef std::pair pair_ty; - return ((const pair_ty*)LHS)->first.compare(((const pair_ty*)RHS)->first); -} - -void TargetRegistry::printRegisteredTargetsForVersion() { - std::vector > Targets; - size_t Width = 0; - for (TargetRegistry::iterator I = TargetRegistry::begin(), - E = TargetRegistry::end(); - I != E; ++I) { - Targets.push_back(std::make_pair(I->getName(), &*I)); - Width = std::max(Width, Targets.back().first.size()); - } - array_pod_sort(Targets.begin(), Targets.end(), TargetArraySortFn); - - raw_ostream &OS = outs(); - OS << " Registered Targets:\n"; - for (unsigned i = 0, e = Targets.size(); i != e; ++i) { - OS << " " << Targets[i].first; - OS.indent(Width - Targets[i].first.size()) << " - " - << Targets[i].second->getShortDescription() << '\n'; - } - if (Targets.empty()) - OS << " (none)\n"; -} -- cgit v1.2.3