diff options
Diffstat (limited to 'llvm/tools/llvm-exegesis/lib/Target.cpp')
-rw-r--r-- | llvm/tools/llvm-exegesis/lib/Target.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/llvm/tools/llvm-exegesis/lib/Target.cpp b/llvm/tools/llvm-exegesis/lib/Target.cpp new file mode 100644 index 00000000000..1b11f93e353 --- /dev/null +++ b/llvm/tools/llvm-exegesis/lib/Target.cpp @@ -0,0 +1,36 @@ +//===-- Target.cpp ----------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#include "Target.h" + +namespace exegesis { + +ExegesisTarget::~ExegesisTarget() {} // anchor. + +static ExegesisTarget* FirstTarget = nullptr; + +const ExegesisTarget* ExegesisTarget::lookup(llvm::StringRef TT) { + const llvm::Triple::ArchType Arch = llvm::Triple(TT).getArch(); + for (const ExegesisTarget* T = FirstTarget; T != nullptr; T = T->Next) { + if (T->matchesArch(Arch)) return T; + } + return nullptr; +} + +void ExegesisTarget::registerTarget(ExegesisTarget *Target){ + if (FirstTarget == nullptr) { + FirstTarget = Target; + return; + } + assert(Target->Next == nullptr && "target has already been registered"); + if (Target->Next != nullptr) + return; + Target->Next = FirstTarget; + FirstTarget = Target; +} +} // namespace exegesis |