1 //===----------------------- CodeRegionGenerator.h --------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
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.
14 //===----------------------------------------------------------------------===//
16 #ifndef LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H
17 #define LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H
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"
31 /// This class is responsible for parsing the input given to the llvm-mca
32 /// driver, and converting that into a CodeRegions instance.
33 class CodeRegionGenerator
{
36 CodeRegionGenerator(const CodeRegionGenerator
&) = delete;
37 CodeRegionGenerator
&operator=(const CodeRegionGenerator
&) = delete;
40 CodeRegionGenerator(SourceMgr
&SM
) : Regions(SM
) {}
41 virtual ~CodeRegionGenerator();
42 virtual Expected
<const CodeRegions
&> parseCodeRegions() = 0;
45 /// This class is responsible for parsing input ASM and generating
46 /// a CodeRegions instance.
47 class AsmCodeRegionGenerator final
: public CodeRegionGenerator
{
48 const Target
&TheTarget
;
51 const MCSubtargetInfo
&STI
;
52 const MCInstrInfo
&MCII
;
53 unsigned AssemblerDialect
; // This is set during parsing.
56 AsmCodeRegionGenerator(const Target
&T
, SourceMgr
&SM
, MCContext
&C
,
57 const MCAsmInfo
&A
, const MCSubtargetInfo
&S
,
59 : CodeRegionGenerator(SM
), TheTarget(T
), Ctx(C
), MAI(A
), STI(S
), MCII(I
),
60 AssemblerDialect(0) {}
62 unsigned getAssemblerDialect() const { return AssemblerDialect
; }
63 Expected
<const CodeRegions
&> parseCodeRegions() override
;
69 #endif // LLVM_TOOLS_LLVM_MCA_CODEREGION_GENERATOR_H