//==-- AArch64.h - Top-level interface for AArch64 --------------*- C++ -*-==// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains the entry points for global functions defined in the LLVM // AArch64 back-end. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64_H #define LLVM_LIB_TARGET_AARCH64_AARCH64_H #include "MCTargetDesc/AArch64MCTargetDesc.h" #include "Utils/AArch64BaseInfo.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineFunctionAnalysisManager.h" #include "llvm/Pass.h" #include "llvm/PassRegistry.h" #include "llvm/Support/DataTypes.h" #include "llvm/Target/TargetMachine.h" #include #include #include struct AArch64O0PreLegalizerCombinerImplRuleConfig; struct AArch64PreLegalizerCombinerImplRuleConfig; struct AArch64PostLegalizerLoweringImplRuleConfig; namespace llvm { class AArch64RegisterBankInfo; class AArch64Subtarget; class AArch64TargetMachine; enum class CodeGenOptLevel; class FunctionPass; class InstructionSelector; class ModulePass; FunctionPass *createAArch64DeadRegisterDefinitions(); FunctionPass *createAArch64RedundantCopyEliminationPass(); FunctionPass *createAArch64RedundantCondBranchPass(); FunctionPass *createAArch64CondBrTuning(); FunctionPass *createAArch64CompressJumpTablesPass(); FunctionPass *createAArch64ConditionalCompares(); FunctionPass *createAArch64AdvSIMDScalar(); FunctionPass *createAArch64ISelDag(AArch64TargetMachine &TM, CodeGenOptLevel OptLevel); FunctionPass *createAArch64StorePairSuppressPass(); FunctionPass *createAArch64ExpandPseudoLegacyPass(); FunctionPass *createAArch64SLSHardeningLegacyPass(); FunctionPass *createAArch64SpeculationHardeningPass(); FunctionPass *createAArch64LoadStoreOptLegacyPass(); ModulePass *createAArch64LowerHomogeneousPrologEpilogPass(); FunctionPass *createAArch64SIMDInstrOptPass(); ModulePass *createAArch64PromoteConstantPass(); FunctionPass *createAArch64ConditionOptimizerLegacyPass(); FunctionPass *createAArch64A57FPLoadBalancingLegacyPass(); FunctionPass *createAArch64A53Fix835769LegacyPass(); FunctionPass *createFalkorHWPFFixPass(); FunctionPass *createFalkorMarkStridedAccessesPass(); FunctionPass *createAArch64PointerAuthPass(); FunctionPass *createAArch64BranchTargetsPass(); FunctionPass *createAArch64CodeLayoutOptPass(); FunctionPass *createAArch64MIPeepholeOptLegacyPass(); FunctionPass *createAArch64PostCoalescerPass(); FunctionPass *createAArch64CleanupLocalDynamicTLSPass(); FunctionPass *createAArch64CollectLOHPass(); FunctionPass *createSMEPeepholeOptPass(); FunctionPass *createMachineSMEABIPass(CodeGenOptLevel); FunctionPass *createAArch64SRLTDefineSuperRegsPass(); ModulePass *createSVEIntrinsicOptsPass(); InstructionSelector * createAArch64InstructionSelector(const AArch64TargetMachine &, const AArch64Subtarget &, const AArch64RegisterBankInfo &); class AArch64O0PreLegalizerCombinerPass : public OptionalPassInfoMixin { std::unique_ptr RuleConfig; public: AArch64O0PreLegalizerCombinerPass(); AArch64O0PreLegalizerCombinerPass(AArch64O0PreLegalizerCombinerPass &&); ~AArch64O0PreLegalizerCombinerPass(); PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64PreLegalizerCombinerPass : public OptionalPassInfoMixin { std::unique_ptr RuleConfig; public: AArch64PreLegalizerCombinerPass(); AArch64PreLegalizerCombinerPass(AArch64PreLegalizerCombinerPass &&); ~AArch64PreLegalizerCombinerPass(); PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64PostSelectOptimizePass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64PostLegalizerLoweringPass : public OptionalPassInfoMixin { std::unique_ptr RuleConfig; public: AArch64PostLegalizerLoweringPass(); AArch64PostLegalizerLoweringPass(AArch64PostLegalizerLoweringPass &&); ~AArch64PostLegalizerLoweringPass(); PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); MachineFunctionProperties getRequiredProperties() const { return MachineFunctionProperties().set( MachineFunctionProperties::Property::Legalized); } }; FunctionPass *createAArch64O0PreLegalizerCombiner(); FunctionPass *createAArch64PreLegalizerCombiner(); FunctionPass *createAArch64PostLegalizerCombiner(bool IsOptNone); FunctionPass *createAArch64PostLegalizerLowering(); FunctionPass *createAArch64PostSelectOptimize(); FunctionPass *createAArch64StackTaggingPass(bool IsOptNone); FunctionPass *createAArch64StackTaggingPreRALegacyPass(); ModulePass *createAArch64Arm64ECCallLoweringPass(); void initializeAArch64A53Fix835769LegacyPass(PassRegistry &); void initializeAArch64A57FPLoadBalancingLegacyPass(PassRegistry &); void initializeAArch64AdvSIMDScalarLegacyPass(PassRegistry &); void initializeAArch64AsmPrinterPass(PassRegistry &); void initializeAArch64PointerAuthLegacyPass(PassRegistry &); void initializeAArch64BranchTargetsLegacyPass(PassRegistry &); void initializeAArch64CFIFixupPass(PassRegistry&); void initializeAArch64CollectLOHLegacyPass(PassRegistry &); void initializeAArch64CompressJumpTablesLegacyPass(PassRegistry &); void initializeAArch64CondBrTuningPass(PassRegistry &); void initializeAArch64ConditionOptimizerLegacyPass(PassRegistry &); void initializeAArch64ConditionalComparesLegacyPass(PassRegistry &); void initializeAArch64DAGToDAGISelLegacyPass(PassRegistry &); void initializeAArch64DeadRegisterDefinitionsLegacyPass(PassRegistry &); void initializeAArch64ExpandPseudoLegacyPass(PassRegistry &); void initializeAArch64LoadStoreOptLegacyPass(PassRegistry &); void initializeAArch64LowerHomogeneousPrologEpilogLegacyPass(PassRegistry &); void initializeAArch64CodeLayoutOptPass(PassRegistry &); void initializeAArch64MIPeepholeOptLegacyPass(PassRegistry &); void initializeAArch64O0PreLegalizerCombinerLegacyPass(PassRegistry &); void initializeAArch64PostCoalescerLegacyPass(PassRegistry &); void initializeAArch64PostLegalizerCombinerPass(PassRegistry &); void initializeAArch64PostSelectOptimizeLegacyPass(PassRegistry &); void initializeAArch64PostLegalizerLoweringLegacyPass(PassRegistry &); void initializeAArch64PreLegalizerCombinerLegacyPass(PassRegistry &); void initializeAArch64PromoteConstantPass(PassRegistry&); void initializeAArch64RedundantCopyEliminationLegacyPass(PassRegistry &); void initializeAArch64RedundantCondBranchLegacyPass(PassRegistry &); void initializeAArch64SIMDInstrOptLegacyPass(PassRegistry &); void initializeAArch64SLSHardeningLegacyPass(PassRegistry &); void initializeAArch64SpeculationHardeningPass(PassRegistry &); void initializeAArch64StackTaggingPass(PassRegistry &); void initializeAArch64StackTaggingPreRALegacyPass(PassRegistry &); void initializeAArch64StorePairSuppressPass(PassRegistry&); void initializeFalkorHWPFFixPass(PassRegistry&); void initializeFalkorMarkStridedAccessesLegacyPass(PassRegistry&); void initializeLDTLSCleanupPass(PassRegistry &); void initializeSMEPeepholeOptPass(PassRegistry &); void initializeMachineSMEABIPass(PassRegistry &); void initializeAArch64SRLTDefineSuperRegsPass(PassRegistry &); void initializeSVEIntrinsicOptsPass(PassRegistry &); void initializeAArch64Arm64ECCallLoweringPass(PassRegistry &); class AArch64StackTaggingPreRAPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64A57FPLoadBalancingPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64LoadStoreOptPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64A53Fix835769Pass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64BranchTargetsPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64RedundantCondBranchPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64AdvSIMDScalarPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64CollectLOHPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64CompressJumpTablesPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64DeadRegisterDefinitionsPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64ExpandPseudoPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64MIPeepholeOptPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64ConditionOptimizerPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64SIMDInstrOptPass : public OptionalPassInfoMixin { std::map, bool> SIMDInstrTable; std::unordered_map InterlEarlyExit; public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64PointerAuthPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64SLSHardeningPass : public PassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64PostCoalescerPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64RedundantCopyEliminationPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64ConditionalComparesPass : public OptionalPassInfoMixin { public: PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); }; class AArch64LowerHomogeneousPrologEpilogPass : public PassInfoMixin { public: PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); }; } // end namespace llvm #endif