30 const Target *TheTarget =
nullptr;
31 if (!ArchName.
empty()) {
33 [&](
const Target &
T) {
return ArchName ==
T.getName(); });
36 Error = (
"invalid target '" + ArchName +
"'.\n").str();
49 std::string TempError;
52 Error =
"unable to get target for '"
54 +
"', see --version and --triple.\n";
65 Error =
"Unable to find target for this triple (no targets are registered)";
69 auto ArchMatch = [&](
const Target &
T) {
return T.ArchMatchFn(Arch); };
73 Error = (
"No available targets are compatible with triple \"" + TT +
"\"")
78 auto J = std::find_if(std::next(
I),
targets().end(), ArchMatch);
80 Error = std::string(
"Cannot choose between targets \"") +
I->Name +
81 "\" and \"" + J->Name +
"\"";
89 const char *ShortDesc,
90 const char *BackendName,
94 "Missing required target information!");
106 T.ShortDesc = ShortDesc;
107 T.BackendName = BackendName;
108 T.ArchMatchFn = ArchMatchFn;
113 const std::pair<StringRef, const Target *> *RHS) {
114 return LHS->first.compare(
RHS->first);
118 std::vector<std::pair<StringRef, const Target*> >
Targets;
121 Targets.push_back(std::make_pair(
T.getName(), &
T));
122 Width = std::max(Width,
Targets.back().first.size());
127 OS <<
" Registered Targets:\n";
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
static Target * FirstTarget
static int TargetArraySortFn(const std::pair< StringRef, const Target * > *LHS, const std::pair< StringRef, const Target * > *RHS)
Lightweight error class with error context and mandatory checking.
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
Target - Wrapper for Target specific information.
bool(*)(Triple::ArchType Arch) ArchMatchFnTy
const char * getShortDescription() const
getShortDescription - Get a short description of the target.
Triple - Helper class for working with autoconf configuration names.
static ArchType getArchTypeForLLVMName(StringRef Str)
The canonical type for the given LLVM architecture name (e.g., "x86").
ArchType getArch() const
Get the parsed architecture type of this triple.
const std::string & getTriple() const
void setArch(ArchType Kind, SubArchType SubArch=NoSubArch)
Set the architecture (first) component of the triple to a known type.
The instances of the Type class are immutable: once they are created, they are never changed.
A range adaptor for a pair of iterators.
This class implements an extremely fast bulk output stream that can only output to a stream.
raw_ostream & indent(unsigned NumSpaces)
indent - Insert 'NumSpaces' spaces.
This is an optimization pass for GlobalISel generic memory operations.
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
auto find_if(R &&Range, UnaryPredicate P)
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly.
void array_pod_sort(IteratorTy Start, IteratorTy End)
array_pod_sort - This sorts an array with the specified start and end extent.
static const Target * lookupTarget(StringRef Triple, std::string &Error)
lookupTarget - Lookup a target based on a target triple.
static void printRegisteredTargetsForVersion(raw_ostream &OS)
printRegisteredTargetsForVersion - Print the registered targets appropriately for inclusion in a tool...
static void RegisterTarget(Target &T, const char *Name, const char *ShortDesc, const char *BackendName, Target::ArchMatchFnTy ArchMatchFn, bool HasJIT=false)
RegisterTarget - Register the given target.
static iterator_range< iterator > targets()