xref: /llvm-project/llvm/tools/llvm-mca/PipelinePrinter.h (revision f44473ec4ec49f793db9308759ecf1d057d4e400)
1dea343d2SMatt Davis //===--------------------- PipelinePrinter.h --------------------*- C++ -*-===//
2dea343d2SMatt Davis //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6dea343d2SMatt Davis //
7dea343d2SMatt Davis //===----------------------------------------------------------------------===//
8dea343d2SMatt Davis /// \file
9dea343d2SMatt Davis ///
10dea343d2SMatt Davis /// This file implements class PipelinePrinter.
11dea343d2SMatt Davis ///
12dea343d2SMatt Davis /// PipelinePrinter allows the customization of the performance report.
13dea343d2SMatt Davis ///
14dea343d2SMatt Davis //===----------------------------------------------------------------------===//
15dea343d2SMatt Davis 
16dea343d2SMatt Davis #ifndef LLVM_TOOLS_LLVM_MCA_PIPELINEPRINTER_H
17dea343d2SMatt Davis #define LLVM_TOOLS_LLVM_MCA_PIPELINEPRINTER_H
18dea343d2SMatt Davis 
19dea343d2SMatt Davis #include "llvm/ADT/SmallVector.h"
2010cb0362SAndrea Di Biagio #include "llvm/MC/MCSubtargetInfo.h"
2177f2f0f9SMarcos Horro #include "llvm/MCA/Context.h"
22cc5e6a72SClement Courbet #include "llvm/MCA/Pipeline.h"
23fe01014fSPatrick Holland #include "llvm/MCA/View.h"
24dea343d2SMatt Davis #include "llvm/Support/raw_ostream.h"
25dea343d2SMatt Davis 
26dea343d2SMatt Davis #define DEBUG_TYPE "llvm-mca"
27dea343d2SMatt Davis 
285a8fd657SFangrui Song namespace llvm {
29dea343d2SMatt Davis namespace mca {
30dea343d2SMatt Davis 
3110cb0362SAndrea Di Biagio class CodeRegion;
3210cb0362SAndrea Di Biagio 
33dea343d2SMatt Davis /// A printer class that knows how to collects statistics on the
34dea343d2SMatt Davis /// code analyzed by the llvm-mca tool.
35dea343d2SMatt Davis ///
36dea343d2SMatt Davis /// This class knows how to print out the analysis information collected
37dea343d2SMatt Davis /// during the execution of the code. Internally, it delegates to other
38dea343d2SMatt Davis /// classes the task of printing out timeline information as well as
39dea343d2SMatt Davis /// resource pressure.
40dea343d2SMatt Davis class PipelinePrinter {
41dea343d2SMatt Davis   Pipeline &P;
4210cb0362SAndrea Di Biagio   const CodeRegion &Region;
4310cb0362SAndrea Di Biagio   unsigned RegionIdx;
4410cb0362SAndrea Di Biagio   const MCSubtargetInfo &STI;
4577f2f0f9SMarcos Horro   const PipelineOptions &PO;
46dea343d2SMatt Davis   llvm::SmallVector<std::unique_ptr<View>, 8> Views;
47dea343d2SMatt Davis 
4810cb0362SAndrea Di Biagio   void printRegionHeader(llvm::raw_ostream &OS) const;
4910cb0362SAndrea Di Biagio   json::Object getJSONReportRegion() const;
50d919bca8SAndrea Di Biagio   json::Object getJSONTargetInfo() const;
5177f2f0f9SMarcos Horro   json::Object getJSONSimulationParameters() const;
5210cb0362SAndrea Di Biagio 
53dea343d2SMatt Davis public:
PipelinePrinter(Pipeline & Pipe,const CodeRegion & R,unsigned Idx,const MCSubtargetInfo & STI,const PipelineOptions & PO)5410cb0362SAndrea Di Biagio   PipelinePrinter(Pipeline &Pipe, const CodeRegion &R, unsigned Idx,
5577f2f0f9SMarcos Horro                   const MCSubtargetInfo &STI, const PipelineOptions &PO)
56*f44473ecSKazu Hirata       : P(Pipe), Region(R), RegionIdx(Idx), STI(STI), PO(PO) {}
57dea343d2SMatt Davis 
addView(std::unique_ptr<View> V)58dea343d2SMatt Davis   void addView(std::unique_ptr<View> V) {
59dea343d2SMatt Davis     P.addEventListener(V.get());
60dea343d2SMatt Davis     Views.emplace_back(std::move(V));
61dea343d2SMatt Davis   }
62dea343d2SMatt Davis 
63dea343d2SMatt Davis   void printReport(llvm::raw_ostream &OS) const;
6410cb0362SAndrea Di Biagio   void printReport(json::Object &JO) const;
65dea343d2SMatt Davis };
66dea343d2SMatt Davis } // namespace mca
675a8fd657SFangrui Song } // namespace llvm
68dea343d2SMatt Davis 
69dea343d2SMatt Davis #endif // LLVM_TOOLS_LLVM_MCA_PIPELINEPRINTER_H
70