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 : public PassInfoMixin<RISCVCodeGenPreparePass> {
30private:
31 const RISCVTargetMachine *TM;
32
33public:
34 RISCVCodeGenPreparePass(const RISCVTargetMachine *TM) : TM(TM) {}
35 PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
36};
37FunctionPass *createRISCVCodeGenPrepareLegacyPass();
38void initializeRISCVCodeGenPrepareLegacyPassPass(PassRegistry &);
39
40FunctionPass *createRISCVDeadRegisterDefinitionsPass();
41void initializeRISCVDeadRegisterDefinitionsPass(PassRegistry &);
42
43FunctionPass *createRISCVIndirectBranchTrackingPass();
44void initializeRISCVIndirectBranchTrackingPass(PassRegistry &);
45
46FunctionPass *createRISCVLandingPadSetupPass();
47void initializeRISCVLandingPadSetupPass(PassRegistry &);
48
49FunctionPass *createRISCVISelDag(RISCVTargetMachine &TM,
50 CodeGenOptLevel OptLevel);
51
52FunctionPass *createRISCVLateBranchOptPass();
53void initializeRISCVLateBranchOptPass(PassRegistry &);
54
55FunctionPass *createRISCVMakeCompressibleOptPass();
56void initializeRISCVMakeCompressibleOptPass(PassRegistry &);
57
58FunctionPass *createRISCVGatherScatterLoweringPass();
59void initializeRISCVGatherScatterLoweringPass(PassRegistry &);
60
61FunctionPass *createRISCVVectorPeepholePass();
62void initializeRISCVVectorPeepholePass(PassRegistry &);
63
64FunctionPass *createRISCVOptWInstrsPass();
65void initializeRISCVOptWInstrsPass(PassRegistry &);
66
67FunctionPass *createRISCVFoldMemOffsetPass();
68void initializeRISCVFoldMemOffsetPass(PassRegistry &);
69
70FunctionPass *createRISCVMergeBaseOffsetOptPass();
71void initializeRISCVMergeBaseOffsetOptPass(PassRegistry &);
72
73FunctionPass *createRISCVExpandPseudoPass();
74void initializeRISCVExpandPseudoPass(PassRegistry &);
75
76FunctionPass *createRISCVPreRAExpandPseudoPass();
77void initializeRISCVPreRAExpandPseudoPass(PassRegistry &);
78
79FunctionPass *createRISCVExpandAtomicPseudoPass();
80void initializeRISCVExpandAtomicPseudoPass(PassRegistry &);
81
82FunctionPass *createRISCVInsertVSETVLIPass();
83void initializeRISCVInsertVSETVLIPass(PassRegistry &);
84extern char &RISCVInsertVSETVLIID;
85
86FunctionPass *createRISCVPostRAExpandPseudoPass();
87void initializeRISCVPostRAExpandPseudoPass(PassRegistry &);
88FunctionPass *createRISCVInsertReadWriteCSRPass();
89void initializeRISCVInsertReadWriteCSRPass(PassRegistry &);
90
91FunctionPass *createRISCVInsertWriteVXRMPass();
92void initializeRISCVInsertWriteVXRMPass(PassRegistry &);
93
94FunctionPass *createRISCVRedundantCopyEliminationPass();
95void initializeRISCVRedundantCopyEliminationPass(PassRegistry &);
96
97FunctionPass *createRISCVMoveMergePass();
98void initializeRISCVMoveMergePass(PassRegistry &);
99
100FunctionPass *createRISCVPushPopOptimizationPass();
101void initializeRISCVPushPopOptPass(PassRegistry &);
102FunctionPass *createRISCVLoadStoreOptPass();
103void initializeRISCVLoadStoreOptPass(PassRegistry &);
104
105FunctionPass *createRISCVPreAllocZilsdOptPass();
106void initializeRISCVPreAllocZilsdOptPass(PassRegistry &);
107
108FunctionPass *createRISCVZacasABIFixPass();
109void initializeRISCVZacasABIFixPass(PassRegistry &);
110
111InstructionSelector *
112createRISCVInstructionSelector(const RISCVTargetMachine &,
113 const RISCVSubtarget &,
114 const RISCVRegisterBankInfo &);
115void initializeRISCVDAGToDAGISelLegacyPass(PassRegistry &);
116
117FunctionPass *createRISCVPostLegalizerCombiner();
118void initializeRISCVPostLegalizerCombinerPass(PassRegistry &);
119
120FunctionPass *createRISCVO0PreLegalizerCombiner();
121void initializeRISCVO0PreLegalizerCombinerPass(PassRegistry &);
122
123FunctionPass *createRISCVPreLegalizerCombiner();
124void initializeRISCVPreLegalizerCombinerPass(PassRegistry &);
125
126ModulePass *createRISCVPromoteConstantPass();
127void initializeRISCVPromoteConstantPass(PassRegistry &);
128
129FunctionPass *createRISCVVLOptimizerPass();
130void initializeRISCVVLOptimizerPass(PassRegistry &);
131
132FunctionPass *createRISCVVMV0EliminationPass();
133void initializeRISCVVMV0EliminationPass(PassRegistry &);
134
135void initializeRISCVAsmPrinterPass(PassRegistry &);
136} // namespace llvm
137
138#endif
139