xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AArch64/AArch64.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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