summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-exegesis/lib/SchedClassResolution.h
diff options
context:
space:
mode:
authorRoman Lebedev <lebedev.ri@gmail.com>2019-03-29 14:24:27 +0000
committerRoman Lebedev <lebedev.ri@gmail.com>2019-03-29 14:24:27 +0000
commit1d1330c5463f90ce2172a0110be9b625534614fa (patch)
treec77b1edaf54b211cd8b73804011d1d1c8e0ff177 /llvm/tools/llvm-exegesis/lib/SchedClassResolution.h
parent12685d0f7cd870b64aff47016f2bc4cd7210fb14 (diff)
downloadbcm5719-llvm-1d1330c5463f90ce2172a0110be9b625534614fa.tar.gz
bcm5719-llvm-1d1330c5463f90ce2172a0110be9b625534614fa.zip
[NFC][llvm-exegesis] Refactor ResolvedSchedClass & friends
Summary: `ResolvedSchedClass` will need to be used outside of `Analysis` (before `InstructionBenchmarkClustering` even), therefore promote it into a non-private top-level class, and while there also move all of the functions that are only called by `ResolvedSchedClass` into that same new file. Reviewers: courbet, gchatelet Reviewed By: courbet Subscribers: mgorny, tschuett, mgrang, jdoerfert, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D59993 llvm-svn: 357259
Diffstat (limited to 'llvm/tools/llvm-exegesis/lib/SchedClassResolution.h')
-rw-r--r--llvm/tools/llvm-exegesis/lib/SchedClassResolution.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/llvm/tools/llvm-exegesis/lib/SchedClassResolution.h b/llvm/tools/llvm-exegesis/lib/SchedClassResolution.h
new file mode 100644
index 00000000000..00f65ee2edf
--- /dev/null
+++ b/llvm/tools/llvm-exegesis/lib/SchedClassResolution.h
@@ -0,0 +1,58 @@
+//===-- SchedClassResolution.h ----------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Analysis output for benchmark results.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H
+#define LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H
+
+#include "llvm/MC/MCContext.h"
+#include "llvm/MC/MCDisassembler/MCDisassembler.h"
+#include "llvm/MC/MCInstPrinter.h"
+#include "llvm/MC/MCInstrInfo.h"
+#include "llvm/MC/MCObjectFileInfo.h"
+#include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/TargetRegistry.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+namespace exegesis {
+
+// Computes the idealized ProcRes Unit pressure. This is the expected
+// distribution if the CPU scheduler can distribute the load as evenly as
+// possible.
+std::vector<std::pair<uint16_t, float>> computeIdealizedProcResPressure(
+ const llvm::MCSchedModel &SM,
+ llvm::SmallVector<llvm::MCWriteProcResEntry, 8> WPRS);
+
+// An llvm::MCSchedClassDesc augmented with some additional data.
+struct ResolvedSchedClass {
+ ResolvedSchedClass(const llvm::MCSubtargetInfo &STI,
+ unsigned ResolvedSchedClassId, bool WasVariant);
+
+ static std::pair<unsigned /*SchedClassId*/, bool /*WasVariant*/>
+ resolveSchedClassId(const llvm::MCSubtargetInfo &SubtargetInfo,
+ const llvm::MCInstrInfo &InstrInfo,
+ const llvm::MCInst &MCI);
+
+ const unsigned SchedClassId;
+ const llvm::MCSchedClassDesc *const SCDesc;
+ const bool WasVariant; // Whether the original class was variant.
+ const llvm::SmallVector<llvm::MCWriteProcResEntry, 8>
+ NonRedundantWriteProcRes;
+ const std::vector<std::pair<uint16_t, float>> IdealizedProcResPressure;
+};
+
+} // namespace exegesis
+} // namespace llvm
+
+#endif // LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H
OpenPOWER on IntegriCloud