11d1330c5SRoman Lebedev //===-- SchedClassResolution.h ----------------------------------*- C++ -*-===// 21d1330c5SRoman Lebedev // 31d1330c5SRoman Lebedev // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41d1330c5SRoman Lebedev // See https://llvm.org/LICENSE.txt for license information. 51d1330c5SRoman Lebedev // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61d1330c5SRoman Lebedev // 71d1330c5SRoman Lebedev //===----------------------------------------------------------------------===// 81d1330c5SRoman Lebedev /// 91d1330c5SRoman Lebedev /// \file 104d81e877SRoman Lebedev /// Resolution of MCInst sched class into expanded form for further analysis. 111d1330c5SRoman Lebedev /// 121d1330c5SRoman Lebedev //===----------------------------------------------------------------------===// 131d1330c5SRoman Lebedev 141d1330c5SRoman Lebedev #ifndef LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H 151d1330c5SRoman Lebedev #define LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H 161d1330c5SRoman Lebedev 174d81e877SRoman Lebedev #include "BenchmarkResult.h" 181d1330c5SRoman Lebedev #include "llvm/MC/MCContext.h" 191d1330c5SRoman Lebedev #include "llvm/MC/MCDisassembler/MCDisassembler.h" 201d1330c5SRoman Lebedev #include "llvm/MC/MCInstPrinter.h" 211d1330c5SRoman Lebedev #include "llvm/MC/MCInstrInfo.h" 221d1330c5SRoman Lebedev #include "llvm/MC/MCObjectFileInfo.h" 231d1330c5SRoman Lebedev #include "llvm/MC/MCSubtargetInfo.h" 2489b57061SReid Kleckner #include "llvm/MC/TargetRegistry.h" 251d1330c5SRoman Lebedev #include "llvm/Support/Error.h" 261d1330c5SRoman Lebedev #include "llvm/Support/raw_ostream.h" 271d1330c5SRoman Lebedev 281d1330c5SRoman Lebedev namespace llvm { 291d1330c5SRoman Lebedev namespace exegesis { 301d1330c5SRoman Lebedev 311d1330c5SRoman Lebedev // Computes the idealized ProcRes Unit pressure. This is the expected 321d1330c5SRoman Lebedev // distribution if the CPU scheduler can distribute the load as evenly as 331d1330c5SRoman Lebedev // possible. 3450cdd56bSClement Courbet std::vector<std::pair<uint16_t, float>> 3550cdd56bSClement Courbet computeIdealizedProcResPressure(const MCSchedModel &SM, 3650cdd56bSClement Courbet SmallVector<MCWriteProcResEntry, 8> WPRS); 371d1330c5SRoman Lebedev 3850cdd56bSClement Courbet // An MCSchedClassDesc augmented with some additional data. 391d1330c5SRoman Lebedev struct ResolvedSchedClass { 4050cdd56bSClement Courbet ResolvedSchedClass(const MCSubtargetInfo &STI, unsigned ResolvedSchedClassId, 4150cdd56bSClement Courbet bool WasVariant); 421d1330c5SRoman Lebedev 431d1330c5SRoman Lebedev static std::pair<unsigned /*SchedClassId*/, bool /*WasVariant*/> 4450cdd56bSClement Courbet resolveSchedClassId(const MCSubtargetInfo &SubtargetInfo, 4550cdd56bSClement Courbet const MCInstrInfo &InstrInfo, const MCInst &MCI); 461d1330c5SRoman Lebedev 474d81e877SRoman Lebedev std::vector<BenchmarkMeasure> 48*389bf5d8SAiden Grossman getAsPoint(Benchmark::ModeE Mode, const MCSubtargetInfo &STI, 494d81e877SRoman Lebedev ArrayRef<PerInstructionStats> Representative) const; 504d81e877SRoman Lebedev 511d1330c5SRoman Lebedev const unsigned SchedClassId; 5250cdd56bSClement Courbet const MCSchedClassDesc *const SCDesc; 531d1330c5SRoman Lebedev const bool WasVariant; // Whether the original class was variant. 5450cdd56bSClement Courbet const SmallVector<MCWriteProcResEntry, 8> NonRedundantWriteProcRes; 551d1330c5SRoman Lebedev const std::vector<std::pair<uint16_t, float>> IdealizedProcResPressure; 561d1330c5SRoman Lebedev }; 571d1330c5SRoman Lebedev 581d1330c5SRoman Lebedev } // namespace exegesis 591d1330c5SRoman Lebedev } // namespace llvm 601d1330c5SRoman Lebedev 611d1330c5SRoman Lebedev #endif // LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H 62