LLVM 24.0.0git
AArch64.h
Go to the documentation of this file.
1//==-- AArch64.h - Top-level interface for AArch64 --------------*- C++ -*-==//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the entry points for global functions defined in the LLVM
10// AArch64 back-end.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64_H
15#define LLVM_LIB_TARGET_AARCH64_AARCH64_H
16
19#include "llvm/ADT/StringMap.h"
24#include "llvm/IR/PassManager.h"
25#include "llvm/Pass.h"
26#include "llvm/PassRegistry.h"
30#include <map>
31#include <memory>
32
33struct AArch64O0PreLegalizerCombinerImplRuleConfig;
34struct AArch64PreLegalizerCombinerImplRuleConfig;
35struct AArch64PostLegalizerCombinerImplRuleConfig;
36struct AArch64PostLegalizerLoweringImplRuleConfig;
38
39namespace llvm {
40
42struct AArch64Options;
45enum class CodeGenOptLevel;
46class FunctionPass;
48class ModulePass;
49
58 CodeGenOptLevel OptLevel);
79
88 const AArch64Subtarget &,
91 : public OptionalPassInfoMixin<AArch64O0PreLegalizerCombinerPass> {
92 std::unique_ptr<AArch64O0PreLegalizerCombinerImplRuleConfig> RuleConfig;
93
94public:
98
101};
102
104 : public OptionalPassInfoMixin<AArch64PreLegalizerCombinerPass> {
105 std::unique_ptr<AArch64PreLegalizerCombinerImplRuleConfig> RuleConfig;
106
107public:
111
114};
115
133
135 : public OptionalPassInfoMixin<AArch64PostSelectOptimizePass> {
136public:
139};
140
158
161FunctionPass *createAArch64PostLegalizerCombinerLegacy(bool IsOptNone);
163FunctionPass *createAArch64PostSelectOptimize();
164FunctionPass *createAArch64StackTaggingPass(const AArch64Options &CLOpts,
165 bool IsOptNone);
168
212
214 : public OptionalPassInfoMixin<AArch64SVEShuffleOptsPass> {
215 const AArch64TargetMachine &TM;
216
217public:
218 explicit AArch64SVEShuffleOptsPass(const AArch64TargetMachine &TM) : TM(TM) {}
221 LPMUpdater &U);
222};
223
225 : public OptionalPassInfoMixin<AArch64StackTaggingPreRAPass> {
226public:
229};
230
232 : public OptionalPassInfoMixin<AArch64A57FPLoadBalancingPass> {
233public:
236};
237
239 : public OptionalPassInfoMixin<AArch64LoadStoreOptPass> {
240public:
243};
244
246 : public OptionalPassInfoMixin<AArch64A53Fix835769Pass> {
247public:
250};
251
253 : public OptionalPassInfoMixin<AArch64BranchTargetsPass> {
254public:
257};
258
260 : public OptionalPassInfoMixin<AArch64RedundantCondBranchPass> {
261public:
264};
265
267 : public OptionalPassInfoMixin<AArch64AdvSIMDScalarPass> {
268public:
271};
272
274 : public OptionalPassInfoMixin<AArch64CollectLOHPass> {
275public:
278};
279
281 : public OptionalPassInfoMixin<AArch64CompressJumpTablesPass> {
282public:
285};
286
287// SelectionDAGISelPass is already a NewPM interface.
292
294 : public OptionalPassInfoMixin<AArch64DeadRegisterDefinitionsPass> {
295public:
298};
299
301 : public OptionalPassInfoMixin<AArch64ExpandPseudoPass> {
302public:
305};
306
308 : public OptionalPassInfoMixin<AArch64MIPeepholeOptPass> {
309public:
312};
313
315 : public OptionalPassInfoMixin<AArch64PTrueCoalescingPass> {
316public:
319};
320
322 : public OptionalPassInfoMixin<AArch64ConditionOptimizerPass> {
323public:
326};
327
329 : public OptionalPassInfoMixin<AArch64SIMDInstrOptPass> {
330 std::map<std::pair<unsigned, std::string>, bool> SIMDInstrTable;
331 StringMap<bool> InterlEarlyExit;
332
333public:
336};
337
339 : public OptionalPassInfoMixin<AArch64PointerAuthPass> {
340public:
343};
344
346 : public RequiredPassInfoMixin<AArch64SLSHardeningPass> {
347 std::unique_ptr<SLSHardeningInserter> Inserter;
348
349public:
353
356};
357
359 : public OptionalPassInfoMixin<AArch64PostCoalescerPass> {
360public:
363};
364
366 : public OptionalPassInfoMixin<AArch64RedundantCopyEliminationPass> {
367public:
370};
371
373 : public OptionalPassInfoMixin<AArch64ConditionalComparesPass> {
374public:
377};
378
380 : public OptionalPassInfoMixin<AArch64SRLTDefineSuperRegsPass> {
381public:
384};
385
387 : public RequiredPassInfoMixin<AArch64LowerHomogeneousPrologEpilogPass> {
388public:
390};
391
392} // end namespace llvm
393
394#endif
This file defines the StringMap class.
#define LLVM_ABI
Definition Compiler.h:211
This header defines various interfaces for pass management in LLVM.
This header provides classes for managing per-loop analyses.
This header provides classes for managing a pipeline of passes over loops in LLVM IR.
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
AArch64DAGToDAGISelPass(AArch64TargetMachine &TM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
AArch64O0PreLegalizerCombinerPass(AArch64O0PreLegalizerCombinerPass &&)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
MachineFunctionProperties getRequiredProperties() const
Definition AArch64.h:128
AArch64PostLegalizerCombinerPass(AArch64PostLegalizerCombinerPass &&)
AArch64PostLegalizerCombinerPass(const AArch64TargetMachine *TM)
AArch64PostLegalizerLoweringPass(AArch64PostLegalizerLoweringPass &&)
MachineFunctionProperties getRequiredProperties() const
Definition AArch64.h:153
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
AArch64PreLegalizerCombinerPass(AArch64PreLegalizerCombinerPass &&)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This class provides the information for the target register banks.
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
AArch64SLSHardeningPass(AArch64SLSHardeningPass &&)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
AArch64SVEShuffleOptsPass(const AArch64TargetMachine &TM)
Definition AArch64.h:218
LLVM_ABI PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR, LPMUpdater &U)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
FunctionPass class - This class is used to implement most global optimizations.
Definition Pass.h:312
This class provides an interface for updating the loop pass manager based on mutations to the loop ne...
Represents a single loop in the control flow graph.
Definition LoopInfo.h:40
Properties which a MachineFunction may have at a given point in time.
MachineFunctionProperties & set(Property P)
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Definition Pass.h:253
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
Pass interface - Implemented by all 'passes'.
Definition Pass.h:97
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
SelectionDAGISelPass(std::unique_ptr< SelectionDAGISel > Selector)
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition StringMap.h:129
This is an optimization pass for GlobalISel generic memory operations.
void initializeAArch64PredicateAsCounterLoopRewritesPass(PassRegistry &)
FunctionPass * createAArch64PreLegalizerCombiner()
void initializeLDTLSCleanupPass(PassRegistry &)
void initializeMachineSMEABIPass(PassRegistry &)
FunctionPass * createAArch64PostSelectOptimize()
void initializeAArch64PTrueCoalescingLegacyPass(PassRegistry &)
FunctionPass * createAArch64ConditionOptimizerLegacyPass()
void initializeAArch64A53Fix835769LegacyPass(PassRegistry &)
void initializeAArch64SpeculationHardeningPass(PassRegistry &)
FunctionPass * createAArch64RedundantCopyEliminationPass()
void initializeAArch64StackTaggingPreRALegacyPass(PassRegistry &)
FunctionPass * createMachineSMEABIPass(CodeGenOptLevel)
FunctionPass * createAArch64A53Fix835769LegacyPass()
void initializeAArch64BranchTargetsLegacyPass(PassRegistry &)
FunctionPass * createAArch64PostCoalescerPass()
void initializeAArch64PromoteConstantPass(PassRegistry &)
FunctionPass * createFalkorMarkStridedAccessesPass()
FunctionPass * createAArch64PointerAuthPass()
FunctionPass * createFalkorHWPFFixPass()
FunctionPass * createAArch64StackTaggingPass(const AArch64Options &CLOpts, bool IsOptNone)
FunctionPass * createAArch64O0PreLegalizerCombiner()
FunctionPass * createAArch64SLSHardeningLegacyPass()
void initializeAArch64CollectLOHLegacyPass(PassRegistry &)
Pass * createAArch64PredicateAsCounterLoopRewritesPass()
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
void initializeAArch64PostLegalizerCombinerLegacyPass(PassRegistry &)
FunctionPass * createAArch64PostLegalizerCombinerLegacy(bool IsOptNone)
FunctionPass * createAArch64LoadStoreOptLegacyPass()
createAArch64LoadStoreOptimizationPass - returns an instance of the load / store optimization pass.
FunctionPass * createAArch64CondBrTuning()
void initializeAArch64Arm64ECCallLoweringPass(PassRegistry &)
void initializeAArch64SIMDInstrOptLegacyPass(PassRegistry &)
FunctionPass * createAArch64A57FPLoadBalancingLegacyPass()
FunctionPass * createAArch64DeadRegisterDefinitions()
AnalysisManager< Loop, LoopStandardAnalysisResults & > LoopAnalysisManager
The loop analysis manager.
void initializeAArch64RedundantCondBranchLegacyPass(PassRegistry &)
void initializeAArch64PostSelectOptimizeLegacyPass(PassRegistry &)
FunctionPass * createSMEPeepholeOptPass()
FunctionPass * createAArch64PostLegalizerLowering()
FunctionPass * createAArch64StackTaggingPreRALegacyPass()
InstructionSelector * createAArch64InstructionSelector(const AArch64TargetMachine &, const AArch64Subtarget &, const AArch64RegisterBankInfo &)
void initializeAArch64CodeLayoutOptPass(PassRegistry &)
FunctionPass * createAArch64PTrueCoalescingLegacyPass()
void initializeAArch64AsmPrinterPass(PassRegistry &)
FunctionPass * createAArch64MIPeepholeOptLegacyPass()
void initializeAArch64AdvSIMDScalarLegacyPass(PassRegistry &)
FunctionPass * createAArch64CompressJumpTablesPass()
FunctionPass * createAArch64ConditionalCompares()
FunctionPass * createAArch64ExpandPseudoLegacyPass()
Returns an instance of the pseudo instruction expansion pass.
void initializeAArch64PointerAuthLegacyPass(PassRegistry &)
void initializeFalkorMarkStridedAccessesLegacyPass(PassRegistry &)
void initializeAArch64StackTaggingPass(PassRegistry &)
void initializeAArch64PostLegalizerLoweringLegacyPass(PassRegistry &)
ModulePass * createAArch64Arm64ECCallLoweringPass()
void initializeAArch64ConditionOptimizerLegacyPass(PassRegistry &)
FunctionPass * createAArch64SIMDInstrOptPass()
Returns an instance of the high cost ASIMD instruction replacement optimization pass.
void initializeSMEPeepholeOptPass(PassRegistry &)
FunctionPass * createAArch64StorePairSuppressPass()
void initializeAArch64PostCoalescerLegacyPass(PassRegistry &)
FunctionPass * createAArch64CollectLOHPass()
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:280
void initializeAArch64SLSHardeningLegacyPass(PassRegistry &)
void initializeAArch64StorePairSuppressPass(PassRegistry &)
void initializeAArch64PreLegalizerCombinerLegacyPass(PassRegistry &)
FunctionPass * createAArch64ISelDag(AArch64TargetMachine &TM, CodeGenOptLevel OptLevel)
createAArch64ISelDag - This pass converts a legalized DAG into a AArch64-specific DAG,...
void initializeSVEShuffleOptsPass(PassRegistry &)
void initializeAArch64LowerHomogeneousPrologEpilogLegacyPass(PassRegistry &)
void initializeAArch64CondBrTuningPass(PassRegistry &)
void initializeAArch64A57FPLoadBalancingLegacyPass(PassRegistry &)
FunctionPass * createAArch64BranchTargetsPass()
void initializeFalkorHWPFFixPass(PassRegistry &)
void initializeAArch64ExpandPseudoLegacyPass(PassRegistry &)
ModulePass * createAArch64LowerHomogeneousPrologEpilogPass()
void initializeAArch64SRLTDefineSuperRegsLegacyPass(PassRegistry &)
FunctionPass * createAArch64SRLTDefineSuperRegsLegacyPass()
FunctionPass * createAArch64CleanupLocalDynamicTLSPass()
ModulePass * createAArch64PromoteConstantPass()
void initializeAArch64CompressJumpTablesLegacyPass(PassRegistry &)
void initializeAArch64RedundantCopyEliminationLegacyPass(PassRegistry &)
Pass * createSVEShuffleOptsPass()
FunctionPass * createAArch64CodeLayoutOptPass()
FunctionPass * createAArch64AdvSIMDScalar()
FunctionPass * createAArch64RedundantCondBranchPass()
void initializeAArch64DAGToDAGISelLegacyPass(PassRegistry &)
FunctionPass * createAArch64SpeculationHardeningPass()
Returns an instance of the pseudo instruction expansion pass.
void initializeAArch64MIPeepholeOptLegacyPass(PassRegistry &)
void initializeAArch64DeadRegisterDefinitionsLegacyPass(PassRegistry &)
void initializeAArch64ConditionalComparesLegacyPass(PassRegistry &)
void initializeAArch64O0PreLegalizerCombinerLegacyPass(PassRegistry &)
void initializeAArch64LoadStoreOptLegacyPass(PassRegistry &)
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
The adaptor from a function pass to a loop pass computes these analyses and makes them available to t...
A CRTP mix-in for passes that can be skipped.
A CRTP mix-in for passes that should not be skipped.