LLVM 24.0.0git
llvm::ARMSubtarget Class Reference

#include "Target/ARM/ARMSubtarget.h"

Inheritance diagram for llvm::ARMSubtarget:
[legend]

Public Types

enum  ARMLdStMultipleTiming { DoubleIssue , DoubleIssueCheckUnalignedAccess , SingleIssue , SingleIssuePlusExtras }
 What kind of timing do load multiple/store multiple instructions have. More...
enum  PushPopSplitVariation { NoSplit , SplitR7 , SplitR11WindowsSEH , SplitR11AAPCSSignRA }
 How the push and pop instructions of callee saved general-purpose registers should be split. More...

Public Member Functions

 ARMSubtarget (const Triple &TT, const std::string &CPU, const std::string &FS, const ARMBaseTargetMachine &TM, bool IsLittle, FloatABI::ABIType FloatABI, ARM::ARMABI ABI, bool MinSize=false, DenormalMode DM=DenormalMode::getIEEE())
 This constructor initializes the data members to match that of the specified triple.
unsigned getMaxInlineSizeThreshold () const
 getMaxInlineSizeThreshold - Returns the maximum memset / memcpy size that still makes it profitable to inline the call.
unsigned getMaxMemcpyTPInlineSizeThreshold () const
 getMaxMemcpyTPInlineSizeThreshold - Returns the maximum size that still makes it profitable to inline a llvm.memcpy as a Tail Predicated loop.
void ParseSubtargetFeatures (StringRef CPU, StringRef TuneCPU, StringRef FS)
 ParseSubtargetFeatures - Parses features string setting specified subtarget options.
ARMSubtargetinitializeSubtargetDependencies (StringRef CPU, StringRef FS)
 initializeSubtargetDependencies - Initializes using a CPU and feature string so that we can use initializer lists for subtarget initialization.
const ARMSelectionDAGInfogetSelectionDAGInfo () const override
const ARMBaseInstrInfogetInstrInfo () const override
const ARMTargetLoweringgetTargetLowering () const override
const ARMFrameLoweringgetFrameLowering () const override
const ARMBaseRegisterInfogetRegisterInfo () const override
const CallLoweringgetCallLowering () const override
InstructionSelectorgetInstructionSelector () const override
const LegalizerInfogetLegalizerInfo () const override
const RegisterBankInfogetRegBankInfo () const override
void initLibcallLoweringInfo (LibcallLoweringInfo &Info) const override
bool hasARMOps () const
bool useNEONForSinglePrecisionFP () const
bool hasVFP2Base () const
bool hasVFP3Base () const
bool hasVFP4Base () const
bool hasFPARMv8Base () const
bool hasAnyDataBarrier () const
bool useMulOps () const
bool useFPVMLx () const
bool useFPVFMx () const
bool useFPVFMx16 () const
bool useFPVFMx64 () const
bool hasBaseDSP () const
bool hasFusion () const
 Return true if the CPU supports any kind of instruction fusion.
const TriplegetTargetTriple () const
FloatABI::ABIType getFloatABI () const
 Returns the floating-point ABI in effect for this subtarget.
bool isTargetHardFloat () const
 Returns true if the subtarget uses the hard floating-point ABI.
bool isAPCS_ABI () const
bool isAAPCS_ABI () const
bool isAAPCS16_ABI () const
bool isReadTPSoft () const
bool isTargetAndroid () const
bool isXRaySupported () const override
bool isROPI () const
bool isRWPI () const
bool useMachineScheduler () const
bool useMachinePipeliner () const
bool hasMinSize () const
bool isThumb1Only () const
bool isThumb2 () const
bool isMClass () const
bool isRClass () const
bool isAClass () const
bool isR9Reserved () const
MCPhysReg getFramePointerReg () const
enum PushPopSplitVariation getPushPopSplitVariation (const MachineFunction &MF) const
bool useStride4VFPs () const
bool useMovt () const
bool supportsTailCall () const
bool allowsUnalignedMem () const
bool restrictIT () const
const std::string & getCPUString () const
bool isLittle () const
bool enableMachineScheduler () const override
 Returns true if machine scheduler should be enabled.
bool enableMachinePipeliner () const override
 Returns true if machine pipeliner should be enabled.
bool useDFAforSMS () const override
bool enablePostRAScheduler () const override
 True for some subtargets at > -O0.
bool enablePostRAMachineScheduler () const override
 True for some subtargets at > -O0.
bool enableSubRegLiveness () const override
 Check whether this subtarget wants to use subregister liveness.
bool useAA () const override
 Enable use of alias analysis during code generation (during MI scheduling, DAGCombine, etc.).
const InstrItineraryDatagetInstrItineraryData () const override
 getInstrItins - Return the instruction itineraries based on subtarget selection.
Align getStackAlignment () const
 getStackAlignment - Returns the minimum alignment known to hold of the stack frame on entry to the function and which must be maintained by every function for this subtarget.
Align getDualLoadStoreAlignment () const
unsigned getMaxInterleaveFactor () const
unsigned getPartialUpdateClearance () const
ARMLdStMultipleTiming getLdStMultipleTiming () const
int getPreISelOperandLatencyAdjustment () const
bool isGVIndirectSymbol (const GlobalValue *GV) const
 True if the GV will be accessed via an indirect symbol.
bool isGVInGOT (const GlobalValue *GV) const
 Returns the constant pool modifier needed to access the GV.
bool useFastISel () const
 True if fast-isel is used.
unsigned getReturnOpcode () const
 Returns the correct return opcode for the current feature set.
bool allowPositionIndependentMovt () const
 Allow movt+movw for PIC global address calculation.
unsigned getPreferBranchLogAlignment () const
unsigned getMVEVectorCostFactor (TargetTransformInfo::TargetCostKind CostKind) const
void getCSRAllocationOrderMask (const MachineFunction &MF, BitVector &Mask) const override
unsigned getGPRAllocationOrder (const MachineFunction &MF) const
bool isCortexA5 () const
bool isCortexA7 () const
bool isCortexA8 () const
bool isCortexA9 () const
bool isCortexA15 () const
bool isSwift () const
bool isCortexM3 () const
bool isCortexM55 () const
bool isCortexM7 () const
bool isCortexM85 () const
bool isLikeA9 () const
bool isCortexR5 () const
bool isKrait () const
bool isTargetDarwin () const
bool isTargetIOS () const
bool isTargetWatchOS () const
bool isTargetWatchABI () const
bool isTargetDriverKit () const
bool isTargetFuchsia () const
bool isTargetLinux () const
bool isTargetNetBSD () const
bool isTargetWindows () const
bool isTargetCOFF () const
bool isTargetELF () const
bool isTargetMachO () const
bool isTargetAEABI () const
bool isTargetGNUAEABI () const
bool isTargetMuslAEABI () const
bool isTargetEHABICompatible () const

Protected Types

enum  ARMProcFamilyEnum { Others }
enum  ARMProcClassEnum { None , AClass , MClass , RClass }
enum  ARMArchEnum

Protected Attributes

ARMProcFamilyEnum ARMProcFamily = Others
 ARMProcFamily - ARM processor family: Cortex-A8, Cortex-A9, and others.
ARMProcClassEnum ARMProcClass = None
 ARMProcClass - ARM processor class: None, AClass, RClass or MClass.
ARMArchEnum ARMArch = ARMv4t
 ARMArch - ARM architecture.
bool UseMulOps = false
 UseMulOps - True if non-microcoded fused integer multiply-add and multiply-subtract instructions should be used.
bool SupportsTailCall = false
 SupportsTailCall - True if the OS supports tail call.
bool RestrictIT = false
 RestrictIT - If true, the subtarget disallows generation of complex IT blocks.
Align stackAlignment = Align(4)
 stackAlignment - The minimum alignment known to hold of the stack frame on entry to the function and which must be maintained by every function.
std::string CPUString
 CPUString - String name of used CPU.
unsigned MaxInterleaveFactor = 1
unsigned PartialUpdateClearance = 0
 Clearance before partial register updates (in number of instructions)
ARMLdStMultipleTiming LdStMultipleTiming = SingleIssue
 What kind of timing do load multiple/store multiple have (double issue, single issue etc).
int PreISelOperandLatencyAdjustment = 2
 The adjustment that we need to apply to get the operand latency from the operand cycle returned by the itinerary data for pre-ISel operands.
unsigned PreferBranchLogAlignment = 0
 What alignment is preferred for loop bodies and functions, in log2(bytes).
unsigned MVEVectorCostFactor = 0
 The cost factor for MVE instructions, representing the multiple beats an.
bool OptMinSize = false
 OptMinSize - True if we're optimising for minimum code size, equal to the function attribute.
bool IsLittle
 IsLittle - The target is Little Endian.
DenormalMode DM
 DM - Denormal mode NEON and VFP RunFast mode are not IEEE 754 compliant, use this field to determine whether to generate NEON/VFP instructions in related function.
Triple TargetTriple
 TargetTriple - What processor and OS we're targeting.
MCSchedModel SchedModel
 SchedModel - Processor specific instruction costs.
InstrItineraryData InstrItins
 Selected instruction itineraries (one entry per itinerary class.)
const TargetOptionsOptions
 Options passed via command line that could influence the target.
const ARMBaseTargetMachineTM
FloatABI::ABIType FloatABIType
 The floating-point ABI in effect for this subtarget.
const ARM::ARMABI ABI
 The ABI in effect.

Detailed Description

Definition at line 49 of file ARMSubtarget.h.

Member Enumeration Documentation

◆ ARMArchEnum

Definition at line 64 of file ARMSubtarget.h.

◆ ARMLdStMultipleTiming

What kind of timing do load multiple/store multiple instructions have.

Enumerator
DoubleIssue 

Can load/store 2 registers/cycle.

DoubleIssueCheckUnalignedAccess 

Can load/store 2 registers/cycle, but needs an extra cycle if the access is not 64-bit aligned.

SingleIssue 

Can load/store 1 register/cycle.

SingleIssuePlusExtras 

Can load/store 1 register/cycle, but needs an extra cycle for address computation and potentially also for register writeback.

Definition at line 72 of file ARMSubtarget.h.

◆ ARMProcClassEnum

Enumerator
None 
AClass 
MClass 
RClass 

Definition at line 57 of file ARMSubtarget.h.

◆ ARMProcFamilyEnum

Enumerator
Others 

Definition at line 51 of file ARMSubtarget.h.

◆ PushPopSplitVariation

How the push and pop instructions of callee saved general-purpose registers should be split.

Enumerator
NoSplit 

All GPRs can be pushed in a single instruction.

push {r0-r12, lr} vpush {d8-d15}

SplitR7 

R7 and LR must be adjacent, because R7 is the frame pointer, and must point to a frame record consisting of the previous frame pointer and the return address.

push {r0-r7, lr} push {r8-r12} vpush {d8-d15} Note that Thumb1 changes this layout when the frame pointer is R11, using a longer sequence of instructions because R11 can't be used by a Thumb1 push instruction. This doesn't currently have a separate enum value, and is handled entriely within Thumb1FrameLowering::emitPrologue.

SplitR11WindowsSEH 

When the stack frame size is not known (because of variable-sized objects or realignment), Windows SEH requires the callee-saved registers to be stored in three regions, with R11 and LR below the floating-point registers.

push {r0-r10, r12} vpush {d8-d15} push {r11, lr}

SplitR11AAPCSSignRA 

When generating AAPCS-compilant frame chains, R11 is the frame pointer, and must be pushed adjacent to the return address (LR).

Normally this isn't a problem, because the only register between them is r12, which is the intra-procedure-call scratch register, so doesn't need to be saved. However, when PACBTI is in use, r12 contains the authentication code, so does need to be saved. This means that we need a separate push for R11 and LR. push {r0-r10, r12} push {r11, lr} vpush {d8-d15}

Definition at line 87 of file ARMSubtarget.h.

Constructor & Destructor Documentation

◆ ARMSubtarget()

ARMSubtarget::ARMSubtarget ( const Triple & TT,
const std::string & CPU,
const std::string & FS,
const ARMBaseTargetMachine & TM,
bool IsLittle,
FloatABI::ABIType FloatABI,
ARM::ARMABI ABI,
bool MinSize = false,
DenormalMode DM = DenormalMode::getIEEE() )

This constructor initializes the data members to match that of the specified triple.

Definition at line 89 of file ARMSubtarget.cpp.

References ABI, CPUString, llvm::createARMInstructionSelector(), DM, FloatABIType, getRegisterInfo(), getTargetLowering(), IsLittle, isThumb(), isThumb1Only(), Options, OptMinSize, TargetTriple, TM, UseFusedMulOps, and UseMulOps.

Referenced by initializeSubtargetDependencies(), and ParseSubtargetFeatures().

Member Function Documentation

◆ allowPositionIndependentMovt()

bool llvm::ARMSubtarget::allowPositionIndependentMovt ( ) const
inline

Allow movt+movw for PIC global address calculation.

ELF does not have GOT relocations for movt+movw. ROPI does not use GOT.

Definition at line 508 of file ARMSubtarget.h.

References isROPI(), and isTargetELF().

◆ allowsUnalignedMem()

bool llvm::ARMSubtarget::allowsUnalignedMem ( ) const
inline

Definition at line 429 of file ARMSubtarget.h.

Referenced by getDualLoadStoreAlignment().

◆ enableMachinePipeliner()

bool ARMSubtarget::enableMachinePipeliner ( ) const
override

Returns true if machine pipeliner should be enabled.

Definition at line 501 of file ARMSubtarget.cpp.

References useMachinePipeliner().

Referenced by llvm::ARMBaseInstrInfo::analyzeBranch().

◆ enableMachineScheduler()

bool ARMSubtarget::enableMachineScheduler ( ) const
override

Returns true if machine scheduler should be enabled.

Definition at line 482 of file ARMSubtarget.cpp.

References hasMinSize(), isMClass(), and useMachineScheduler().

Referenced by enablePostRAMachineScheduler(), and enablePostRAScheduler().

◆ enablePostRAMachineScheduler()

bool ARMSubtarget::enablePostRAMachineScheduler ( ) const
override

True for some subtargets at > -O0.

Definition at line 519 of file ARMSubtarget.cpp.

References enableMachineScheduler(), and isThumb1Only().

◆ enablePostRAScheduler()

bool ARMSubtarget::enablePostRAScheduler ( ) const
override

True for some subtargets at > -O0.

Definition at line 510 of file ARMSubtarget.cpp.

References enableMachineScheduler(), and isThumb1Only().

◆ enableSubRegLiveness()

bool ARMSubtarget::enableSubRegLiveness ( ) const
override

Check whether this subtarget wants to use subregister liveness.

Definition at line 495 of file ARMSubtarget.cpp.

◆ getCallLowering()

const CallLowering * ARMSubtarget::getCallLowering ( ) const
override

Definition at line 119 of file ARMSubtarget.cpp.

◆ getCPUString()

const std::string & llvm::ARMSubtarget::getCPUString ( ) const
inline

Definition at line 433 of file ARMSubtarget.h.

References CPUString.

◆ getCSRAllocationOrderMask()

void ARMSubtarget::getCSRAllocationOrderMask ( const MachineFunction & MF,
BitVector & Mask ) const
override

◆ getDualLoadStoreAlignment()

Align llvm::ARMSubtarget::getDualLoadStoreAlignment ( ) const
inline

Definition at line 469 of file ARMSubtarget.h.

References allowsUnalignedMem().

◆ getFloatABI()

FloatABI::ABIType llvm::ARMSubtarget::getFloatABI ( ) const
inline

Returns the floating-point ABI in effect for this subtarget.

Definition at line 378 of file ARMSubtarget.h.

References FloatABIType.

◆ getFrameLowering()

const ARMFrameLowering * llvm::ARMSubtarget::getFrameLowering ( ) const
inlineoverride

Definition at line 257 of file ARMSubtarget.h.

Referenced by llvm::ThumbRegisterInfo::eliminateFrameIndex().

◆ getFramePointerReg()

◆ getGPRAllocationOrder()

unsigned ARMSubtarget::getGPRAllocationOrder ( const MachineFunction & MF) const

◆ getInstrInfo()

◆ getInstrItineraryData()

const InstrItineraryData * llvm::ARMSubtarget::getInstrItineraryData ( ) const
inlineoverride

getInstrItins - Return the instruction itineraries based on subtarget selection.

Definition at line 459 of file ARMSubtarget.h.

References InstrItins.

◆ getInstructionSelector()

InstructionSelector * ARMSubtarget::getInstructionSelector ( ) const
override

Definition at line 123 of file ARMSubtarget.cpp.

◆ getLdStMultipleTiming()

ARMLdStMultipleTiming llvm::ARMSubtarget::getLdStMultipleTiming ( ) const
inline

Definition at line 477 of file ARMSubtarget.h.

References LdStMultipleTiming.

◆ getLegalizerInfo()

const LegalizerInfo * ARMSubtarget::getLegalizerInfo ( ) const
override

Definition at line 127 of file ARMSubtarget.cpp.

◆ getMaxInlineSizeThreshold()

unsigned llvm::ARMSubtarget::getMaxInlineSizeThreshold ( ) const
inline

getMaxInlineSizeThreshold - Returns the maximum memset / memcpy size that still makes it profitable to inline the call.

Definition at line 227 of file ARMSubtarget.h.

Referenced by llvm::ARMSelectionDAGInfo::EmitTargetCodeForMemcpy(), and shouldGenerateInlineTPLoop().

◆ getMaxInterleaveFactor()

unsigned llvm::ARMSubtarget::getMaxInterleaveFactor ( ) const
inline

Definition at line 473 of file ARMSubtarget.h.

References MaxInterleaveFactor.

◆ getMaxMemcpyTPInlineSizeThreshold()

unsigned llvm::ARMSubtarget::getMaxMemcpyTPInlineSizeThreshold ( ) const
inline

getMaxMemcpyTPInlineSizeThreshold - Returns the maximum size that still makes it profitable to inline a llvm.memcpy as a Tail Predicated loop.

This threshold should only be used for constant size inputs.

Definition at line 235 of file ARMSubtarget.h.

Referenced by shouldGenerateInlineTPLoop().

◆ getMVEVectorCostFactor()

unsigned llvm::ARMSubtarget::getMVEVectorCostFactor ( TargetTransformInfo::TargetCostKind CostKind) const
inline

◆ getPartialUpdateClearance()

unsigned llvm::ARMSubtarget::getPartialUpdateClearance ( ) const
inline

Definition at line 475 of file ARMSubtarget.h.

References PartialUpdateClearance.

◆ getPreferBranchLogAlignment()

unsigned llvm::ARMSubtarget::getPreferBranchLogAlignment ( ) const
inline

Definition at line 512 of file ARMSubtarget.h.

References PreferBranchLogAlignment.

◆ getPreISelOperandLatencyAdjustment()

int llvm::ARMSubtarget::getPreISelOperandLatencyAdjustment ( ) const
inline

Definition at line 481 of file ARMSubtarget.h.

References PreISelOperandLatencyAdjustment.

◆ getPushPopSplitVariation()

◆ getRegBankInfo()

const RegisterBankInfo * ARMSubtarget::getRegBankInfo ( ) const
override

Definition at line 131 of file ARMSubtarget.cpp.

Referenced by llvm::ARMCallLowering::lowerCall().

◆ getRegisterInfo()

const ARMBaseRegisterInfo * llvm::ARMSubtarget::getRegisterInfo ( ) const
inlineoverride

◆ getReturnOpcode()

unsigned llvm::ARMSubtarget::getReturnOpcode ( ) const
inline

Returns the correct return opcode for the current feature set.

Use BX if available to allow mixing thumb/arm code, but fall back to plain mov pc,lr on ARMv4.

Definition at line 497 of file ARMSubtarget.h.

References isThumb().

◆ getSelectionDAGInfo()

const ARMSelectionDAGInfo * llvm::ARMSubtarget::getSelectionDAGInfo ( ) const
inlineoverride

Definition at line 245 of file ARMSubtarget.h.

◆ getStackAlignment()

Align llvm::ARMSubtarget::getStackAlignment ( ) const
inline

getStackAlignment - Returns the minimum alignment known to hold of the stack frame on entry to the function and which must be maintained by every function for this subtarget.

Definition at line 466 of file ARMSubtarget.h.

References stackAlignment.

◆ getTargetLowering()

◆ getTargetTriple()

const Triple & llvm::ARMSubtarget::getTargetTriple ( ) const
inline

Definition at line 345 of file ARMSubtarget.h.

References TargetTriple.

Referenced by getDivRemArgList(), and initLibcallLoweringInfo().

◆ hasAnyDataBarrier()

bool llvm::ARMSubtarget::hasAnyDataBarrier ( ) const
inline

Definition at line 324 of file ARMSubtarget.h.

References isThumb().

◆ hasARMOps()

bool llvm::ARMSubtarget::hasARMOps ( ) const
inline

Definition at line 313 of file ARMSubtarget.h.

Referenced by initLibcallLoweringInfo(), and isXRaySupported().

◆ hasBaseDSP()

bool llvm::ARMSubtarget::hasBaseDSP ( ) const
inline

Definition at line 335 of file ARMSubtarget.h.

References isThumb().

Referenced by AddCombineTo64BitSMLAL16().

◆ hasFPARMv8Base()

bool llvm::ARMSubtarget::hasFPARMv8Base ( ) const
inline

Definition at line 322 of file ARMSubtarget.h.

◆ hasFusion()

bool llvm::ARMSubtarget::hasFusion ( ) const
inline

Return true if the CPU supports any kind of instruction fusion.

Definition at line 343 of file ARMSubtarget.h.

◆ hasMinSize()

bool llvm::ARMSubtarget::hasMinSize ( ) const
inline

◆ hasVFP2Base()

◆ hasVFP3Base()

bool llvm::ARMSubtarget::hasVFP3Base ( ) const
inline

Definition at line 320 of file ARMSubtarget.h.

◆ hasVFP4Base()

bool llvm::ARMSubtarget::hasVFP4Base ( ) const
inline

Definition at line 321 of file ARMSubtarget.h.

Referenced by useFPVFMx().

◆ initializeSubtargetDependencies()

ARMSubtarget & ARMSubtarget::initializeSubtargetDependencies ( StringRef CPU,
StringRef FS )

initializeSubtargetDependencies - Initializes using a CPU and feature string so that we can use initializer lists for subtarget initialization.

Definition at line 74 of file ARMSubtarget.cpp.

References ARMSubtarget().

◆ initLibcallLoweringInfo()

void ARMSubtarget::initLibcallLoweringInfo ( LibcallLoweringInfo & Info) const
override

◆ isAAPCS16_ABI()

bool llvm::ARMSubtarget::isAAPCS16_ABI ( ) const
inline

Definition at line 387 of file ARMSubtarget.h.

References ABI, and llvm::ARM::ARM_ABI_AAPCS16.

◆ isAAPCS_ABI()

bool llvm::ARMSubtarget::isAAPCS_ABI ( ) const
inline

Definition at line 384 of file ARMSubtarget.h.

References ABI, llvm::ARM::ARM_ABI_AAPCS, and llvm::ARM::ARM_ABI_AAPCS16.

◆ isAClass()

bool llvm::ARMSubtarget::isAClass ( ) const
inline

Definition at line 407 of file ARMSubtarget.h.

References AClass, and ARMProcClass.

◆ isAPCS_ABI()

bool llvm::ARMSubtarget::isAPCS_ABI ( ) const
inline

Definition at line 383 of file ARMSubtarget.h.

References ABI, and llvm::ARM::ARM_ABI_APCS.

◆ isCortexA15()

bool llvm::ARMSubtarget::isCortexA15 ( ) const
inline

Definition at line 302 of file ARMSubtarget.h.

References ARMProcFamily.

Referenced by isLikeA9().

◆ isCortexA5()

bool llvm::ARMSubtarget::isCortexA5 ( ) const
inline

These functions are obsolete, please consider adding subtarget features or properties instead of calling them.

Definition at line 298 of file ARMSubtarget.h.

References ARMProcFamily.

◆ isCortexA7()

bool llvm::ARMSubtarget::isCortexA7 ( ) const
inline

Definition at line 299 of file ARMSubtarget.h.

References ARMProcFamily.

Referenced by adjustDefLatency().

◆ isCortexA8()

bool llvm::ARMSubtarget::isCortexA8 ( ) const
inline

Definition at line 300 of file ARMSubtarget.h.

References ARMProcFamily.

Referenced by adjustDefLatency().

◆ isCortexA9()

bool llvm::ARMSubtarget::isCortexA9 ( ) const
inline

Definition at line 301 of file ARMSubtarget.h.

References ARMProcFamily.

Referenced by isLikeA9().

◆ isCortexM3()

bool llvm::ARMSubtarget::isCortexM3 ( ) const
inline

Definition at line 304 of file ARMSubtarget.h.

References ARMProcFamily.

◆ isCortexM55()

bool llvm::ARMSubtarget::isCortexM55 ( ) const
inline

Definition at line 305 of file ARMSubtarget.h.

References ARMProcFamily.

◆ isCortexM7()

bool llvm::ARMSubtarget::isCortexM7 ( ) const
inline

Definition at line 306 of file ARMSubtarget.h.

References ARMProcFamily.

◆ isCortexM85()

bool llvm::ARMSubtarget::isCortexM85 ( ) const
inline

Definition at line 307 of file ARMSubtarget.h.

References ARMProcFamily.

◆ isCortexR5()

bool llvm::ARMSubtarget::isCortexR5 ( ) const
inline

Definition at line 309 of file ARMSubtarget.h.

References ARMProcFamily.

◆ isGVIndirectSymbol()

bool ARMSubtarget::isGVIndirectSymbol ( const GlobalValue * GV) const

True if the GV will be accessed via an indirect symbol.

Definition at line 474 of file ARMSubtarget.cpp.

References TM.

◆ isGVInGOT()

bool ARMSubtarget::isGVInGOT ( const GlobalValue * GV) const

Returns the constant pool modifier needed to access the GV.

Definition at line 478 of file ARMSubtarget.cpp.

References llvm::GlobalValue::isDSOLocal(), isTargetELF(), and TM.

◆ isKrait()

bool llvm::ARMSubtarget::isKrait ( ) const
inline

Definition at line 310 of file ARMSubtarget.h.

References ARMProcFamily.

Referenced by isLikeA9().

◆ isLikeA9()

bool llvm::ARMSubtarget::isLikeA9 ( ) const
inline

Definition at line 308 of file ARMSubtarget.h.

References isCortexA15(), isCortexA9(), and isKrait().

Referenced by adjustDefLatency().

◆ isLittle()

bool llvm::ARMSubtarget::isLittle ( ) const
inline

Definition at line 435 of file ARMSubtarget.h.

References IsLittle.

Referenced by PerformMVEVMULLCombine(), and PerformVMOVRRDCombine().

◆ isMClass()

◆ isR9Reserved()

bool llvm::ARMSubtarget::isR9Reserved ( ) const
inline

◆ isRClass()

bool llvm::ARMSubtarget::isRClass ( ) const
inline

Definition at line 406 of file ARMSubtarget.h.

References ARMProcClass, and RClass.

◆ isReadTPSoft()

bool llvm::ARMSubtarget::isReadTPSoft ( ) const
inline

Definition at line 389 of file ARMSubtarget.h.

◆ isROPI()

bool ARMSubtarget::isROPI ( ) const

◆ isRWPI()

bool ARMSubtarget::isRWPI ( ) const

Definition at line 467 of file ARMSubtarget.cpp.

References llvm::Reloc::ROPI_RWPI, llvm::Reloc::RWPI, and TM.

◆ isSwift()

bool llvm::ARMSubtarget::isSwift ( ) const
inline

Definition at line 303 of file ARMSubtarget.h.

References ARMProcFamily.

Referenced by adjustDefLatency().

◆ isTargetAEABI()

bool llvm::ARMSubtarget::isTargetAEABI ( ) const
inline

Definition at line 364 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetAndroid()

bool llvm::ARMSubtarget::isTargetAndroid ( ) const
inline

Definition at line 393 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetCOFF()

bool llvm::ARMSubtarget::isTargetCOFF ( ) const
inline

Definition at line 360 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetDarwin()

◆ isTargetDriverKit()

bool llvm::ARMSubtarget::isTargetDriverKit ( ) const
inline

Definition at line 354 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetEHABICompatible()

bool llvm::ARMSubtarget::isTargetEHABICompatible ( ) const
inline

Definition at line 372 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetELF()

bool llvm::ARMSubtarget::isTargetELF ( ) const
inline

Definition at line 361 of file ARMSubtarget.h.

References TargetTriple.

Referenced by allowPositionIndependentMovt(), and isGVInGOT().

◆ isTargetFuchsia()

bool llvm::ARMSubtarget::isTargetFuchsia ( ) const
inline

Definition at line 355 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetGNUAEABI()

bool llvm::ARMSubtarget::isTargetGNUAEABI ( ) const
inline

Definition at line 366 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetHardFloat()

bool llvm::ARMSubtarget::isTargetHardFloat ( ) const
inline

Returns true if the subtarget uses the hard floating-point ABI.

Definition at line 381 of file ARMSubtarget.h.

References FloatABIType, and llvm::FloatABI::Hard.

◆ isTargetIOS()

bool llvm::ARMSubtarget::isTargetIOS ( ) const
inline

Definition at line 351 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetLinux()

bool llvm::ARMSubtarget::isTargetLinux ( ) const
inline

Definition at line 356 of file ARMSubtarget.h.

References TargetTriple.

Referenced by useFastISel().

◆ isTargetMachO()

bool llvm::ARMSubtarget::isTargetMachO ( ) const
inline

Definition at line 362 of file ARMSubtarget.h.

References TargetTriple.

Referenced by isR9Reserved(), and useFastISel().

◆ isTargetMuslAEABI()

bool llvm::ARMSubtarget::isTargetMuslAEABI ( ) const
inline

Definition at line 368 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetNetBSD()

bool llvm::ARMSubtarget::isTargetNetBSD ( ) const
inline

Definition at line 357 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetWatchABI()

bool llvm::ARMSubtarget::isTargetWatchABI ( ) const
inline

Definition at line 353 of file ARMSubtarget.h.

References TargetTriple.

Referenced by useStride4VFPs().

◆ isTargetWatchOS()

bool llvm::ARMSubtarget::isTargetWatchOS ( ) const
inline

Definition at line 352 of file ARMSubtarget.h.

References TargetTriple.

◆ isTargetWindows()

bool llvm::ARMSubtarget::isTargetWindows ( ) const
inline

◆ isThumb1Only()

◆ isThumb2()

bool llvm::ARMSubtarget::isThumb2 ( ) const
inline

◆ isXRaySupported()

bool ARMSubtarget::isXRaySupported ( ) const
override

Definition at line 281 of file ARMSubtarget.cpp.

References hasARMOps(), and isTargetWindows().

◆ ParseSubtargetFeatures()

void llvm::ARMSubtarget::ParseSubtargetFeatures ( StringRef CPU,
StringRef TuneCPU,
StringRef FS )

ParseSubtargetFeatures - Parses features string setting specified subtarget options.

Definition of function is auto generated by tblgen.

References ARMSubtarget().

◆ restrictIT()

bool llvm::ARMSubtarget::restrictIT ( ) const
inline

Definition at line 431 of file ARMSubtarget.h.

References RestrictIT.

◆ supportsTailCall()

bool llvm::ARMSubtarget::supportsTailCall ( ) const
inline

Definition at line 427 of file ARMSubtarget.h.

References SupportsTailCall.

◆ useAA()

bool llvm::ARMSubtarget::useAA ( ) const
inlineoverride

Enable use of alias analysis during code generation (during MI scheduling, DAGCombine, etc.).

Definition at line 455 of file ARMSubtarget.h.

◆ useDFAforSMS()

bool ARMSubtarget::useDFAforSMS ( ) const
override

Definition at line 507 of file ARMSubtarget.cpp.

◆ useFastISel()

bool ARMSubtarget::useFastISel ( ) const

True if fast-isel is used.

Definition at line 543 of file ARMSubtarget.cpp.

References ForceFastISel, isTargetLinux(), isTargetMachO(), isThumb(), isThumb1Only(), and TM.

Referenced by llvm::ARM::createFastISel().

◆ useFPVFMx()

bool llvm::ARMSubtarget::useFPVFMx ( ) const
inline

Definition at line 330 of file ARMSubtarget.h.

References hasVFP4Base(), and isTargetDarwin().

Referenced by useFPVFMx16(), and useFPVFMx64().

◆ useFPVFMx16()

bool llvm::ARMSubtarget::useFPVFMx16 ( ) const
inline

Definition at line 333 of file ARMSubtarget.h.

References useFPVFMx().

◆ useFPVFMx64()

bool llvm::ARMSubtarget::useFPVFMx64 ( ) const
inline

Definition at line 334 of file ARMSubtarget.h.

References useFPVFMx().

◆ useFPVMLx()

bool llvm::ARMSubtarget::useFPVMLx ( ) const
inline

Definition at line 329 of file ARMSubtarget.h.

◆ useMachinePipeliner()

bool llvm::ARMSubtarget::useMachinePipeliner ( ) const
inline

Definition at line 401 of file ARMSubtarget.h.

Referenced by enableMachinePipeliner().

◆ useMachineScheduler()

bool llvm::ARMSubtarget::useMachineScheduler ( ) const
inline

Definition at line 400 of file ARMSubtarget.h.

Referenced by enableMachineScheduler().

◆ useMovt()

bool ARMSubtarget::useMovt ( ) const

Definition at line 535 of file ARMSubtarget.cpp.

References isTargetWindows(), and OptMinSize.

Referenced by llvm::ConstantMaterializationCost().

◆ useMulOps()

bool llvm::ARMSubtarget::useMulOps ( ) const
inline

Definition at line 328 of file ARMSubtarget.h.

References UseMulOps.

Referenced by AddCombineTo64bitMLAL().

◆ useNEONForSinglePrecisionFP()

bool llvm::ARMSubtarget::useNEONForSinglePrecisionFP ( ) const
inline

Definition at line 315 of file ARMSubtarget.h.

◆ useStride4VFPs()

bool ARMSubtarget::useStride4VFPs ( ) const

Definition at line 527 of file ARMSubtarget.cpp.

References isTargetWatchABI(), and OptMinSize.

Member Data Documentation

◆ ABI

const ARM::ARMABI llvm::ARMSubtarget::ABI
protected

The ABI in effect.

Definition at line 214 of file ARMSubtarget.h.

Referenced by ARMSubtarget(), isAAPCS16_ABI(), isAAPCS_ABI(), and isAPCS_ABI().

◆ ARMArch

ARMArchEnum llvm::ARMSubtarget::ARMArch = ARMv4t
protected

ARMArch - ARM architecture.

Definition at line 140 of file ARMSubtarget.h.

◆ ARMProcClass

ARMProcClassEnum llvm::ARMSubtarget::ARMProcClass = None
protected

ARMProcClass - ARM processor class: None, AClass, RClass or MClass.

Definition at line 137 of file ARMSubtarget.h.

Referenced by isAClass(), isMClass(), and isRClass().

◆ ARMProcFamily

ARMProcFamilyEnum llvm::ARMSubtarget::ARMProcFamily = Others
protected

ARMProcFamily - ARM processor family: Cortex-A8, Cortex-A9, and others.

Definition at line 134 of file ARMSubtarget.h.

Referenced by isCortexA15(), isCortexA5(), isCortexA7(), isCortexA8(), isCortexA9(), isCortexM3(), isCortexM55(), isCortexM7(), isCortexM85(), isCortexR5(), isKrait(), and isSwift().

◆ CPUString

std::string llvm::ARMSubtarget::CPUString
protected

CPUString - String name of used CPU.

Definition at line 160 of file ARMSubtarget.h.

Referenced by ARMSubtarget(), and getCPUString().

◆ DM

DenormalMode llvm::ARMSubtarget::DM
protected

DM - Denormal mode NEON and VFP RunFast mode are not IEEE 754 compliant, use this field to determine whether to generate NEON/VFP instructions in related function.

Definition at line 194 of file ARMSubtarget.h.

Referenced by ARMSubtarget().

◆ FloatABIType

FloatABI::ABIType llvm::ARMSubtarget::FloatABIType
protected

The floating-point ABI in effect for this subtarget.

Definition at line 211 of file ARMSubtarget.h.

Referenced by ARMSubtarget(), getFloatABI(), and isTargetHardFloat().

◆ InstrItins

InstrItineraryData llvm::ARMSubtarget::InstrItins
protected

Selected instruction itineraries (one entry per itinerary class.)

Definition at line 203 of file ARMSubtarget.h.

Referenced by getInstrItineraryData().

◆ IsLittle

bool llvm::ARMSubtarget::IsLittle
protected

IsLittle - The target is Little Endian.

Definition at line 188 of file ARMSubtarget.h.

Referenced by ARMSubtarget(), and isLittle().

◆ LdStMultipleTiming

ARMLdStMultipleTiming llvm::ARMSubtarget::LdStMultipleTiming = SingleIssue
protected

What kind of timing do load multiple/store multiple have (double issue, single issue etc).

Definition at line 169 of file ARMSubtarget.h.

Referenced by getLdStMultipleTiming().

◆ MaxInterleaveFactor

unsigned llvm::ARMSubtarget::MaxInterleaveFactor = 1
protected

Definition at line 162 of file ARMSubtarget.h.

Referenced by getMaxInterleaveFactor().

◆ MVEVectorCostFactor

unsigned llvm::ARMSubtarget::MVEVectorCostFactor = 0
protected

The cost factor for MVE instructions, representing the multiple beats an.

Definition at line 181 of file ARMSubtarget.h.

Referenced by getMVEVectorCostFactor().

◆ Options

const TargetOptions& llvm::ARMSubtarget::Options
protected

Options passed via command line that could influence the target.

Definition at line 206 of file ARMSubtarget.h.

Referenced by ARMSubtarget().

◆ OptMinSize

bool llvm::ARMSubtarget::OptMinSize = false
protected

OptMinSize - True if we're optimising for minimum code size, equal to the function attribute.

Definition at line 185 of file ARMSubtarget.h.

Referenced by ARMSubtarget(), hasMinSize(), useMovt(), and useStride4VFPs().

◆ PartialUpdateClearance

unsigned llvm::ARMSubtarget::PartialUpdateClearance = 0
protected

Clearance before partial register updates (in number of instructions)

Definition at line 165 of file ARMSubtarget.h.

Referenced by getPartialUpdateClearance().

◆ PreferBranchLogAlignment

unsigned llvm::ARMSubtarget::PreferBranchLogAlignment = 0
protected

What alignment is preferred for loop bodies and functions, in log2(bytes).

Definition at line 176 of file ARMSubtarget.h.

Referenced by getPreferBranchLogAlignment().

◆ PreISelOperandLatencyAdjustment

int llvm::ARMSubtarget::PreISelOperandLatencyAdjustment = 2
protected

The adjustment that we need to apply to get the operand latency from the operand cycle returned by the itinerary data for pre-ISel operands.

Definition at line 173 of file ARMSubtarget.h.

Referenced by getPreISelOperandLatencyAdjustment().

◆ RestrictIT

bool llvm::ARMSubtarget::RestrictIT = false
protected

RestrictIT - If true, the subtarget disallows generation of complex IT blocks.

Definition at line 153 of file ARMSubtarget.h.

Referenced by restrictIT().

◆ SchedModel

MCSchedModel llvm::ARMSubtarget::SchedModel
protected

SchedModel - Processor specific instruction costs.

Definition at line 200 of file ARMSubtarget.h.

◆ stackAlignment

Align llvm::ARMSubtarget::stackAlignment = Align(4)
protected

stackAlignment - The minimum alignment known to hold of the stack frame on entry to the function and which must be maintained by every function.

Definition at line 157 of file ARMSubtarget.h.

Referenced by getStackAlignment().

◆ SupportsTailCall

bool llvm::ARMSubtarget::SupportsTailCall = false
protected

SupportsTailCall - True if the OS supports tail call.

The dynamic linker must be able to synthesize call stubs for interworking between ARM and Thumb.

Definition at line 149 of file ARMSubtarget.h.

Referenced by supportsTailCall().

◆ TargetTriple

◆ TM

const ARMBaseTargetMachine& llvm::ARMSubtarget::TM
protected

Definition at line 208 of file ARMSubtarget.h.

Referenced by ARMSubtarget(), isGVIndirectSymbol(), isGVInGOT(), isROPI(), isRWPI(), and useFastISel().

◆ UseMulOps

bool llvm::ARMSubtarget::UseMulOps = false
protected

UseMulOps - True if non-microcoded fused integer multiply-add and multiply-subtract instructions should be used.

Definition at line 144 of file ARMSubtarget.h.

Referenced by ARMSubtarget(), and useMulOps().


The documentation for this class was generated from the following files: