106f32e7eSjoerg //==-- AArch64.h - Top-level interface for AArch64 --------------*- C++ -*-==// 206f32e7eSjoerg // 306f32e7eSjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 406f32e7eSjoerg // See https://llvm.org/LICENSE.txt for license information. 506f32e7eSjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 606f32e7eSjoerg // 706f32e7eSjoerg //===----------------------------------------------------------------------===// 806f32e7eSjoerg // 906f32e7eSjoerg // This file contains the entry points for global functions defined in the LLVM 1006f32e7eSjoerg // AArch64 back-end. 1106f32e7eSjoerg // 1206f32e7eSjoerg //===----------------------------------------------------------------------===// 1306f32e7eSjoerg 1406f32e7eSjoerg #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64_H 1506f32e7eSjoerg #define LLVM_LIB_TARGET_AARCH64_AARCH64_H 1606f32e7eSjoerg 1706f32e7eSjoerg #include "MCTargetDesc/AArch64MCTargetDesc.h" 1806f32e7eSjoerg #include "Utils/AArch64BaseInfo.h" 1906f32e7eSjoerg #include "llvm/Support/DataTypes.h" 2006f32e7eSjoerg #include "llvm/Target/TargetMachine.h" 2106f32e7eSjoerg 2206f32e7eSjoerg namespace llvm { 2306f32e7eSjoerg 2406f32e7eSjoerg class AArch64RegisterBankInfo; 2506f32e7eSjoerg class AArch64Subtarget; 2606f32e7eSjoerg class AArch64TargetMachine; 2706f32e7eSjoerg class FunctionPass; 2806f32e7eSjoerg class InstructionSelector; 2906f32e7eSjoerg class MachineFunctionPass; 3006f32e7eSjoerg 3106f32e7eSjoerg FunctionPass *createAArch64DeadRegisterDefinitions(); 3206f32e7eSjoerg FunctionPass *createAArch64RedundantCopyEliminationPass(); 3306f32e7eSjoerg FunctionPass *createAArch64CondBrTuning(); 3406f32e7eSjoerg FunctionPass *createAArch64CompressJumpTablesPass(); 3506f32e7eSjoerg FunctionPass *createAArch64ConditionalCompares(); 3606f32e7eSjoerg FunctionPass *createAArch64AdvSIMDScalar(); 3706f32e7eSjoerg FunctionPass *createAArch64ISelDag(AArch64TargetMachine &TM, 3806f32e7eSjoerg CodeGenOpt::Level OptLevel); 3906f32e7eSjoerg FunctionPass *createAArch64StorePairSuppressPass(); 4006f32e7eSjoerg FunctionPass *createAArch64ExpandPseudoPass(); 41*da58b97aSjoerg FunctionPass *createAArch64SLSHardeningPass(); 42*da58b97aSjoerg FunctionPass *createAArch64IndirectThunks(); 4306f32e7eSjoerg FunctionPass *createAArch64SpeculationHardeningPass(); 4406f32e7eSjoerg FunctionPass *createAArch64LoadStoreOptimizationPass(); 45*da58b97aSjoerg ModulePass *createAArch64LowerHomogeneousPrologEpilogPass(); 4606f32e7eSjoerg FunctionPass *createAArch64SIMDInstrOptPass(); 4706f32e7eSjoerg ModulePass *createAArch64PromoteConstantPass(); 4806f32e7eSjoerg FunctionPass *createAArch64ConditionOptimizerPass(); 4906f32e7eSjoerg FunctionPass *createAArch64A57FPLoadBalancing(); 5006f32e7eSjoerg FunctionPass *createAArch64A53Fix835769(); 5106f32e7eSjoerg FunctionPass *createFalkorHWPFFixPass(); 5206f32e7eSjoerg FunctionPass *createFalkorMarkStridedAccessesPass(); 5306f32e7eSjoerg FunctionPass *createAArch64BranchTargetsPass(); 5406f32e7eSjoerg 5506f32e7eSjoerg FunctionPass *createAArch64CleanupLocalDynamicTLSPass(); 5606f32e7eSjoerg 5706f32e7eSjoerg FunctionPass *createAArch64CollectLOHPass(); 58*da58b97aSjoerg ModulePass *createSVEIntrinsicOptsPass(); 5906f32e7eSjoerg InstructionSelector * 6006f32e7eSjoerg createAArch64InstructionSelector(const AArch64TargetMachine &, 6106f32e7eSjoerg AArch64Subtarget &, AArch64RegisterBankInfo &); 62*da58b97aSjoerg FunctionPass *createAArch64O0PreLegalizerCombiner(); 63*da58b97aSjoerg FunctionPass *createAArch64PreLegalizerCombiner(); 64*da58b97aSjoerg FunctionPass *createAArch64PostLegalizerCombiner(bool IsOptNone); 65*da58b97aSjoerg FunctionPass *createAArch64PostLegalizerLowering(); 66*da58b97aSjoerg FunctionPass *createAArch64PostSelectOptimize(); 67*da58b97aSjoerg FunctionPass *createAArch64StackTaggingPass(bool IsOptNone); 6806f32e7eSjoerg FunctionPass *createAArch64StackTaggingPreRAPass(); 6906f32e7eSjoerg 7006f32e7eSjoerg void initializeAArch64A53Fix835769Pass(PassRegistry&); 7106f32e7eSjoerg void initializeAArch64A57FPLoadBalancingPass(PassRegistry&); 7206f32e7eSjoerg void initializeAArch64AdvSIMDScalarPass(PassRegistry&); 7306f32e7eSjoerg void initializeAArch64BranchTargetsPass(PassRegistry&); 7406f32e7eSjoerg void initializeAArch64CollectLOHPass(PassRegistry&); 7506f32e7eSjoerg void initializeAArch64CondBrTuningPass(PassRegistry &); 7606f32e7eSjoerg void initializeAArch64CompressJumpTablesPass(PassRegistry&); 7706f32e7eSjoerg void initializeAArch64ConditionalComparesPass(PassRegistry&); 7806f32e7eSjoerg void initializeAArch64ConditionOptimizerPass(PassRegistry&); 7906f32e7eSjoerg void initializeAArch64DeadRegisterDefinitionsPass(PassRegistry&); 8006f32e7eSjoerg void initializeAArch64ExpandPseudoPass(PassRegistry&); 81*da58b97aSjoerg void initializeAArch64SLSHardeningPass(PassRegistry&); 8206f32e7eSjoerg void initializeAArch64SpeculationHardeningPass(PassRegistry&); 8306f32e7eSjoerg void initializeAArch64LoadStoreOptPass(PassRegistry&); 84*da58b97aSjoerg void initializeAArch64LowerHomogeneousPrologEpilogPass(PassRegistry &); 8506f32e7eSjoerg void initializeAArch64SIMDInstrOptPass(PassRegistry&); 86*da58b97aSjoerg void initializeAArch64O0PreLegalizerCombinerPass(PassRegistry &); 8706f32e7eSjoerg void initializeAArch64PreLegalizerCombinerPass(PassRegistry&); 88*da58b97aSjoerg void initializeAArch64PostLegalizerCombinerPass(PassRegistry &); 89*da58b97aSjoerg void initializeAArch64PostLegalizerLoweringPass(PassRegistry &); 90*da58b97aSjoerg void initializeAArch64PostSelectOptimizePass(PassRegistry &); 9106f32e7eSjoerg void initializeAArch64PromoteConstantPass(PassRegistry&); 9206f32e7eSjoerg void initializeAArch64RedundantCopyEliminationPass(PassRegistry&); 9306f32e7eSjoerg void initializeAArch64StorePairSuppressPass(PassRegistry&); 9406f32e7eSjoerg void initializeFalkorHWPFFixPass(PassRegistry&); 9506f32e7eSjoerg void initializeFalkorMarkStridedAccessesLegacyPass(PassRegistry&); 9606f32e7eSjoerg void initializeLDTLSCleanupPass(PassRegistry&); 97*da58b97aSjoerg void initializeSVEIntrinsicOptsPass(PassRegistry&); 9806f32e7eSjoerg void initializeAArch64StackTaggingPass(PassRegistry&); 9906f32e7eSjoerg void initializeAArch64StackTaggingPreRAPass(PassRegistry&); 10006f32e7eSjoerg } // end namespace llvm 10106f32e7eSjoerg 10206f32e7eSjoerg #endif 103