120 const bool GlobalISelFlag =
126 static_cast<unsigned>(CLOpts.enable_global_isel_at_O) &&
139 if (TT.isOSBinFormatMachO())
140 return std::make_unique<AArch64_MachoTargetObjectFile>();
141 if (TT.isOSBinFormatCOFF())
142 return std::make_unique<AArch64_COFFTargetObjectFile>();
144 return std::make_unique<AArch64_ELFTargetObjectFile>();
148 if (CPU.empty() && TT.isArm64e())
154 std::optional<Reloc::Model> RM) {
156 if (TT.isOSDarwin() || TT.isOSWindowsOrUEFI())
168 std::optional<CodeModel::Model> CM,
bool JIT) {
173 "Only small, tiny and large code models are allowed on AArch64");
185 if (JIT && !TT.isOSWindows())
195 std::optional<Reloc::Model>
RM,
196 std::optional<CodeModel::Model> CM,
202 CLOpts(
cl::LibraryOptionsContext::
get<AArch64Options>(
203 Options.MCOptions.LibraryOptions)),
207 if (TT.isOSBinFormatMachO()) {
212 if (this->Options.
TLSSize == 0)
223 const bool TargetSupportsGISel =
228 const bool GlobalISelFlag =
234 if (TargetSupportsGISel && CLOpts.enable_global_isel_at_O != -1 &&
235 (
static_cast<int>(
getOptLevel()) <= CLOpts.enable_global_isel_at_O ||
236 (!GlobalISelFlag && !
Options.EnableGlobalISel))) {
258 return CLOpts.enable_global_isel_at_O;
271 Attribute CPUAttr =
F.getFnAttribute(
"target-cpu");
272 Attribute TuneAttr =
F.getFnAttribute(
"tune-cpu");
273 Attribute FSAttr =
F.getFnAttribute(
"target-features");
278 bool HasMinSize =
F.hasMinSize();
280 bool IsStreaming = CLOpts.force_streaming ||
281 F.hasFnAttribute(
"aarch64_pstate_sm_enabled") ||
282 F.hasFnAttribute(
"aarch64_pstate_sm_body");
283 bool IsStreamingCompatible = CLOpts.force_streaming_compatible ||
284 F.hasFnAttribute(
"aarch64_pstate_sm_compatible");
286 unsigned MinSVEVectorSize = 0;
287 unsigned MaxSVEVectorSize = 0;
288 if (
F.hasFnAttribute(Attribute::VScaleRange)) {
293 MinSVEVectorSize = CLOpts.sve_vector_bits_min;
294 MaxSVEVectorSize = CLOpts.sve_vector_bits_max;
297 assert(MinSVEVectorSize % 128 == 0 &&
298 "SVE requires vector length in multiples of 128!");
299 assert(MaxSVEVectorSize % 128 == 0 &&
300 "SVE requires vector length in multiples of 128!");
301 assert((MaxSVEVectorSize >= MinSVEVectorSize || MaxSVEVectorSize == 0) &&
302 "Minimum SVE vector size should not be larger than its maximum!");
305 if (MaxSVEVectorSize != 0) {
306 MinSVEVectorSize = std::min(MinSVEVectorSize, MaxSVEVectorSize);
307 MaxSVEVectorSize = std::max(MinSVEVectorSize, MaxSVEVectorSize);
317 Key +=
"IsStreaming=";
319 Key +=
"IsStreamingCompatible=";
324 Key +=
"HasMinSize=";
329 I = std::make_unique<AArch64Subtarget>(
330 TargetTriple, CPU, TuneCPU, FS, *
this, isLittle, MinSVEVectorSize,
331 MaxSVEVectorSize, IsStreaming, IsStreamingCompatible, HasMinSize,
332 CLOpts.srlt_mitigate_sr2r);
335 if (IsStreaming && !
I->hasSME())
354 FirstMI->
getOpcode() == AArch64::FORM_TRANSPOSED_REG_TUPLE_X2_PSEUDO ||
355 FirstMI->
getOpcode() == AArch64::FORM_TRANSPOSED_REG_TUPLE_X4_PSEUDO;
366 if (ST.hasSME() && ST.isStreaming())
376 if (ST.hasFusion()) {
395void AArch64leTargetMachine::anchor() { }
403void AArch64beTargetMachine::anchor() { }
415 const AArch64Options &CLOpts;
422 setEnableSinkAndFold(CLOpts.enable_sink_fold);
429 void addIRPasses()
override;
430 bool addPreISel()
override;
431 void addCodeGenPrepare()
override;
432 bool addInstSelector()
override;
433 bool addIRTranslator()
override;
434 void addPreLegalizeMachineIR()
override;
435 bool addLegalizeMachineIR()
override;
436 void addPreRegBankSelect()
override;
437 bool addRegBankSelect()
override;
438 bool addGlobalInstructionSelect()
override;
439 void addMachineSSAOptimization()
override;
440 bool addILPOpts()
override;
441 void addPreRegAlloc()
override;
442 void addPostRewrite()
override;
443 void addPostRegAlloc()
override;
444 void addPreSched2()
override;
445 void addPreEmitPass()
override;
446 void addPostBBSections()
override;
447 void addPreEmitPass2()
override;
448 bool addRegAssignAndRewriteOptimized()
override;
450 std::unique_ptr<CSEConfigBase> getCSEConfig()
const override;
456#define GET_PASS_REGISTRY "AArch64PassRegistry.def"
459 PB.registerLateLoopOptimizationsEPCallback(
465 PB.registerPipelineEarlySimplificationEPCallback(
477 return new AArch64PassConfig(*
this, PM);
480std::unique_ptr<CSEConfigBase> AArch64PassConfig::getCSEConfig()
const {
484void AArch64PassConfig::addIRPasses() {
490 CLOpts.enable_subreg_liveness_tracking &&
491 CLOpts.enable_predicate_as_counter_loop_rewrites)
498 CLOpts.enable_atomic_cfg_tidy)
500 .forwardSwitchCondToPhi(
true)
501 .convertSwitchRangeToICmp(
true)
502 .convertSwitchToLookupTable(
true)
503 .needCanonicalLoops(
false)
504 .hoistCommonInsts(
true)
505 .sinkCommonInsts(
true)));
512 if (CLOpts.enable_loop_data_prefetch)
514 if (CLOpts.enable_falkor_hwpf_fix)
518 if (CLOpts.enable_gep_opt) {
543 CLOpts.enable_sve_shuffle_opts && TM->getTargetTriple().isLittleEndian())
557 if (TM->getTargetTriple().isOSWindows()) {
558 if (TM->getTargetTriple().isWindowsArm64EC())
564 if (TM->Options.JMCInstrument)
569bool AArch64PassConfig::addPreISel() {
577 if (
valueOr(CLOpts.enable_global_merge,
579 bool OnlyOptimizeForSize =
587 bool MergeExternalByDefault = !TM->getTargetTriple().isOSBinFormatMachO();
589 MergeExternalByDefault));
595void AArch64PassConfig::addCodeGenPrepare() {
601bool AArch64PassConfig::addInstSelector() {
606bool AArch64PassConfig::addIRTranslator() {
611void AArch64PassConfig::addPreLegalizeMachineIR() {
612 if (getAArch64TargetMachine().isGlobalISelOptNone()) {
617 if (CLOpts.enable_gisel_ldst_prelegal)
622bool AArch64PassConfig::addLegalizeMachineIR() {
627void AArch64PassConfig::addPreRegBankSelect() {
628 const bool IsGlobalISelOptNone =
629 getAArch64TargetMachine().isGlobalISelOptNone();
630 if (!IsGlobalISelOptNone) {
632 if (CLOpts.enable_gisel_ldst_postlegal)
638bool AArch64PassConfig::addRegBankSelect() {
643bool AArch64PassConfig::addGlobalInstructionSelect() {
645 if (!getAArch64TargetMachine().isGlobalISelOptNone())
651void AArch64PassConfig::addMachineSSAOptimization() {
654 if (TM->getTargetTriple().isOSBinFormatELF() &&
662 CLOpts.enable_aarch64_sme_peephole_opt)
674bool AArch64PassConfig::addILPOpts() {
675 if (CLOpts.enable_condopt)
677 if (CLOpts.enable_ccmp)
679 if (CLOpts.enable_mcr)
681 if (CLOpts.enable_cond_br_tune)
683 if (CLOpts.enable_early_ifcvt)
685 if (CLOpts.enable_stp_suppress)
693void AArch64PassConfig::addPreRegAlloc() {
712void AArch64PassConfig::addPostRewrite() {
713 if (CLOpts.srlt_mitigate_sr2r)
717void AArch64PassConfig::addPostRegAlloc() {
727void AArch64PassConfig::addPreSched2() {
729 if (CLOpts.homogeneous_prolog_epilog)
735 if (CLOpts.enable_ldst_opt)
749 if (CLOpts.enable_falkor_hwpf_fix)
754void AArch64PassConfig::addPreEmitPass() {
759 CLOpts.enable_ldst_opt)
763 CLOpts.enable_copy_propagation)
770 if (TM->getTargetTriple().isOSWindows()) {
778 TM->getTargetTriple().isOSBinFormatMachO())
787void AArch64PassConfig::addPostBBSections() {
790 if (CLOpts.enable_branch_targets)
794 if (CLOpts.enable_branch_relax)
798 CLOpts.enable_compress_jump_tables)
802void AArch64PassConfig::addPreEmitPass2() {
811bool AArch64PassConfig::addRegAssignAndRewriteOptimized() {
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static bool scheduleFormTransposedTupleAdjacentToUsers(const TargetInstrInfo &TII, const TargetSubtargetInfo &TSI, const MachineInstr *FirstMI, const MachineInstr &SecondMI, const SDep *Dep)
static StringRef computeDefaultCPU(const Triple &TT, StringRef CPU)
static CodeModel::Model getEffectiveAArch64CodeModel(const Triple &TT, std::optional< CodeModel::Model > CM, bool JIT)
static std::unique_ptr< TargetLoweringObjectFile > createTLOF(const Triple &TT)
LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAArch64Target()
static Reloc::Model getEffectiveRelocModel()
This file contains the simple types necessary to represent the attributes associated with functions a...
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
Provides analysis for continuously CSEing during GISel passes.
#define LLVM_EXTERNAL_VISIBILITY
const HexagonInstrInfo * TII
This file declares the IRTranslator pass.
PassBuilder PB(Mod->getContext(), Machine, PassOpts->PTO, std::nullopt, &PIC)
This file describes the interface of the MachineFunctionPass responsible for assigning the generic vi...
const GCNTargetMachine & getTM(const GCNSubtarget *STI)
static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")
Target-Independent Code Generator Pass Configuration Options pass.
static std::unique_ptr< TargetLoweringObjectFile > createTLOF()
AArch64FunctionInfo - This class is derived from MachineFunctionInfo and contains private AArch64-spe...
size_t clearLinkerOptimizationHints(const SmallPtrSetImpl< MachineInstr * > &MIs)
size_t clearLinkerOptimizationHints(const SmallPtrSetImpl< MachineInstr * > &MIs) const override
Remove all Linker Optimization Hints (LOH) associated with instructions in MIs and.
StringMap< std::unique_ptr< AArch64Subtarget > > SubtargetMap
MachineFunctionInfo * createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, const TargetSubtargetInfo *STI) const override
Create the target's instance of MachineFunctionInfo.
void registerPassBuilderCallbacks(PassBuilder &PB) override
Allow the target to modify the pass pipeline.
const AArch64Subtarget * getSubtargetImpl() const =delete
yaml::MachineFunctionInfo * createDefaultFuncInfoYAML() const override
Allocate and return a default initialized instance of the YAML representation for the MachineFunction...
ScheduleDAGInstrs * createPostMachineScheduler(MachineSchedContext *C) const override
Similar to createMachineScheduler but used when postRA machine scheduling is enabled.
unsigned getEnableGlobalISelAtO() const
Returns the optimisation level that enables GlobalISel.
const AArch64Subtarget * LastSubtarget
~AArch64TargetMachine() override
std::unique_ptr< TargetLoweringObjectFile > TLOF
yaml::MachineFunctionInfo * convertFuncInfoToYAML(const MachineFunction &MF) const override
Allocate and initialize an instance of the YAML representation of the MachineFunctionInfo.
bool parseMachineFunctionInfo(const yaml::MachineFunctionInfo &, PerFunctionMIParsingState &PFS, SMDiagnostic &Error, SMRange &SourceRange) const override
Parse out the target's MachineFunctionInfo from the YAML reprsentation.
TargetPassConfig * createPassConfig(PassManagerBase &PM) override
Create a pass configuration object to be used by addPassToEmitX methods for generating a pipeline of ...
AttributeSet LastSubtargetAttrs
bool isGlobalISelOptNone() const
This function checks whether the opt level is explicitly set to none, or whether GlobalISel was enabl...
void reset() override
Reset internal state.
AArch64TargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM, CodeGenOptLevel OL, bool JIT, bool IsLittleEndian)
Create an AArch64 architecture model.
ScheduleDAGInstrs * createMachineScheduler(MachineSchedContext *C) const override
Create an instance of ScheduleDAGInstrs to be run within the standard MachineScheduler pass for this ...
TargetTransformInfo getTargetTransformInfo(const Function &F) const override
Return a TargetTransformInfo for a given function.
AArch64beTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM, CodeGenOptLevel OL, bool JIT)
AArch64leTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM, CodeGenOptLevel OL, bool JIT)
uint64_t getZExtValue() const
Get zero extended value.
This class holds the attributes for a particular argument, parameter, function, or return value.
Functions, function parameters, and return types can have attributes to indicate how they should be t...
LLVM_ABI StringRef getValueAsString() const
Return the attribute's value as a string.
bool isValid() const
Return true if the attribute is any kind of attribute.
CodeGenTargetMachineImpl(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOptLevel OL)
This class represents a range of values.
LLVM_ABI APInt getUnsignedMin() const
Return the smallest unsigned value contained in the ConstantRange.
LLVM_ABI APInt getUnsignedMax() const
Return the largest unsigned value contained in the ConstantRange.
Lightweight error class with error context and mandatory checking.
This pass is responsible for selecting generic machine instructions to target-specific instructions.
static void setUseExtended(bool Enable)
This pass implements the localization mechanism described at the top of this file.
Pass to replace calls to ifuncs with indirect calls.
Ty * getInfo()
getInfo - Keep track of various per-function pieces of information for backends that would like to do...
Representation of each machine instruction.
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
This class provides access to building LLVM's passes.
LLVM_ATTRIBUTE_MINSIZE std::enable_if_t<!std::is_same_v< PassT, PassManager > > addPass(PassT &&Pass)
static LLVM_ABI PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
This pass implements the reg bank selector pass used in the GlobalISel pipeline.
Instances of this class encapsulate one diagnostic report, allowing printing to a raw_ostream as a ca...
Represents a range in source code.
A ScheduleDAG for scheduling lists of MachineInstr.
ScheduleDAGMILive is an implementation of ScheduleDAGInstrs that schedules machine instructions while...
ScheduleDAGMI is an implementation of ScheduleDAGInstrs that simply schedules machine instructions ac...
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
Represent a constant reference to a string, i.e.
TargetInstrInfo - Interface to description of machine instruction set.
CodeGenOptLevel getOptLevel() const
Returns the optimization level: None, Less, Default, or Aggressive.
void setSupportsDebugEntryValues(bool Enable)
Triple TargetTriple
Triple string, CPU name, and target feature strings the TargetMachine instance is created with.
const Triple & getTargetTriple() const
void setMachineOutliner(bool Enable)
void setCFIFixup(bool Enable)
void setSupportsDefaultOutlining(bool Enable)
void setGlobalISelAbort(GlobalISelAbortMode Mode)
std::unique_ptr< const MCSubtargetInfo > STI
void setGlobalISel(bool Enable)
CodeModel::Model getCodeModel() const
Returns the code model.
unsigned TLSSize
Bit size of immediate TLS offsets (0 == use the default).
unsigned NoTrapAfterNoreturn
Do not emit a trap instruction for 'unreachable' IR instructions behind noreturn calls,...
unsigned TrapUnreachable
Emit target-specific trap instruction for 'unreachable' IR instructions.
Target-Independent Code Generator Pass Configuration Options.
virtual void addCodeGenPrepare()
Add pass to prepare the LLVM IR for code generation.
virtual void addIRPasses()
Add common target configurable passes that perform LLVM IR to IR transforms following machine indepen...
virtual void addMachineSSAOptimization()
addMachineSSAOptimization - Add standard passes that optimize machine instructions in SSA form.
virtual bool addRegAssignAndRewriteOptimized()
TargetSubtargetInfo - Generic base class for all target subtargets.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
PassManagerBase - An abstract interface to allow code to add passes to a pass manager without having ...
Registers T::Global with cl::ParseCommandLineOptions.
Interfaces for registering analysis passes, producing common pass manager configurations,...
This namespace contains all of the command line option processing machinery.
This is an optimization pass for GlobalISel generic memory operations.
ScheduleDAGMILive * createSchedLive(MachineSchedContext *C)
Create the standard converging machine scheduler.
void initializeAArch64PredicateAsCounterLoopRewritesPass(PassRegistry &)
FunctionPass * createAArch64PreLegalizerCombiner()
void initializeLDTLSCleanupPass(PassRegistry &)
LLVM_ABI FunctionPass * createCFGSimplificationPass(SimplifyCFGOptions Options=SimplifyCFGOptions(), std::function< bool(const Function &)> Ftor=nullptr)
void initializeMachineSMEABIPass(PassRegistry &)
FunctionPass * createAArch64PostSelectOptimize()
void initializeAArch64PTrueCoalescingLegacyPass(PassRegistry &)
FunctionPass * createAArch64ConditionOptimizerLegacyPass()
void initializeAArch64A53Fix835769LegacyPass(PassRegistry &)
LLVM_ABI ModulePass * createJMCInstrumenterPass()
JMC instrument pass.
void initializeAArch64SpeculationHardeningPass(PassRegistry &)
FunctionPass * createAArch64RedundantCopyEliminationPass()
LLVM_ABI std::unique_ptr< ScheduleDAGMutation > createMacroFusionDAGMutation(ArrayRef< MacroFusionPredTy > Predicates, bool BranchOnly=false)
Create a DAG scheduling mutation to pair instructions back to back for instructions that benefit acco...
LLVM_ABI FunctionPass * createTypePromotionLegacyPass()
Create IR Type Promotion pass.
void initializeAArch64StackTaggingPreRALegacyPass(PassRegistry &)
FunctionPass * createMachineSMEABIPass(CodeGenOptLevel)
LLVM_ABI FunctionPass * createEHContGuardTargetsLegacy()
Creates Windows EH Continuation Guard target identification pass.
LLVM_ABI FunctionPass * createSelectOptimizePass()
This pass converts conditional moves to conditional jumps when profitable.
FunctionPass * createAArch64A53Fix835769LegacyPass()
LLVM_ABI Pass * createGlobalMergePass(const TargetMachine *TM, unsigned MaximalOffset, bool OnlyOptimizeForSize=false, bool MergeExternalByDefault=false, bool MergeConstantByDefault=false, bool MergeConstAggressiveByDefault=false)
GlobalMerge - This pass merges internal (by default) globals into structs to enable reuse of a base p...
void initializeAArch64BranchTargetsLegacyPass(PassRegistry &)
LLVM_ABI std::unique_ptr< ScheduleDAGMutation > createLoadClusterDAGMutation(const TargetInstrInfo *TII, bool ReorderWhileClustering=false)
If ReorderWhileClustering is set to true, no attempt will be made to reduce reordering due to store c...
FunctionPass * createAArch64PostCoalescerPass()
void initializeAArch64PromoteConstantPass(PassRegistry &)
FunctionPass * createFalkorMarkStridedAccessesPass()
Target & getTheAArch64beTarget()
FunctionPass * createAArch64PointerAuthPass()
FunctionPass * createFalkorHWPFFixPass()
FunctionPass * createAArch64StackTaggingPass(const AArch64Options &CLOpts, bool IsOptNone)
LLVM_ABI char & PostRASchedulerID
PostRAScheduler - This pass performs post register allocation scheduling.
std::string utostr(uint64_t X, bool isNeg=false)
FunctionPass * createAArch64O0PreLegalizerCombiner()
FunctionPass * createAArch64SLSHardeningLegacyPass()
@ O0
Disable as many optimizations as possible.
void initializeAArch64CollectLOHLegacyPass(PassRegistry &)
Pass * createAArch64PredicateAsCounterLoopRewritesPass()
void initializeAArch64PostLegalizerCombinerLegacyPass(PassRegistry &)
FunctionPass * createAArch64PostLegalizerCombinerLegacy(bool IsOptNone)
LLVM_ABI FunctionPass * createPseudoProbeInserterLegacyPass()
This pass inserts pseudo probe annotation for callsite profiling.
FunctionPass * createAArch64LoadStoreOptLegacyPass()
createAArch64LoadStoreOptimizationPass - returns an instance of the load / store optimization pass.
LLVM_ABI FunctionPass * createCFGuardLongjmpLegacyPass()
Creates CFGuard longjmp target identification pass.
FunctionPass * createAArch64CondBrTuning()
LLVM_ABI std::unique_ptr< CSEConfigBase > getStandardCSEConfigForOpt(CodeGenOptLevel Level)
void initializeAArch64Arm64ECCallLoweringPass(PassRegistry &)
void initializeAArch64SIMDInstrOptLegacyPass(PassRegistry &)
LLVM_ABI char & PostMachineSchedulerID
PostMachineScheduler - This pass schedules machine instructions postRA.
LLVM_ABI char & PeepholeOptimizerLegacyID
PeepholeOptimizer - This pass performs peephole optimizations - like extension and comparison elimina...
LLVM_ABI std::unique_ptr< ScheduleDAGMutation > createStoreClusterDAGMutation(const TargetInstrInfo *TII, bool ReorderWhileClustering=false)
If ReorderWhileClustering is set to true, no attempt will be made to reduce reordering due to store c...
LLVM_ABI Pass * createLICMPass()
FunctionPass * createAArch64A57FPLoadBalancingLegacyPass()
Target & getTheAArch64leTarget()
FunctionPass * createAArch64DeadRegisterDefinitions()
LLVM_ABI char & EarlyIfConverterLegacyID
EarlyIfConverter - This pass performs if-conversion on SSA form by inserting cmov instructions.
void initializeAArch64RedundantCondBranchLegacyPass(PassRegistry &)
void initializeAArch64PostSelectOptimizeLegacyPass(PassRegistry &)
FunctionPass * createSMEPeepholeOptPass()
FunctionPass * createAArch64PostLegalizerLowering()
ThinOrFullLTOPhase
This enumerates the LLVM full LTO or ThinLTO optimization phases.
FunctionPass * createAArch64StackTaggingPreRALegacyPass()
void initializeAArch64CodeLayoutOptPass(PassRegistry &)
FunctionPass * createAArch64PTrueCoalescingLegacyPass()
LLVM_ABI void initializeMachineKCFILegacyPass(PassRegistry &)
PassManager< Loop, LoopAnalysisManager, LoopStandardAnalysisResults &, LPMUpdater & > LoopPassManager
The Loop pass manager.
LLVM_ABI char & MachineCombinerID
This pass performs instruction combining using trace metrics to estimate critical-path and resource d...
void initializeAArch64AsmPrinterPass(PassRegistry &)
FunctionPass * createAArch64MIPeepholeOptLegacyPass()
LLVM_ABI FunctionPass * createUnpackMachineBundlesLegacy(std::function< bool(const MachineFunction &)> Ftor)
static Reloc::Model getEffectiveRelocModel(std::optional< Reloc::Model > RM)
void initializeAArch64AdvSIMDScalarLegacyPass(PassRegistry &)
FunctionPass * createAArch64CompressJumpTablesPass()
Target & getTheAArch64_32Target()
FunctionPass * createAArch64ConditionalCompares()
FunctionPass * createAArch64ExpandPseudoLegacyPass()
Returns an instance of the pseudo instruction expansion pass.
void initializeAArch64PointerAuthLegacyPass(PassRegistry &)
ScheduleDAGMI * createSchedPostRA(MachineSchedContext *C)
Create a generic scheduler with no vreg liveness or DAG mutation passes.
LLVM_ABI char & BranchRelaxationPassID
BranchRelaxation - This pass replaces branches that need to jump further than is supported by a branc...
void initializeFalkorMarkStridedAccessesLegacyPass(PassRegistry &)
void initializeAArch64StackTaggingPass(PassRegistry &)
decltype(auto) get(const PointerIntPair< PointerTy, IntBits, IntType, PtrTraits, Info > &Pair)
void initializeAArch64PostLegalizerLoweringLegacyPass(PassRegistry &)
LLVM_ABI FunctionPass * createKCFIPass()
Lowers KCFI operand bundles for indirect calls.
std::unique_ptr< ScheduleDAGMutation > createAArch64MacroFusionDAGMutation()
Note that you have to add: DAG.addMutation(createAArch64MacroFusionDAGMutation()); to AArch64TargetMa...
LLVM_ABI FunctionPass * createComplexDeinterleavingPass(const TargetMachine *TM)
This pass implements generation of target-specific intrinsics to support handling of complex number a...
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
ModulePass * createAArch64Arm64ECCallLoweringPass()
void initializeAArch64ConditionOptimizerLegacyPass(PassRegistry &)
LLVM_ABI FunctionPass * createLoopDataPrefetchPass()
FunctionPass * createAArch64SIMDInstrOptPass()
Returns an instance of the high cost ASIMD instruction replacement optimization pass.
void initializeSMEPeepholeOptPass(PassRegistry &)
LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)
FunctionPass * createAArch64StorePairSuppressPass()
void initializeAArch64PostCoalescerLegacyPass(PassRegistry &)
FunctionPass * createAArch64CollectLOHPass()
LLVM_ABI ConstantRange getVScaleRange(const Function *F, unsigned BitWidth)
Determine the possible constant range of vscale with the given bit width, based on the vscale_range f...
CodeGenOptLevel
Code generation optimization level.
void initializeAArch64SLSHardeningLegacyPass(PassRegistry &)
LLVM_ABI CGPassBuilderOption getCGPassBuilderOption(const TargetMachine &TM)
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
Target & getTheARM64_32Target()
void initializeAArch64StorePairSuppressPass(PassRegistry &)
LLVM_ABI FunctionPass * createSeparateConstOffsetFromGEPPass(bool LowerGEP=false)
LLVM_ABI FunctionPass * createInterleavedAccessPass()
InterleavedAccess Pass - This pass identifies and matches interleaved memory accesses to target speci...
LLVM_ABI void initializeGlobalISel(PassRegistry &)
Initialize all passes linked into the GlobalISel library.
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 &)
LLVM_ABI FunctionPass * createCFGuardPass()
Insert Control Flow Guard checks on indirect function calls.
void initializeAArch64CondBrTuningPass(PassRegistry &)
LLVM_ABI char & MachinePipelinerID
This pass performs software pipelining on machine instructions.
void initializeAArch64A57FPLoadBalancingLegacyPass(PassRegistry &)
FunctionPass * createAArch64BranchTargetsPass()
Target & getTheARM64Target()
void initializeFalkorHWPFFixPass(PassRegistry &)
void initializeAArch64ExpandPseudoLegacyPass(PassRegistry &)
ModulePass * createAArch64LowerHomogeneousPrologEpilogPass()
LLVM_ABI bool isNonDataDep(const SDep *Dep)
Returns true if Dep is a non-null non-data dependency.
constexpr bool valueOr(BoolOrDefault X, bool Default)
void initializeAArch64SRLTDefineSuperRegsLegacyPass(PassRegistry &)
FunctionPass * createAArch64SRLTDefineSuperRegsLegacyPass()
LLVM_ABI FunctionPass * createAtomicExpandLegacyPass()
AtomicExpandPass - At IR level this pass replace atomic instructions with __atomic_* library calls,...
FunctionPass * createAArch64CleanupLocalDynamicTLSPass()
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
ModulePass * createAArch64PromoteConstantPass()
void initializeAArch64CompressJumpTablesLegacyPass(PassRegistry &)
LLVM_ABI FunctionPass * createEarlyCSEPass(bool UseMemorySSA=false)
LLVM_ABI MachineFunctionPass * createMachineCopyPropagationPass(bool UseCopyInstr)
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 &)
LLVM_ABI FunctionPass * createInterleavedLoadCombinePass()
InterleavedLoadCombines Pass - This pass identifies interleaved loads and combines them into wide loa...
void initializeAArch64LoadStoreOptLegacyPass(PassRegistry &)
LLVM_ABI void reportFatalUsageError(Error Err)
Report a fatal error that does not indicate a bug in LLVM.
cl::boolOrDefault EnableGlobalISelOption
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
static FuncInfoTy * create(BumpPtrAllocator &Allocator, const Function &F, const SubtargetTy *STI)
Factory function: default behavior is to call new using the supplied allocator.
MachineSchedContext provides enough context from the MachineScheduler pass for the target to instanti...
RegisterTargetMachine - Helper template for registering a target machine implementation,...
Targets should override this in a way that mirrors the implementation of llvm::MachineFunctionInfo.