diff options
| author | Clement Courbet <courbet@google.com> | 2018-06-19 10:39:50 +0000 |
|---|---|---|
| committer | Clement Courbet <courbet@google.com> | 2018-06-19 10:39:50 +0000 |
| commit | 6780b5f97d28ff1f0266fc3780a35396db286e7a (patch) | |
| tree | eb42972070e3b7e44ebef97eaa0f198caad9599c /llvm/tools/llvm-exegesis/lib/Target.cpp | |
| parent | b1ce7765be157bc5c825362f1f0804350e56c468 (diff) | |
| download | bcm5719-llvm-6780b5f97d28ff1f0266fc3780a35396db286e7a.tar.gz bcm5719-llvm-6780b5f97d28ff1f0266fc3780a35396db286e7a.zip | |
[llvm-exegesis] A mechanism to add target-specific functionality.
Summary: This is a step towards implementing memory operands and X87.
Reviewers: gchatelet
Subscribers: mgorny, tschuett, llvm-commits
Differential Revision: https://reviews.llvm.org/D48210
llvm-svn: 335038
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 |

