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