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