CodeRegionGenerator.h revision 1.1.1.1
1//===----------------------- CodeRegionGenerator.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/// \file 9/// 10/// This file declares classes responsible for generating llvm-mca 11/// CodeRegions from various types of input. llvm-mca only analyzes CodeRegions, 12/// so the classes here provide the input-to-CodeRegions translation. 13// 14//===----------------------------------------------------------------------===// 15 16#ifndef LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H 17#define LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H 18 19#include "CodeRegion.h" 20#include "llvm/MC/MCAsmInfo.h" 21#include "llvm/MC/MCContext.h" 22#include "llvm/MC/MCSubtargetInfo.h" 23#include "llvm/Support/Error.h" 24#include "llvm/Support/SourceMgr.h" 25#include "llvm/Support/TargetRegistry.h" 26#include <memory> 27 28namespace llvm { 29namespace mca { 30 31/// This class is responsible for parsing the input given to the llvm-mca 32/// driver, and converting that into a CodeRegions instance. 33class CodeRegionGenerator { 34protected: 35 CodeRegions Regions; 36 CodeRegionGenerator(const CodeRegionGenerator &) = delete; 37 CodeRegionGenerator &operator=(const CodeRegionGenerator &) = delete; 38 39public: 40 CodeRegionGenerator(SourceMgr &SM) : Regions(SM) {} 41 virtual ~CodeRegionGenerator(); 42 virtual Expected<const CodeRegions &> parseCodeRegions() = 0; 43}; 44 45/// This class is responsible for parsing input ASM and generating 46/// a CodeRegions instance. 47class AsmCodeRegionGenerator final : public CodeRegionGenerator { 48 const Target &TheTarget; 49 MCContext &Ctx; 50 const MCAsmInfo &MAI; 51 const MCSubtargetInfo &STI; 52 const MCInstrInfo &MCII; 53 unsigned AssemblerDialect; // This is set during parsing. 54 55public: 56 AsmCodeRegionGenerator(const Target &T, SourceMgr &SM, MCContext &C, 57 const MCAsmInfo &A, const MCSubtargetInfo &S, 58 const MCInstrInfo &I) 59 : CodeRegionGenerator(SM), TheTarget(T), Ctx(C), MAI(A), STI(S), MCII(I), 60 AssemblerDialect(0) {} 61 62 unsigned getAssemblerDialect() const { return AssemblerDialect; } 63 Expected<const CodeRegions &> parseCodeRegions() override; 64}; 65 66} // namespace mca 67} // namespace llvm 68 69#endif // LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H 70