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