|  | //===----------------------- 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/MCSubtargetInfo.h" | 
|  | #include "llvm/Support/Error.h" | 
|  | #include "llvm/Support/SourceMgr.h" | 
|  | #include "llvm/Support/TargetRegistry.h" | 
|  | #include <memory> | 
|  |  | 
|  | namespace llvm { | 
|  | namespace mca { | 
|  |  | 
|  | /// This class is responsible for parsing the input given to the llvm-mca | 
|  | /// driver, and converting that into a CodeRegions instance. | 
|  | class CodeRegionGenerator { | 
|  | protected: | 
|  | CodeRegions Regions; | 
|  | CodeRegionGenerator(const CodeRegionGenerator &) = delete; | 
|  | CodeRegionGenerator &operator=(const CodeRegionGenerator &) = delete; | 
|  |  | 
|  | public: | 
|  | CodeRegionGenerator(SourceMgr &SM) : Regions(SM) {} | 
|  | virtual ~CodeRegionGenerator(); | 
|  | virtual Expected<const CodeRegions &> parseCodeRegions() = 0; | 
|  | }; | 
|  |  | 
|  | /// This class is responsible for parsing input ASM and generating | 
|  | /// a CodeRegions instance. | 
|  | class AsmCodeRegionGenerator final : public CodeRegionGenerator { | 
|  | const Target &TheTarget; | 
|  | MCContext &Ctx; | 
|  | const MCAsmInfo &MAI; | 
|  | const MCSubtargetInfo &STI; | 
|  | const MCInstrInfo &MCII; | 
|  | unsigned AssemblerDialect; // This is set during parsing. | 
|  |  | 
|  | public: | 
|  | AsmCodeRegionGenerator(const Target &T, SourceMgr &SM, MCContext &C, | 
|  | const MCAsmInfo &A, const MCSubtargetInfo &S, | 
|  | const MCInstrInfo &I) | 
|  | : CodeRegionGenerator(SM), TheTarget(T), Ctx(C), MAI(A), STI(S), MCII(I), | 
|  | AssemblerDialect(0) {} | 
|  |  | 
|  | unsigned getAssemblerDialect() const { return AssemblerDialect; } | 
|  | Expected<const CodeRegions &> parseCodeRegions() override; | 
|  | }; | 
|  |  | 
|  | } // namespace mca | 
|  | } // namespace llvm | 
|  |  | 
|  | #endif // LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H |