|
LLVM 24.0.0git
|
#include "Target/AArch64/AArch64Subtarget.h"
Public Types | |
| enum | ARMProcFamilyEnum : uint8_t { Generic } |
Public Member Functions | |
| AArch64Subtarget (const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS, const TargetMachine &TM, bool LittleEndian, unsigned MinSVEVectorSizeInBitsOverride=0, unsigned MaxSVEVectorSizeInBitsOverride=0, bool IsStreaming=false, bool IsStreamingCompatible=false, bool HasMinSize=false, bool EnableSRLTSubregToRegMitigation=false) | |
| This constructor initializes the data members to match that of the specified triple. | |
| const AArch64Options & | getCLOpts () const |
| const AArch64SelectionDAGInfo * | getSelectionDAGInfo () const override |
| const AArch64FrameLowering * | getFrameLowering () const override |
| const AArch64TargetLowering * | getTargetLowering () const override |
| const AArch64InstrInfo * | getInstrInfo () const override |
| const AArch64RegisterInfo * | getRegisterInfo () const override |
| const CallLowering * | getCallLowering () const override |
| const InlineAsmLowering * | getInlineAsmLowering () const override |
| InstructionSelector * | getInstructionSelector () const override |
| const LegalizerInfo * | getLegalizerInfo () const override |
| const RegisterBankInfo * | getRegBankInfo () const override |
| const Triple & | getTargetTriple () const |
| bool | enableMachineScheduler () const override |
| bool | enablePostRAScheduler () const override |
| bool | enableSubRegLiveness () const override |
| bool | enableMachinePipeliner () const override |
| bool | useDFAforSMS () const override |
| ARMProcFamilyEnum | getProcFamily () const |
| Returns ARM processor family. | |
| bool | isAppleMLike () const |
| Returns true if the processor is an Apple M-series or aligned A-series (A14 or newer). | |
| bool | isXRaySupported () const override |
| bool | isStreaming () const |
| Returns true if the function has a streaming body. | |
| bool | isStreamingCompatible () const |
| Returns true if the function has a streaming-compatible body. | |
| unsigned | getStreamingHazardSize () const |
| Returns the size of memory region that if accessed by both the CPU and the SME unit could result in a hazard. | |
| bool | isNeonAvailable () const |
| Returns true if the target has NEON and the function at runtime is known to have NEON enabled (e.g. | |
| bool | isSVEAvailable () const |
| Returns true if the target has SVE and can use the full range of SVE instructions, for example because it knows the function is known not to be in streaming-SVE mode or when the target has FEAT_FA64 enabled. | |
| bool | isStreamingSVEAvailable () const |
| Returns true if the target has access to the streaming-compatible subset of SVE instructions. | |
| bool | isSVEorStreamingSVEAvailable () const |
| Returns true if the target has access to either the full range of SVE instructions, or the streaming-compatible subset of SVE instructions. | |
| bool | isNonStreamingSVEorSME2Available () const |
| Returns true if the target has access to either the full range of SVE instructions, or the streaming-compatible subset of SVE instructions available to SME2. | |
| unsigned | getMinVectorRegisterBitWidth () const |
| bool | isXRegisterReserved (size_t i) const |
| bool | isXRegisterReservedForRA (size_t i) const |
| unsigned | getNumXRegisterReserved () const |
| bool | isLRReservedForRA () const |
| bool | isXRegCustomCalleeSaved (size_t i) const |
| bool | hasCustomCallingConv () const |
| bool | hasFusion () const |
| Return true if the CPU supports any kind of instruction fusion. | |
| bool | fusesMOVImmPair (unsigned FirstOpc, unsigned FirstShift, unsigned SecondOpc, unsigned SecondShift) const |
| Return true if the subtarget fuses this pair of move immediate instructions. | |
| bool | fusesMOVImmPair (const MachineInstr *FirstMI, const MachineInstr &SecondMI) const |
| Return true if the subtarget fuses this pair of move immediate instructions. | |
| unsigned | getEpilogueVectorizationMinVF () const |
| unsigned | getMaxInterleaveFactor () const |
| unsigned | getVectorInsertExtractBaseCost () const |
| unsigned | getCacheLineSize () const override |
| unsigned | getScatterOverhead () const |
| unsigned | getGatherOverhead () const |
| unsigned | getPrefetchDistance () const override |
| unsigned | getMinPrefetchStride (unsigned NumMemAccesses, unsigned NumStridedMemAccesses, unsigned NumPrefetches, bool HasCall) const override |
| unsigned | getMaxPrefetchIterationsAhead () const override |
| Align | getPrefFunctionAlignment () const |
| Align | getPrefLoopAlignment () const |
| unsigned | getMaxBytesForLoopAlignment () const |
| unsigned | getMaximumJumpTableSize () const |
| unsigned | getMinimumJumpTableEntries () const |
| unsigned | getFixedLoadLatency () const |
| bool | supportsAddressTopByteIgnored () const |
| CPU has TBI (top byte of addresses is ignored during HW address translation) and OS enables it. | |
| bool | isLittleEndian () const |
| bool | isTargetDarwin () const |
| bool | isTargetIOS () const |
| bool | isTargetLinux () const |
| bool | isTargetWindows () const |
| bool | isTargetAndroid () const |
| bool | isTargetFuchsia () const |
| bool | isWindowsArm64EC () const |
| bool | isLFI () const |
| bool | isTargetCOFF () const |
| bool | isTargetELF () const |
| bool | isTargetMachO () const |
| bool | isTargetILP32 () const |
| bool | useAA () const override |
| bool | addrSinkUsingGEPs () const override |
| bool | useSmallAddressing () const |
| bool | isX16X17Safer () const |
| Returns whether the operating system makes it safer to store sensitive values in x16 and x17 as opposed to other registers. | |
| void | ParseSubtargetFeatures (StringRef CPU, StringRef TuneCPU, StringRef FS) |
| ParseSubtargetFeatures - Parses features string setting specified subtarget options. | |
| unsigned | ClassifyGlobalReference (const GlobalValue *GV, const TargetMachine &TM) const |
| ClassifyGlobalReference - Find the target operand flags that describe how a global value should be referenced for the current subtarget. | |
| unsigned | classifyGlobalFunctionReference (const GlobalValue *GV, const TargetMachine &TM) const |
| unsigned char | classifyGlobalFunctionReference (const GlobalValue *GV) const override |
| This function is design to compatible with the function def in other targets and escape build error about the virtual function def in base class TargetSubtargetInfo. | |
| void | overrideSchedPolicy (MachineSchedPolicy &Policy, const SchedRegion &Region) const override |
| void | adjustSchedDependency (SUnit *Def, int DefOpIdx, SUnit *Use, int UseOpIdx, SDep &Dep, const TargetSchedModel *SchedModel) const override |
| bool | enableEarlyIfConversion () const override |
| std::unique_ptr< PBQPRAConstraint > | getCustomPBQPConstraints () const override |
| bool | isCallingConvWin64 (CallingConv::ID CC, bool IsVarArg) const |
| bool | swiftAsyncContextIsDynamicallySet () const |
| Return whether FrameLowering should always set the "extended frame
present" bit in FP, or set it based on a symbol in the runtime. | |
| void | mirFileLoaded (MachineFunction &MF) const override |
| unsigned | getMaxSVEVectorSizeInBits () const |
| unsigned | getMinSVEVectorSizeInBits () const |
| unsigned | getSVEVectorSizeInBits () const |
| unsigned | getSVEPredicateSizeInBits () const |
| bool | useSVEForFixedLengthVectors () const |
| bool | useSVEForFixedLengthVectors (EVT VT) const |
| unsigned | getVScaleForTuning () const |
| TailFoldingOpts | getSVETailFoldingDefaultOpts () const |
| bool | useScalarIncVL () const |
| Returns true to use the addvl/inc/dec instructions, as opposed to separate add + cnt instructions. | |
| bool | enableSRLTSubregToRegMitigation () const |
| AArch64PAuth::AuthCheckMethod | getAuthenticatedLRCheckMethod (const MachineFunction &MF) const |
| Choose a method of checking LR before performing a tail call. | |
| std::optional< uint16_t > | getPtrAuthBlockAddressDiscriminatorIfEnabled (const Function &ParentFn) const |
| Compute the integer discriminator for a given BlockAddress constant, if blockaddress signing is enabled, or std::nullopt otherwise. | |
| bool | enableAggressiveInterleaving () const |
Definition at line 57 of file AArch64Subtarget.h.
| Enumerator | |
|---|---|
| Generic | |
Definition at line 61 of file AArch64Subtarget.h.
| AArch64Subtarget::AArch64Subtarget | ( | const Triple & | TT, |
| StringRef | CPU, | ||
| StringRef | TuneCPU, | ||
| StringRef | FS, | ||
| const TargetMachine & | TM, | ||
| bool | LittleEndian, | ||
| unsigned | MinSVEVectorSizeInBitsOverride = 0, | ||
| unsigned | MaxSVEVectorSizeInBitsOverride = 0, | ||
| bool | IsStreaming = false, | ||
| bool | IsStreamingCompatible = false, | ||
| bool | HasMinSize = false, | ||
| bool | EnableSRLTSubregToRegMitigation = false ) |
This constructor initializes the data members to match that of the specified triple.
Definition at line 297 of file AArch64Subtarget.cpp.
References CallLoweringInfo, const, llvm::StringMap< ValueTy, AllocatorTy >::count(), llvm::createAArch64InstructionSelector(), CustomCallSavedXRegs, EnableSRLTSubregToRegMitigation, EnableSubregLiveness, llvm::from_range, getCLOpts(), getRegisterInfo(), getTargetLowering(), InlineAsmLoweringInfo, InstrInfo, InstSelector, IsLittle, IsStreaming, IsStreamingCompatible, llvm::AArch64::isX18ReservedByDefault(), Legalizer, MaxSVEVectorSizeInBits, MinSVEVectorSizeInBits, RegBankInfo, ReservedRegsForRA, ReserveXRegister, ReserveXRegisterForRA, TargetTriple, TLInfo, and TRI.
|
inlineoverride |
Definition at line 364 of file AArch64Subtarget.h.
References isTargetILP32(), and useAA().
|
override |
Definition at line 469 of file AArch64Subtarget.cpp.
References llvm::TargetSchedModel::computeOperandLatency(), llvm::const_mi_bundle_ops(), llvm::SDep::Data, DefMI, llvm::SDep::getKind(), llvm::SDep::getReg(), llvm::SDep::setLatency(), and UseMI.
|
inlineoverride |
This function is design to compatible with the function def in other targets and escape build error about the virtual function def in base class TargetSubtargetInfo.
Updeate me if AArch64 target need to use it.
Definition at line 402 of file AArch64Subtarget.h.
| unsigned AArch64Subtarget::classifyGlobalFunctionReference | ( | const GlobalValue * | GV, |
| const TargetMachine & | TM ) const |
Definition at line 421 of file AArch64Subtarget.cpp.
References ClassifyGlobalReference(), llvm::dyn_cast(), F, llvm::TargetMachine::getCodeModel(), getTargetTriple(), llvm::GlobalValue::getValueType(), llvm::GlobalValue::hasDLLImportStorageClass(), llvm::GlobalValue::hasExternalLinkage(), llvm::GlobalValue::hasInternalLinkage(), llvm::Type::isFunctionTy(), isTargetMachO(), isWindowsArm64EC(), llvm::CodeModel::Large, llvm::AArch64II::MO_ARM64EC_CALLMANGLE, llvm::AArch64II::MO_DLLIMPORT, llvm::AArch64II::MO_GOT, llvm::AArch64II::MO_NO_FLAG, and llvm::TargetMachine::shouldAssumeDSOLocal().
| unsigned AArch64Subtarget::ClassifyGlobalReference | ( | const GlobalValue * | GV, |
| const TargetMachine & | TM ) const |
ClassifyGlobalReference - Find the target operand flags that describe how a global value should be referenced for the current subtarget.
Find the target operand flags that describe how a global value should be referenced for the current subtarget.
Definition at line 381 of file AArch64Subtarget.cpp.
References llvm::TargetMachine::getCodeModel(), getTargetTriple(), llvm::GlobalValue::getValueType(), llvm::GlobalValue::hasDLLImportStorageClass(), llvm::GlobalValue::hasExternalWeakLinkage(), llvm::isa(), llvm::GlobalValue::isTagged(), isTargetMachO(), llvm::CodeModel::Large, llvm::AArch64II::MO_COFFSTUB, llvm::AArch64II::MO_DLLIMPORT, llvm::AArch64II::MO_GOT, llvm::AArch64II::MO_NC, llvm::AArch64II::MO_NO_FLAG, llvm::AArch64II::MO_TAGGED, llvm::TargetMachine::shouldAssumeDSOLocal(), llvm::CodeModel::Tiny, and useSmallAddressing().
Referenced by classifyGlobalFunctionReference(), and performGlobalAddressCombine().
|
inline |
Definition at line 533 of file AArch64Subtarget.h.
|
override |
Definition at line 508 of file AArch64Subtarget.cpp.
|
override |
Definition at line 591 of file AArch64Subtarget.cpp.
|
inlineoverride |
Definition at line 182 of file AArch64Subtarget.h.
|
inlineoverride |
Definition at line 183 of file AArch64Subtarget.h.
|
inline |
Definition at line 515 of file AArch64Subtarget.h.
References EnableSRLTSubregToRegMitigation.
Referenced by llvm::AArch64RegisterInfo::shouldCoalesce().
|
inlineoverride |
Definition at line 184 of file AArch64Subtarget.h.
References EnableSubregLiveness.
| bool AArch64Subtarget::fusesMOVImmPair | ( | const MachineInstr * | FirstMI, |
| const MachineInstr & | SecondMI ) const |
Return true if the subtarget fuses this pair of move immediate instructions.
The 1st instruction is a wildcard when it is nullptr, which tells whether the 2nd one can be fused at all.
Definition at line 634 of file AArch64Subtarget.cpp.
References fusesMOVImmPairImpl(), getMOVKShiftImm(), and llvm::MachineInstr::getOpcode().
| bool AArch64Subtarget::fusesMOVImmPair | ( | unsigned | FirstOpc, |
| unsigned | FirstShift, | ||
| unsigned | SecondOpc, | ||
| unsigned | SecondShift ) const |
Return true if the subtarget fuses this pair of move immediate instructions.
Definition at line 627 of file AArch64Subtarget.cpp.
References fusesMOVImmPairImpl().
| AArch64PAuth::AuthCheckMethod AArch64Subtarget::getAuthenticatedLRCheckMethod | ( | const MachineFunction & | MF | ) | const |
Choose a method of checking LR before performing a tail call.
Definition at line 561 of file AArch64Subtarget.cpp.
References llvm::MachineFunction::getFunction(), llvm::Function::hasFnAttribute(), llvm::AArch64PAuth::HighBitsNoTBI, and llvm::AArch64PAuth::None.
|
inlineoverride |
Definition at line 309 of file AArch64Subtarget.h.
References CacheLineSize.
|
override |
Definition at line 358 of file AArch64Subtarget.cpp.
References CallLoweringInfo.
|
inline |
Definition at line 156 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), llvm::AArch64FrameLowering::canUseRedZone(), llvm::AArch64SelectionDAGInfo::EmitTargetCodeForMemchr(), llvm::AArch64SelectionDAGInfo::EmitTargetCodeForMemcpy(), llvm::AArch64SelectionDAGInfo::EmitTargetCodeForMemmove(), llvm::AArch64SelectionDAGInfo::EmitTargetCodeForMemset(), enableMultiVectorSpillFill(), getCheckMode(), isOrXorChain(), llvm::AArch64MCInstLower::lowerSymbolOperandELF(), llvm::AArch64FrameLowering::orderFrameObjects(), performSignExtendInRegCombine(), and performSVEAndCombine().
|
override |
Definition at line 526 of file AArch64Subtarget.cpp.
|
inline |
Definition at line 304 of file AArch64Subtarget.h.
References EpilogueVectorizationMinVF.
|
inline |
Definition at line 336 of file AArch64Subtarget.h.
References FixedLoadLatency.
|
inlineoverride |
Definition at line 166 of file AArch64Subtarget.h.
References FrameLowering.
Referenced by llvm::AArch64FunctionInfo::AArch64FunctionInfo().
|
inline |
Definition at line 311 of file AArch64Subtarget.h.
References GatherOverhead.
|
override |
Definition at line 362 of file AArch64Subtarget.cpp.
References InlineAsmLoweringInfo.
|
inlineoverride |
Definition at line 172 of file AArch64Subtarget.h.
References InstrInfo.
Referenced by llvm::AArch64FrameLowering::eliminateCallFramePseudoInstr(), llvm::AArch64FrameLowering::emitPacRetPlusLeafHardening(), getRegisterInfo(), llvm::AArch64CallLowering::lowerCall(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
override |
Definition at line 366 of file AArch64Subtarget.cpp.
References InstSelector.
|
override |
Definition at line 370 of file AArch64Subtarget.cpp.
References Legalizer.
|
inline |
Definition at line 327 of file AArch64Subtarget.h.
References MaxBytesForLoopAlignment.
Referenced by llvm::AArch64TargetLowering::AArch64TargetLowering().
|
inline |
Definition at line 331 of file AArch64Subtarget.h.
References MaxJumpTableSize.
Referenced by llvm::AArch64TargetLowering::AArch64TargetLowering().
|
inline |
Definition at line 307 of file AArch64Subtarget.h.
References MaxInterleaveFactor.
|
inlineoverride |
Definition at line 319 of file AArch64Subtarget.h.
References MaxPrefetchIterationsAhead.
|
inline |
Definition at line 462 of file AArch64Subtarget.h.
References assert(), isSVEorStreamingSVEAvailable(), and MaxSVEVectorSizeInBits.
Referenced by findMoreOptimalIndexType(), and GenerateFixedLengthSVETBL().
|
inline |
Definition at line 332 of file AArch64Subtarget.h.
References MinimumJumpTableEntries.
|
inlineoverride |
Definition at line 313 of file AArch64Subtarget.h.
References MinPrefetchStride.
|
inline |
Definition at line 468 of file AArch64Subtarget.h.
References assert(), isSVEorStreamingSVEAvailable(), and MinSVEVectorSizeInBits.
Referenced by GenerateFixedLengthSVETBL(), optimizeIncrementingWhile(), performFPExtendCombine(), performMSTORECombine(), performUnpackCombine(), and useSVEForFixedLengthVectors().
|
inline |
Definition at line 261 of file AArch64Subtarget.h.
References isNeonAvailable(), isSVEAvailable(), and MinVectorRegisterBitWidth.
|
inline |
Definition at line 273 of file AArch64Subtarget.h.
References llvm::BitVector::count(), ReserveXRegister, and ReserveXRegisterForRA.
|
inlineoverride |
Definition at line 312 of file AArch64Subtarget.h.
References PrefetchDistance.
|
inline |
Definition at line 322 of file AArch64Subtarget.h.
References PrefFunctionAlignment.
Referenced by llvm::AArch64TargetLowering::AArch64TargetLowering().
|
inline |
Definition at line 325 of file AArch64Subtarget.h.
References PrefLoopAlignment.
Referenced by llvm::AArch64TargetLowering::AArch64TargetLowering().
|
inline |
Returns ARM processor family.
Avoid this function! CPU specifics should be kept local to this class and preferably modeled with SubtargetFeatures or properties in initializeProperties().
Definition at line 193 of file AArch64Subtarget.h.
References ARMProcFamily.
| std::optional< uint16_t > AArch64Subtarget::getPtrAuthBlockAddressDiscriminatorIfEnabled | ( | const Function & | ParentFn | ) | const |
Compute the integer discriminator for a given BlockAddress constant, if blockaddress signing is enabled, or std::nullopt otherwise.
Blockaddress signing is controlled by the function attribute "ptrauth-indirect-gotos" on the parent function. Note that this assumes the discriminator is independent of the indirect goto branch site itself, i.e., it's the same for all BlockAddresses in a function.
Definition at line 575 of file AArch64Subtarget.cpp.
References llvm::Value::getName(), llvm::getPointerAuthStableSipHash(), and llvm::Function::hasFnAttribute().
|
override |
Definition at line 374 of file AArch64Subtarget.cpp.
References RegBankInfo.
Referenced by llvm::AArch64CallLowering::lowerCall().
|
inlineoverride |
Definition at line 173 of file AArch64Subtarget.h.
References getInstrInfo(), and llvm::AArch64InstrInfo::getRegisterInfo().
Referenced by AArch64Subtarget(), llvm::AArch64FrameLowering::canUseAsPrologue(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::AArch64RegisterBankInfo::getInstrMapping(), and llvm::AArch64CallLowering::lowerCall().
|
inline |
Definition at line 310 of file AArch64Subtarget.h.
References ScatterOverhead.
|
inlineoverride |
Definition at line 163 of file AArch64Subtarget.h.
References TSInfo.
|
inline |
Returns the size of memory region that if accessed by both the CPU and the SME unit could result in a hazard.
0 = disabled.
Definition at line 223 of file AArch64Subtarget.h.
|
inline |
Definition at line 486 of file AArch64Subtarget.h.
References getSVEVectorSizeInBits().
Referenced by performPredicateLoadCombine().
|
inline |
Definition at line 507 of file AArch64Subtarget.h.
References DefaultSVETFOpts.
|
inline |
Definition at line 476 of file AArch64Subtarget.h.
References assert(), isSVEorStreamingSVEAvailable(), MaxSVEVectorSizeInBits, and MinSVEVectorSizeInBits.
Referenced by getPTrue(), and getSVEPredicateSizeInBits().
|
inlineoverride |
Definition at line 169 of file AArch64Subtarget.h.
References TLInfo.
Referenced by AArch64Subtarget(), llvm::AArch64FrameLowering::canUseAsPrologue(), llvm::AArch64FrameLowering::canUseRedZone(), llvm::AArch64FrameLowering::eliminateCallFramePseudoInstr(), llvm::AArch64SelectionDAGInfo::EmitStreamingCompatibleMemLibCall(), finishStackBlock(), llvm::AArch64RegisterInfo::getCallPreservedMask(), llvm::AArch64RegisterInfo::getDarwinCallPreservedMask(), preferGPRForFPImm(), produceCompactUnwindFrame(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
Definition at line 181 of file AArch64Subtarget.h.
References TargetTriple.
Referenced by classifyGlobalFunctionReference(), ClassifyGlobalReference(), hasELFSignedGOTHelper(), ShouldSignWithBKey(), and swiftAsyncContextIsDynamicallySet().
| unsigned AArch64Subtarget::getVectorInsertExtractBaseCost | ( | ) | const |
Definition at line 51 of file AArch64Subtarget.cpp.
References VectorInsertExtractBaseCost.
|
inline |
Definition at line 505 of file AArch64Subtarget.h.
References VScaleForTuning.
|
inline |
Definition at line 283 of file AArch64Subtarget.h.
References CustomCallSavedXRegs.
Referenced by llvm::AArch64CallLowering::lowerCall().
|
inline |
Return true if the CPU supports any kind of instruction fusion.
Definition at line 286 of file AArch64Subtarget.h.
|
inline |
Returns true if the processor is an Apple M-series or aligned A-series (A14 or newer).
Definition at line 199 of file AArch64Subtarget.h.
References ARMProcFamily.
|
inline |
Definition at line 417 of file AArch64Subtarget.h.
References llvm::CallingConv::C, llvm::CallingConv::Fast, isTargetWindows(), llvm::CallingConv::PreserveNone, llvm::CallingConv::Swift, llvm::CallingConv::SwiftTail, and llvm::CallingConv::Win64.
Referenced by analyzeCallOperands(), and llvm::AArch64RegisterInfo::isArgumentRegister().
|
inline |
Definition at line 351 of file AArch64Subtarget.h.
References TargetTriple.
Referenced by llvm::AArch64RegisterInfo::getStrictlyReservedRegs().
|
inline |
Definition at line 342 of file AArch64Subtarget.h.
References IsLittle.
Referenced by DecodeNEONSplat(), isNVCastToHalfWidthElements(), performExtractVectorEltCombine(), and performNVCASTCombine().
|
inline |
Definition at line 279 of file AArch64Subtarget.h.
Referenced by llvm::AArch64RegisterInfo::getReservedRegs().
|
inline |
Returns true if the target has NEON and the function at runtime is known to have NEON enabled (e.g.
the function is known not to be in streaming-SVE mode, which disables NEON instructions).
Definition at line 231 of file AArch64Subtarget.h.
References isStreaming(), and isStreamingCompatible().
Referenced by llvm::AArch64FrameLowering::canUseRedZone(), foldMaskedShiftToUSHL(), GenerateFixedLengthSVETBL(), getMinVectorRegisterBitWidth(), isEligibleForSmallVectorLoadOpt(), performBuildVectorCombine(), performExtendToBoolVectorLoadCombine(), performIntToFpCombine(), performLegalizedVectorDeinterleaveCombine(), performVectorDeinterleaveCombine(), tryAdvSIMDModImm16(), tryAdvSIMDModImm32(), useSVEForFixedLengthVectors(), and useSVEForFixedLengthVectors().
|
inline |
Returns true if the target has access to either the full range of SVE instructions, or the streaming-compatible subset of SVE instructions available to SME2.
Definition at line 257 of file AArch64Subtarget.h.
References isSVEAvailable(), and isSVEorStreamingSVEAvailable().
|
inline |
Returns true if the function has a streaming body.
Definition at line 216 of file AArch64Subtarget.h.
References IsStreaming.
Referenced by enableMultiVectorSpillFill(), hasSVEMultiVectorOps(), INITIALIZE_PASS(), isNeonAvailable(), isStreamingSVEAvailable(), isSVEAvailable(), and tryToReplaceScalarFPConversionWithSVE().
|
inline |
Returns true if the function has a streaming-compatible body.
Definition at line 219 of file AArch64Subtarget.h.
References IsStreamingCompatible.
Referenced by isNeonAvailable(), isSVEAvailable(), and tryToReplaceScalarFPConversionWithSVE().
|
inline |
Returns true if the target has access to the streaming-compatible subset of SVE instructions.
Definition at line 246 of file AArch64Subtarget.h.
References isStreaming().
Referenced by isSVEorStreamingSVEAvailable().
|
inline |
Returns true if the target has SVE and can use the full range of SVE instructions, for example because it knows the function is known not to be in streaming-SVE mode or when the target has FEAT_FA64 enabled.
Definition at line 239 of file AArch64Subtarget.h.
References isStreaming(), and isStreamingCompatible().
Referenced by foldMaskedShiftToUSHL(), getMinVectorRegisterBitWidth(), and isNonStreamingSVEorSME2Available().
|
inline |
Returns true if the target has access to either the full range of SVE instructions, or the streaming-compatible subset of SVE instructions.
Definition at line 250 of file AArch64Subtarget.h.
References isStreamingSVEAvailable().
Referenced by getMaxSVEVectorSizeInBits(), getMinSVEVectorSizeInBits(), getSVEVectorSizeInBits(), hasSVEMultiVectorOps(), isNonStreamingSVEorSME2Available(), performDUPCombine(), performExtractLastActiveCombine(), performLegalizedVectorDeinterleaveCombine(), performPredicateLoadCombine(), tryToReplaceScalarFPConversionWithSVE(), and useSVEForFixedLengthVectors().
|
inline |
Definition at line 348 of file AArch64Subtarget.h.
References TargetTriple.
|
inline |
Definition at line 353 of file AArch64Subtarget.h.
References TargetTriple.
|
inline |
Definition at line 344 of file AArch64Subtarget.h.
References TargetTriple.
Referenced by CC_AArch64_Custom_Block(), llvm::AArch64RegisterInfo::getCallPreservedMask(), llvm::AArch64RegisterInfo::getDarwinCallPreservedMask(), llvm::AArch64RegisterInfo::getThisReturnPreservedMask(), llvm::AArch64RegisterInfo::isArgumentRegister(), and isX16X17Safer().
|
inline |
Definition at line 354 of file AArch64Subtarget.h.
References TargetTriple.
|
inline |
Definition at line 349 of file AArch64Subtarget.h.
References TargetTriple.
|
inline |
Definition at line 357 of file AArch64Subtarget.h.
References llvm::Triple::GNUILP32, and TargetTriple.
Referenced by addrSinkUsingGEPs(), CC_AArch64_Custom_Block(), and llvm::AArch64RegisterInfo::isArgumentRegister().
|
inline |
Definition at line 345 of file AArch64Subtarget.h.
References TargetTriple.
|
inline |
Definition at line 346 of file AArch64Subtarget.h.
References TargetTriple.
Referenced by llvm::AArch64RegisterInfo::getCustomEHPadPreservedMask().
|
inline |
Definition at line 355 of file AArch64Subtarget.h.
References TargetTriple.
Referenced by CC_AArch64_Custom_Block(), classifyGlobalFunctionReference(), ClassifyGlobalReference(), and produceCompactUnwindFrame().
|
inline |
Definition at line 347 of file AArch64Subtarget.h.
References TargetTriple.
Referenced by llvm::AArch64FunctionInfo::AArch64FunctionInfo(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::AArch64RegisterInfo::isArgumentRegister(), and isCallingConvWin64().
|
inline |
Definition at line 350 of file AArch64Subtarget.h.
References TargetTriple.
Referenced by classifyGlobalFunctionReference(), llvm::AArch64RegisterInfo::explainReservedReg(), llvm::AArch64RegisterInfo::getStrictlyReservedRegs(), and llvm::AArch64CallLowering::lowerCall().
| bool AArch64Subtarget::isX16X17Safer | ( | ) | const |
Returns whether the operating system makes it safer to store sensitive values in x16 and x17 as opposed to other registers.
Definition at line 585 of file AArch64Subtarget.cpp.
References isTargetDarwin().
|
inlineoverride |
Definition at line 213 of file AArch64Subtarget.h.
Definition at line 280 of file AArch64Subtarget.h.
References CustomCallSavedXRegs.
Referenced by llvm::AArch64RegisterInfo::UpdateCustomCalleeSavedRegs(), and llvm::AArch64RegisterInfo::UpdateCustomCallPreservedMask().
Definition at line 271 of file AArch64Subtarget.h.
References ReserveXRegister.
Referenced by llvm::AArch64RegisterInfo::getStrictlyReservedRegs(), llvm::AArch64RegisterInfo::getUserReservedRegs(), llvm::AArch64RegisterInfo::isAnyArgRegReserved(), and llvm::AArch64FunctionInfo::needsShadowCallStackPrologueEpilogue().
Definition at line 272 of file AArch64Subtarget.h.
References ReserveXRegisterForRA.
Referenced by llvm::AArch64RegisterInfo::getReservedRegs().
|
override |
Definition at line 530 of file AArch64Subtarget.cpp.
References llvm::MachineFrameInfo::computeMaxCallFrameSize(), llvm::MachineFunction::getFrameInfo(), and llvm::MachineFrameInfo::isMaxCallFrameSizeComputed().
|
override |
Definition at line 457 of file AArch64Subtarget.cpp.
References llvm::MachineSchedPolicy::DisableLatencyHeuristic, llvm::MachineSchedPolicy::OnlyBottomUp, and llvm::MachineSchedPolicy::OnlyTopDown.
| void llvm::AArch64Subtarget::ParseSubtargetFeatures | ( | StringRef | CPU, |
| StringRef | TuneCPU, | ||
| StringRef | FS ) |
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
Definition of function is auto generated by tblgen.
| bool AArch64Subtarget::supportsAddressTopByteIgnored | ( | ) | const |
CPU has TBI (top byte of addresses is ignored during HW address translation) and OS enables it.
Definition at line 512 of file AArch64Subtarget.cpp.
References TargetTriple.
|
inline |
Return whether FrameLowering should always set the "extended frame present" bit in FP, or set it based on a symbol in the runtime.
Definition at line 435 of file AArch64Subtarget.h.
References llvm::Triple::Darwin, getTargetTriple(), llvm::Triple::IOS, llvm::Triple::MacOSX, llvm::Triple::TvOS, and llvm::Triple::WatchOS.
|
override |
Definition at line 540 of file AArch64Subtarget.cpp.
Referenced by addrSinkUsingGEPs().
|
inlineoverride |
Definition at line 187 of file AArch64Subtarget.h.
| bool AArch64Subtarget::useScalarIncVL | ( | ) | const |
Returns true to use the addvl/inc/dec instructions, as opposed to separate add + cnt instructions.
Definition at line 542 of file AArch64Subtarget.cpp.
References llvm::valueOr().
|
inline |
Definition at line 370 of file AArch64Subtarget.h.
References llvm::CodeModel::Kernel, llvm::CodeModel::Small, and TLInfo.
Referenced by ClassifyGlobalReference().
|
inline |
Definition at line 490 of file AArch64Subtarget.h.
References getMinSVEVectorSizeInBits(), isNeonAvailable(), and isSVEorStreamingSVEAvailable().
Referenced by performFPExtendCombine(), and useSVEForFixedLengthVectors().
Definition at line 498 of file AArch64Subtarget.h.
References llvm::EVT::getFixedSizeInBits(), llvm::EVT::isFixedLengthVector(), isNeonAvailable(), llvm::AArch64::SVEBitsPerBlock, and useSVEForFixedLengthVectors().
|
protected |
ARMProcFamily - ARM processor family: Cortex-A53, Cortex-A57, and others.
Definition at line 70 of file AArch64Subtarget.h.
Referenced by getProcFamily(), and isAppleMLike().
|
protected |
Definition at line 83 of file AArch64Subtarget.h.
Referenced by getCacheLineSize().
|
protected |
GlobalISel related APIs.
Definition at line 127 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and getCallLowering().
|
protected |
Definition at line 104 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), hasCustomCallingConv(), and isXRegCustomCalleeSaved().
|
protected |
Definition at line 114 of file AArch64Subtarget.h.
Referenced by getSVETailFoldingDefaultOpts().
|
protected |
Definition at line 112 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and enableSRLTSubregToRegMitigation().
|
protected |
Definition at line 116 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and enableSubRegLiveness().
|
protected |
Definition at line 80 of file AArch64Subtarget.h.
Referenced by getEpilogueVectorizationMinVF().
|
protected |
Definition at line 95 of file AArch64Subtarget.h.
Referenced by getFixedLoadLatency().
|
protected |
Definition at line 121 of file AArch64Subtarget.h.
Referenced by getFrameLowering().
|
protected |
Definition at line 86 of file AArch64Subtarget.h.
Referenced by getGatherOverhead().
|
protected |
Definition at line 128 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and getInlineAsmLowering().
|
protected |
Definition at line 122 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and getInstrInfo().
|
protected |
Definition at line 129 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and getInstructionSelector().
|
protected |
Definition at line 106 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and isLittleEndian().
|
protected |
Definition at line 108 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and isStreaming().
|
protected |
Definition at line 109 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and isStreamingCompatible().
|
protected |
Definition at line 130 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and getLegalizerInfo().
|
protected |
Definition at line 92 of file AArch64Subtarget.h.
Referenced by getMaxBytesForLoopAlignment().
|
protected |
Definition at line 81 of file AArch64Subtarget.h.
Referenced by getMaxInterleaveFactor().
|
protected |
Definition at line 94 of file AArch64Subtarget.h.
Referenced by getMaximumJumpTableSize().
|
protected |
Definition at line 89 of file AArch64Subtarget.h.
Referenced by getMaxPrefetchIterationsAhead().
|
protected |
Definition at line 111 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), getMaxSVEVectorSizeInBits(), and getSVEVectorSizeInBits().
|
protected |
Definition at line 93 of file AArch64Subtarget.h.
Referenced by getMinimumJumpTableEntries().
|
protected |
Definition at line 88 of file AArch64Subtarget.h.
Referenced by getMinPrefetchStride().
|
protected |
Definition at line 110 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), getMinSVEVectorSizeInBits(), and getSVEVectorSizeInBits().
|
protected |
Definition at line 73 of file AArch64Subtarget.h.
Referenced by getMinVectorRegisterBitWidth().
|
protected |
Definition at line 87 of file AArch64Subtarget.h.
Referenced by getPrefetchDistance().
|
protected |
Definition at line 90 of file AArch64Subtarget.h.
Referenced by getPrefFunctionAlignment().
|
protected |
Definition at line 91 of file AArch64Subtarget.h.
Referenced by getPrefLoopAlignment().
|
protected |
Definition at line 131 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), and getRegBankInfo().
|
protected |
Definition at line 98 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), getNumXRegisterReserved(), and isXRegisterReserved().
|
protected |
Definition at line 101 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), getNumXRegisterReserved(), and isXRegisterReservedForRA().
|
protected |
Definition at line 85 of file AArch64Subtarget.h.
Referenced by getScatterOverhead().
|
protected |
TargetTriple - What processor and OS we're targeting.
Definition at line 119 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), getTargetTriple(), isLFI(), isTargetAndroid(), isTargetCOFF(), isTargetDarwin(), isTargetELF(), isTargetFuchsia(), isTargetILP32(), isTargetIOS(), isTargetLinux(), isTargetMachO(), isTargetWindows(), isWindowsArm64EC(), and supportsAddressTopByteIgnored().
|
protected |
Definition at line 124 of file AArch64Subtarget.h.
Referenced by AArch64Subtarget(), getTargetLowering(), and useSmallAddressing().
|
protected |
Definition at line 123 of file AArch64Subtarget.h.
Referenced by getSelectionDAGInfo().
|
protected |
Definition at line 82 of file AArch64Subtarget.h.
Referenced by getVectorInsertExtractBaseCost().
|
protected |
Definition at line 113 of file AArch64Subtarget.h.
Referenced by getVScaleForTuning().