10b57cec5SDimitry Andric //==-- AArch64.h - Top-level interface for AArch64 --------------*- 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 // AArch64 back-end. 110b57cec5SDimitry Andric // 120b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64_H 150b57cec5SDimitry Andric #define LLVM_LIB_TARGET_AARCH64_AARCH64_H 160b57cec5SDimitry Andric 170b57cec5SDimitry Andric #include "MCTargetDesc/AArch64MCTargetDesc.h" 180b57cec5SDimitry Andric #include "Utils/AArch64BaseInfo.h" 1981ad6265SDimitry Andric #include "llvm/Pass.h" 2081ad6265SDimitry Andric #include "llvm/PassRegistry.h" 210b57cec5SDimitry Andric #include "llvm/Support/DataTypes.h" 220b57cec5SDimitry Andric #include "llvm/Target/TargetMachine.h" 230b57cec5SDimitry Andric 240b57cec5SDimitry Andric namespace llvm { 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric class AArch64RegisterBankInfo; 270b57cec5SDimitry Andric class AArch64Subtarget; 280b57cec5SDimitry Andric class AArch64TargetMachine; 290b57cec5SDimitry Andric class FunctionPass; 300b57cec5SDimitry Andric class InstructionSelector; 310b57cec5SDimitry Andric 320b57cec5SDimitry Andric FunctionPass *createAArch64DeadRegisterDefinitions(); 330b57cec5SDimitry Andric FunctionPass *createAArch64RedundantCopyEliminationPass(); 340b57cec5SDimitry Andric FunctionPass *createAArch64CondBrTuning(); 350b57cec5SDimitry Andric FunctionPass *createAArch64CompressJumpTablesPass(); 360b57cec5SDimitry Andric FunctionPass *createAArch64ConditionalCompares(); 370b57cec5SDimitry Andric FunctionPass *createAArch64AdvSIMDScalar(); 380b57cec5SDimitry Andric FunctionPass *createAArch64ISelDag(AArch64TargetMachine &TM, 395f757f3fSDimitry Andric CodeGenOptLevel OptLevel); 400b57cec5SDimitry Andric FunctionPass *createAArch64StorePairSuppressPass(); 410b57cec5SDimitry Andric FunctionPass *createAArch64ExpandPseudoPass(); 425ffd83dbSDimitry Andric FunctionPass *createAArch64SLSHardeningPass(); 430b57cec5SDimitry Andric FunctionPass *createAArch64SpeculationHardeningPass(); 440b57cec5SDimitry Andric FunctionPass *createAArch64LoadStoreOptimizationPass(); 45fe6060f1SDimitry Andric ModulePass *createAArch64LowerHomogeneousPrologEpilogPass(); 460b57cec5SDimitry Andric FunctionPass *createAArch64SIMDInstrOptPass(); 470b57cec5SDimitry Andric ModulePass *createAArch64PromoteConstantPass(); 480b57cec5SDimitry Andric FunctionPass *createAArch64ConditionOptimizerPass(); 490b57cec5SDimitry Andric FunctionPass *createAArch64A57FPLoadBalancing(); 500b57cec5SDimitry Andric FunctionPass *createAArch64A53Fix835769(); 510b57cec5SDimitry Andric FunctionPass *createFalkorHWPFFixPass(); 520b57cec5SDimitry Andric FunctionPass *createFalkorMarkStridedAccessesPass(); 535f757f3fSDimitry Andric FunctionPass *createAArch64PointerAuthPass(); 540b57cec5SDimitry Andric FunctionPass *createAArch64BranchTargetsPass(); 55349cc55cSDimitry Andric FunctionPass *createAArch64MIPeepholeOptPass(); 56*0fca6ea1SDimitry Andric FunctionPass *createAArch64PostCoalescerPass(); 570b57cec5SDimitry Andric 580b57cec5SDimitry Andric FunctionPass *createAArch64CleanupLocalDynamicTLSPass(); 590b57cec5SDimitry Andric 600b57cec5SDimitry Andric FunctionPass *createAArch64CollectLOHPass(); 61bdd1243dSDimitry Andric FunctionPass *createSMEABIPass(); 625ffd83dbSDimitry Andric ModulePass *createSVEIntrinsicOptsPass(); 630b57cec5SDimitry Andric InstructionSelector * 640b57cec5SDimitry Andric createAArch64InstructionSelector(const AArch64TargetMachine &, 65*0fca6ea1SDimitry Andric const AArch64Subtarget &, 66*0fca6ea1SDimitry Andric const AArch64RegisterBankInfo &); 67fe6060f1SDimitry Andric FunctionPass *createAArch64O0PreLegalizerCombiner(); 68fe6060f1SDimitry Andric FunctionPass *createAArch64PreLegalizerCombiner(); 69e8d8bef9SDimitry Andric FunctionPass *createAArch64PostLegalizerCombiner(bool IsOptNone); 70e8d8bef9SDimitry Andric FunctionPass *createAArch64PostLegalizerLowering(); 71e8d8bef9SDimitry Andric FunctionPass *createAArch64PostSelectOptimize(); 725ffd83dbSDimitry Andric FunctionPass *createAArch64StackTaggingPass(bool IsOptNone); 738bcb0991SDimitry Andric FunctionPass *createAArch64StackTaggingPreRAPass(); 7406c3fb27SDimitry Andric ModulePass *createAArch64GlobalsTaggingPass(); 757a6dacacSDimitry Andric ModulePass *createAArch64Arm64ECCallLoweringPass(); 760b57cec5SDimitry Andric 770b57cec5SDimitry Andric void initializeAArch64A53Fix835769Pass(PassRegistry&); 780b57cec5SDimitry Andric void initializeAArch64A57FPLoadBalancingPass(PassRegistry&); 790b57cec5SDimitry Andric void initializeAArch64AdvSIMDScalarPass(PassRegistry&); 805f757f3fSDimitry Andric void initializeAArch64PointerAuthPass(PassRegistry&); 810b57cec5SDimitry Andric void initializeAArch64BranchTargetsPass(PassRegistry&); 8281ad6265SDimitry Andric void initializeAArch64CFIFixupPass(PassRegistry&); 830b57cec5SDimitry Andric void initializeAArch64CollectLOHPass(PassRegistry &); 840b57cec5SDimitry Andric void initializeAArch64CompressJumpTablesPass(PassRegistry&); 85bdd1243dSDimitry Andric void initializeAArch64CondBrTuningPass(PassRegistry &); 860b57cec5SDimitry Andric void initializeAArch64ConditionOptimizerPass(PassRegistry&); 87bdd1243dSDimitry Andric void initializeAArch64ConditionalComparesPass(PassRegistry &); 88*0fca6ea1SDimitry Andric void initializeAArch64DAGToDAGISelLegacyPass(PassRegistry &); 890b57cec5SDimitry Andric void initializeAArch64DeadRegisterDefinitionsPass(PassRegistry&); 900b57cec5SDimitry Andric void initializeAArch64ExpandPseudoPass(PassRegistry &); 9106c3fb27SDimitry Andric void initializeAArch64GlobalsTaggingPass(PassRegistry &); 920b57cec5SDimitry Andric void initializeAArch64LoadStoreOptPass(PassRegistry&); 93fe6060f1SDimitry Andric void initializeAArch64LowerHomogeneousPrologEpilogPass(PassRegistry &); 94349cc55cSDimitry Andric void initializeAArch64MIPeepholeOptPass(PassRegistry &); 95fe6060f1SDimitry Andric void initializeAArch64O0PreLegalizerCombinerPass(PassRegistry &); 96*0fca6ea1SDimitry Andric void initializeAArch64PostCoalescerPass(PassRegistry &); 975ffd83dbSDimitry Andric void initializeAArch64PostLegalizerCombinerPass(PassRegistry &); 98e8d8bef9SDimitry Andric void initializeAArch64PostLegalizerLoweringPass(PassRegistry &); 99e8d8bef9SDimitry Andric void initializeAArch64PostSelectOptimizePass(PassRegistry &); 100bdd1243dSDimitry Andric void initializeAArch64PreLegalizerCombinerPass(PassRegistry &); 1010b57cec5SDimitry Andric void initializeAArch64PromoteConstantPass(PassRegistry&); 1020b57cec5SDimitry Andric void initializeAArch64RedundantCopyEliminationPass(PassRegistry&); 103bdd1243dSDimitry Andric void initializeAArch64SIMDInstrOptPass(PassRegistry &); 104bdd1243dSDimitry Andric void initializeAArch64SLSHardeningPass(PassRegistry &); 105bdd1243dSDimitry Andric void initializeAArch64SpeculationHardeningPass(PassRegistry &); 106bdd1243dSDimitry Andric void initializeAArch64StackTaggingPass(PassRegistry &); 107bdd1243dSDimitry Andric void initializeAArch64StackTaggingPreRAPass(PassRegistry &); 1080b57cec5SDimitry Andric void initializeAArch64StorePairSuppressPass(PassRegistry&); 1090b57cec5SDimitry Andric void initializeFalkorHWPFFixPass(PassRegistry&); 1100b57cec5SDimitry Andric void initializeFalkorMarkStridedAccessesLegacyPass(PassRegistry&); 1110b57cec5SDimitry Andric void initializeLDTLSCleanupPass(PassRegistry&); 112bdd1243dSDimitry Andric void initializeSMEABIPass(PassRegistry &); 1135ffd83dbSDimitry Andric void initializeSVEIntrinsicOptsPass(PassRegistry &); 1147a6dacacSDimitry Andric void initializeAArch64Arm64ECCallLoweringPass(PassRegistry &); 1150b57cec5SDimitry Andric } // end namespace llvm 1160b57cec5SDimitry Andric 1170b57cec5SDimitry Andric #endif 118