1//===-- RISCV.h - Top-level interface for RISC-V ----------------*- 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//
9// This file contains the entry points for global functions defined in the LLVM
10// RISC-V back-end.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_RISCV_RISCV_H
15#define LLVM_LIB_TARGET_RISCV_RISCV_H
16
17#include "MCTargetDesc/RISCVBaseInfo.h"
18#include "llvm/Target/TargetMachine.h"
19
20namespace llvm {
21class FunctionPass;
22class InstructionSelector;
23class ModulePass;
24class PassRegistry;
25class RISCVRegisterBankInfo;
26class RISCVSubtarget;
27class RISCVTargetMachine;
28
29class RISCVCodeGenPreparePass
30 : public OptionalPassInfoMixin<RISCVCodeGenPreparePass> {
31private:
32 const RISCVTargetMachine *TM;
33
34public:
35 RISCVCodeGenPreparePass(const RISCVTargetMachine *TM) : TM(TM) {}
36 PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
37};
38FunctionPass *createRISCVCodeGenPrepareLegacyPass();
39void initializeRISCVCodeGenPrepareLegacyPassPass(PassRegistry &);
40
41FunctionPass *createRISCVDeadRegisterDefinitionsPass();
42void initializeRISCVDeadRegisterDefinitionsPass(PassRegistry &);
43
44FunctionPass *createRISCVIndirectBranchTrackingPass();
45void initializeRISCVIndirectBranchTrackingPass(PassRegistry &);
46
47FunctionPass *createRISCVLandingPadSetupPass();
48void initializeRISCVLandingPadSetupPass(PassRegistry &);
49
50FunctionPass *createRISCVISelDag(RISCVTargetMachine &TM,
51 CodeGenOptLevel OptLevel);
52
53FunctionPass *createRISCVLateBranchOptPass();
54void initializeRISCVLateBranchOptPass(PassRegistry &);
55
56FunctionPass *createRISCVMakeCompressibleOptPass();
57void initializeRISCVMakeCompressibleOptPass(PassRegistry &);
58
59FunctionPass *createRISCVGatherScatterLoweringPass();
60void initializeRISCVGatherScatterLoweringPass(PassRegistry &);
61
62FunctionPass *createRISCVVectorPeepholePass();
63void initializeRISCVVectorPeepholePass(PassRegistry &);
64
65FunctionPass *createRISCVOptWInstrsPass();
66void initializeRISCVOptWInstrsPass(PassRegistry &);
67
68FunctionPass *createRISCVFoldMemOffsetPass();
69void initializeRISCVFoldMemOffsetPass(PassRegistry &);
70
71FunctionPass *createRISCVMergeBaseOffsetOptPass();
72void initializeRISCVMergeBaseOffsetOptPass(PassRegistry &);
73
74FunctionPass *createRISCVExpandPseudoPass();
75void initializeRISCVExpandPseudoPass(PassRegistry &);
76
77FunctionPass *createRISCVPreRAExpandPseudoPass();
78void initializeRISCVPreRAExpandPseudoPass(PassRegistry &);
79
80FunctionPass *createRISCVExpandAtomicPseudoPass();
81void initializeRISCVExpandAtomicPseudoPass(PassRegistry &);
82
83FunctionPass *createRISCVInsertVSETVLIPass();
84void initializeRISCVInsertVSETVLIPass(PassRegistry &);
85extern char &RISCVInsertVSETVLIID;
86
87FunctionPass *createRISCVPostRAExpandPseudoPass();
88void initializeRISCVPostRAExpandPseudoPass(PassRegistry &);
89FunctionPass *createRISCVInsertReadWriteCSRPass();
90void initializeRISCVInsertReadWriteCSRPass(PassRegistry &);
91
92FunctionPass *createRISCVInsertWriteVXRMPass();
93void initializeRISCVInsertWriteVXRMPass(PassRegistry &);
94
95FunctionPass *createRISCVRedundantCopyEliminationPass();
96void initializeRISCVRedundantCopyEliminationPass(PassRegistry &);
97
98FunctionPass *createRISCVMoveMergePass();
99void initializeRISCVMoveMergePass(PassRegistry &);
100
101FunctionPass *createRISCVPushPopOptimizationPass();
102void initializeRISCVPushPopOptPass(PassRegistry &);
103FunctionPass *createRISCVLoadStoreOptPass();
104void initializeRISCVLoadStoreOptPass(PassRegistry &);
105
106FunctionPass *createRISCVPreAllocZilsdOptPass();
107void initializeRISCVPreAllocZilsdOptPass(PassRegistry &);
108
109FunctionPass *createRISCVZacasABIFixPass();
110void initializeRISCVZacasABIFixPass(PassRegistry &);
111
112InstructionSelector *
113createRISCVInstructionSelector(const RISCVTargetMachine &,
114 const RISCVSubtarget &,
115 const RISCVRegisterBankInfo &);
116void initializeRISCVDAGToDAGISelLegacyPass(PassRegistry &);
117
118FunctionPass *createRISCVPostLegalizerCombiner();
119void initializeRISCVPostLegalizerCombinerPass(PassRegistry &);
120
121FunctionPass *createRISCVO0PreLegalizerCombiner();
122void initializeRISCVO0PreLegalizerCombinerPass(PassRegistry &);
123
124FunctionPass *createRISCVPreLegalizerCombiner();
125void initializeRISCVPreLegalizerCombinerPass(PassRegistry &);
126
127ModulePass *createRISCVPromoteConstantPass();
128void initializeRISCVPromoteConstantPass(PassRegistry &);
129
130FunctionPass *createRISCVVLOptimizerPass();
131void initializeRISCVVLOptimizerPass(PassRegistry &);
132
133FunctionPass *createRISCVVMV0EliminationPass();
134void initializeRISCVVMV0EliminationPass(PassRegistry &);
135
136FunctionPass *createRISCVQCRelaxMarkingPass();
137void initializeRISCVQCRelaxMarkingPass(PassRegistry &);
138
139void initializeRISCVAsmPrinterPass(PassRegistry &);
140} // namespace llvm
141
142#endif
143