xref: /freebsd/contrib/llvm-project/llvm/lib/Target/RISCV/RISCV.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
106c3fb27SDimitry Andric //===-- RISCV.h - Top-level interface for RISC-V ----------------*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric //
90b57cec5SDimitry Andric // This file contains the entry points for global functions defined in the LLVM
100b57cec5SDimitry Andric // RISC-V back-end.
110b57cec5SDimitry Andric //
120b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
130b57cec5SDimitry Andric 
140b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_RISCV_RISCV_H
150b57cec5SDimitry Andric #define LLVM_LIB_TARGET_RISCV_RISCV_H
160b57cec5SDimitry Andric 
17e8d8bef9SDimitry Andric #include "MCTargetDesc/RISCVBaseInfo.h"
180b57cec5SDimitry Andric #include "llvm/Target/TargetMachine.h"
190b57cec5SDimitry Andric 
200b57cec5SDimitry Andric namespace llvm {
210b57cec5SDimitry Andric class FunctionPass;
228bcb0991SDimitry Andric class InstructionSelector;
230b57cec5SDimitry Andric class PassRegistry;
24bdd1243dSDimitry Andric class RISCVRegisterBankInfo;
25bdd1243dSDimitry Andric class RISCVSubtarget;
26bdd1243dSDimitry Andric class RISCVTargetMachine;
270b57cec5SDimitry Andric 
28fcaf7f86SDimitry Andric FunctionPass *createRISCVCodeGenPreparePass();
29fcaf7f86SDimitry Andric void initializeRISCVCodeGenPreparePass(PassRegistry &);
30fcaf7f86SDimitry Andric 
315f757f3fSDimitry Andric FunctionPass *createRISCVDeadRegisterDefinitionsPass();
325f757f3fSDimitry Andric void initializeRISCVDeadRegisterDefinitionsPass(PassRegistry &);
335f757f3fSDimitry Andric 
3481ad6265SDimitry Andric FunctionPass *createRISCVISelDag(RISCVTargetMachine &TM,
355f757f3fSDimitry Andric                                  CodeGenOptLevel OptLevel);
3681ad6265SDimitry Andric 
3781ad6265SDimitry Andric FunctionPass *createRISCVMakeCompressibleOptPass();
3881ad6265SDimitry Andric void initializeRISCVMakeCompressibleOptPass(PassRegistry &);
390b57cec5SDimitry Andric 
40349cc55cSDimitry Andric FunctionPass *createRISCVGatherScatterLoweringPass();
41349cc55cSDimitry Andric void initializeRISCVGatherScatterLoweringPass(PassRegistry &);
42349cc55cSDimitry Andric 
43*0fca6ea1SDimitry Andric FunctionPass *createRISCVVectorPeepholePass();
44*0fca6ea1SDimitry Andric void initializeRISCVVectorPeepholePass(PassRegistry &);
455f757f3fSDimitry Andric 
4606c3fb27SDimitry Andric FunctionPass *createRISCVOptWInstrsPass();
4706c3fb27SDimitry Andric void initializeRISCVOptWInstrsPass(PassRegistry &);
48bdd1243dSDimitry Andric 
490b57cec5SDimitry Andric FunctionPass *createRISCVMergeBaseOffsetOptPass();
500b57cec5SDimitry Andric void initializeRISCVMergeBaseOffsetOptPass(PassRegistry &);
510b57cec5SDimitry Andric 
520b57cec5SDimitry Andric FunctionPass *createRISCVExpandPseudoPass();
530b57cec5SDimitry Andric void initializeRISCVExpandPseudoPass(PassRegistry &);
548bcb0991SDimitry Andric 
55bdd1243dSDimitry Andric FunctionPass *createRISCVPreRAExpandPseudoPass();
56bdd1243dSDimitry Andric void initializeRISCVPreRAExpandPseudoPass(PassRegistry &);
57bdd1243dSDimitry Andric 
585ffd83dbSDimitry Andric FunctionPass *createRISCVExpandAtomicPseudoPass();
595ffd83dbSDimitry Andric void initializeRISCVExpandAtomicPseudoPass(PassRegistry &);
605ffd83dbSDimitry Andric 
61fe6060f1SDimitry Andric FunctionPass *createRISCVInsertVSETVLIPass();
62fe6060f1SDimitry Andric void initializeRISCVInsertVSETVLIPass(PassRegistry &);
63*0fca6ea1SDimitry Andric extern char &RISCVInsertVSETVLIID;
64e8d8bef9SDimitry Andric 
655f757f3fSDimitry Andric FunctionPass *createRISCVPostRAExpandPseudoPass();
665f757f3fSDimitry Andric void initializeRISCVPostRAExpandPseudoPass(PassRegistry &);
6706c3fb27SDimitry Andric FunctionPass *createRISCVInsertReadWriteCSRPass();
6806c3fb27SDimitry Andric void initializeRISCVInsertReadWriteCSRPass(PassRegistry &);
6906c3fb27SDimitry Andric 
705f757f3fSDimitry Andric FunctionPass *createRISCVInsertWriteVXRMPass();
715f757f3fSDimitry Andric void initializeRISCVInsertWriteVXRMPass(PassRegistry &);
725f757f3fSDimitry Andric 
7381ad6265SDimitry Andric FunctionPass *createRISCVRedundantCopyEliminationPass();
7481ad6265SDimitry Andric void initializeRISCVRedundantCopyEliminationPass(PassRegistry &);
7581ad6265SDimitry Andric 
7606c3fb27SDimitry Andric FunctionPass *createRISCVMoveMergePass();
7706c3fb27SDimitry Andric void initializeRISCVMoveMergePass(PassRegistry &);
7806c3fb27SDimitry Andric 
7906c3fb27SDimitry Andric FunctionPass *createRISCVPushPopOptimizationPass();
8006c3fb27SDimitry Andric void initializeRISCVPushPopOptPass(PassRegistry &);
8106c3fb27SDimitry Andric 
82*0fca6ea1SDimitry Andric InstructionSelector *
83*0fca6ea1SDimitry Andric createRISCVInstructionSelector(const RISCVTargetMachine &,
84*0fca6ea1SDimitry Andric                                const RISCVSubtarget &,
85*0fca6ea1SDimitry Andric                                const RISCVRegisterBankInfo &);
86*0fca6ea1SDimitry Andric void initializeRISCVDAGToDAGISelLegacyPass(PassRegistry &);
875f757f3fSDimitry Andric 
885f757f3fSDimitry Andric FunctionPass *createRISCVPostLegalizerCombiner();
895f757f3fSDimitry Andric void initializeRISCVPostLegalizerCombinerPass(PassRegistry &);
905f757f3fSDimitry Andric 
915f757f3fSDimitry Andric FunctionPass *createRISCVO0PreLegalizerCombiner();
925f757f3fSDimitry Andric void initializeRISCVO0PreLegalizerCombinerPass(PassRegistry &);
935f757f3fSDimitry Andric 
945f757f3fSDimitry Andric FunctionPass *createRISCVPreLegalizerCombiner();
955f757f3fSDimitry Andric void initializeRISCVPreLegalizerCombinerPass(PassRegistry &);
96bdd1243dSDimitry Andric } // namespace llvm
970b57cec5SDimitry Andric 
980b57cec5SDimitry Andric #endif
99