//===----------------------- CodeRegionGenerator.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 /// /// This file declares classes responsible for generating llvm-mca /// CodeRegions from various types of input. llvm-mca only analyzes CodeRegions, /// so the classes here provide the input-to-CodeRegions translation. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H #define LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H #include "CodeRegion.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCParser/MCAsmLexer.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSubtargetInfo.h" #include "llvm/MC/TargetRegistry.h" #include "llvm/MCA/CustomBehaviour.h" #include "llvm/Support/Error.h" #include "llvm/Support/SourceMgr.h" #include <memory> namespace llvm { namespace mca { class MCACommentConsumer : public AsmCommentConsumer { … }; /// A comment consumer that parses strings. The only valid tokens are strings. class AnalysisRegionCommentConsumer : public MCACommentConsumer { … }; /// A comment consumer that parses strings to create InstrumentRegions. /// The only valid tokens are strings. class InstrumentRegionCommentConsumer : public MCACommentConsumer { … }; // This class provides the callbacks that occur when parsing input assembly. class MCStreamerWrapper : public MCStreamer { … }; class InstrumentMCStreamer : public MCStreamerWrapper { … }; /// This abstract class is responsible for parsing the input given to /// the llvm-mca driver, and converting that into a CodeRegions instance. class CodeRegionGenerator { … }; /// Abastract CodeRegionGenerator with AnalysisRegions member class AnalysisRegionGenerator : public virtual CodeRegionGenerator { … }; /// Abstract CodeRegionGenerator with InstrumentRegionsRegions member class InstrumentRegionGenerator : public virtual CodeRegionGenerator { … }; /// This abstract class is responsible for parsing input ASM and /// generating a CodeRegions instance. class AsmCodeRegionGenerator : public virtual CodeRegionGenerator { … }; class AsmAnalysisRegionGenerator final : public AnalysisRegionGenerator, public AsmCodeRegionGenerator { … }; class AsmInstrumentRegionGenerator final : public InstrumentRegionGenerator, public AsmCodeRegionGenerator { … }; } // namespace mca } // namespace llvm #endif // LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H