Home | History | Annotate | Line # | Download | only in lib
      1 //===-- SchedClassResolution.h ----------------------------------*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 ///
      9 /// \file
     10 /// Resolution of MCInst sched class into expanded form for further analysis.
     11 ///
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H
     15 #define LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H
     16 
     17 #include "BenchmarkResult.h"
     18 #include "llvm/MC/MCContext.h"
     19 #include "llvm/MC/MCDisassembler/MCDisassembler.h"
     20 #include "llvm/MC/MCInstPrinter.h"
     21 #include "llvm/MC/MCInstrInfo.h"
     22 #include "llvm/MC/MCObjectFileInfo.h"
     23 #include "llvm/MC/MCSubtargetInfo.h"
     24 #include "llvm/Support/Error.h"
     25 #include "llvm/Support/TargetRegistry.h"
     26 #include "llvm/Support/raw_ostream.h"
     27 
     28 namespace llvm {
     29 namespace exegesis {
     30 
     31 // Computes the idealized ProcRes Unit pressure. This is the expected
     32 // distribution if the CPU scheduler can distribute the load as evenly as
     33 // possible.
     34 std::vector<std::pair<uint16_t, float>>
     35 computeIdealizedProcResPressure(const MCSchedModel &SM,
     36                                 SmallVector<MCWriteProcResEntry, 8> WPRS);
     37 
     38 // An MCSchedClassDesc augmented with some additional data.
     39 struct ResolvedSchedClass {
     40   ResolvedSchedClass(const MCSubtargetInfo &STI, unsigned ResolvedSchedClassId,
     41                      bool WasVariant);
     42 
     43   static std::pair<unsigned /*SchedClassId*/, bool /*WasVariant*/>
     44   resolveSchedClassId(const MCSubtargetInfo &SubtargetInfo,
     45                       const MCInstrInfo &InstrInfo, const MCInst &MCI);
     46 
     47   std::vector<BenchmarkMeasure>
     48   getAsPoint(InstructionBenchmark::ModeE Mode, const MCSubtargetInfo &STI,
     49              ArrayRef<PerInstructionStats> Representative) const;
     50 
     51   const unsigned SchedClassId;
     52   const MCSchedClassDesc *const SCDesc;
     53   const bool WasVariant; // Whether the original class was variant.
     54   const SmallVector<MCWriteProcResEntry, 8> NonRedundantWriteProcRes;
     55   const std::vector<std::pair<uint16_t, float>> IdealizedProcResPressure;
     56 };
     57 
     58 } // namespace exegesis
     59 } // namespace llvm
     60 
     61 #endif // LLVM_TOOLS_LLVM_EXEGESIS_SCHEDCLASSRESOLUTION_H
     62