summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-exegesis/lib/LlvmState.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-exegesis/lib/LlvmState.h')
-rw-r--r--llvm/tools/llvm-exegesis/lib/LlvmState.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/llvm/tools/llvm-exegesis/lib/LlvmState.h b/llvm/tools/llvm-exegesis/lib/LlvmState.h
new file mode 100644
index 00000000000..c0a9bb29d8c
--- /dev/null
+++ b/llvm/tools/llvm-exegesis/lib/LlvmState.h
@@ -0,0 +1,59 @@
+//===-- LlvmState.h ---------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVM_EXEGESIS_LLVMSTATE_H
+#define LLVM_TOOLS_LLVM_EXEGESIS_LLVMSTATE_H
+
+#include "llvm/MC/MCAsmInfo.h"
+#include "llvm/MC/MCInst.h"
+#include "llvm/MC/MCInstrInfo.h"
+#include "llvm/MC/MCRegisterInfo.h"
+#include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/Target/TargetMachine.h"
+#include <memory>
+#include <string>
+
+namespace exegesis {
+
+// An object to initialize LLVM and prepare objects needed to run the
+// measurements.
+class LLVMState {
+public:
+ LLVMState();
+
+ llvm::StringRef getTriple() const { return TheTriple; }
+ llvm::StringRef getCpuName() const { return CpuName; }
+ llvm::StringRef getFeatures() const { return Features; }
+
+ const llvm::MCInstrInfo &getInstrInfo() const { return *InstrInfo; }
+
+ const llvm::MCRegisterInfo &getRegInfo() const { return *RegInfo; }
+
+ const llvm::MCSubtargetInfo &getSubtargetInfo() const {
+ return *SubtargetInfo;
+ }
+
+ std::unique_ptr<llvm::LLVMTargetMachine> createTargetMachine() const;
+
+ bool canAssemble(const llvm::MCInst &mc_inst) const;
+
+private:
+ std::string TheTriple;
+ std::string CpuName;
+ std::string Features;
+ const llvm::Target *TheTarget = nullptr;
+ std::unique_ptr<const llvm::MCSubtargetInfo> SubtargetInfo;
+ std::unique_ptr<const llvm::MCInstrInfo> InstrInfo;
+ std::unique_ptr<const llvm::MCRegisterInfo> RegInfo;
+ std::unique_ptr<const llvm::MCAsmInfo> AsmInfo;
+};
+
+} // namespace exegesis
+
+#endif // LLVM_TOOLS_LLVM_EXEGESIS_LLVMSTATE_H
OpenPOWER on IntegriCloud