14 #ifndef LLVM_LIB_TARGET_ARM_ARMSUBTARGET_H
15 #define LLVM_LIB_TARGET_ARM_ARMSUBTARGET_H
33 #define GET_SUBTARGETINFO_HEADER
34 #include "ARMGenSubtargetInfo.inc"
40 class ARMBaseTargetMachine;
263 return InstrInfo.get();
269 return FrameLowering.get();
272 return &InstrInfo->getRegisterInfo();
278 std::unique_ptr<ARMFrameLowering> FrameLowering;
280 std::unique_ptr<ARMBaseInstrInfo> InstrInfo;
283 void initializeEnvironment();
462 #endif // ARMSUBTARGET_H
bool avoidCPSRPartialUpdate() const
unsigned stackAlignment
stackAlignment - The minimum alignment known to hold of the stack frame on entry to the function and ...
Triple TargetTriple
TargetTriple - What processor and OS we're targeting.
bool avoidMOVsShifterOperand() const
bool isOSBinFormatMachO() const
Tests whether the environment is MachO.
unsigned getMispredictionPenalty() const
const std::string & getCPUString() const
bool SlowFPVMLx
SlowFPVMLx - If the VFP2 / NEON instructions are available, indicates whether the FP VML[AS] instruct...
const ARMSelectionDAGInfo * getSelectionDAGInfo() const override
bool isTargetEHABICompatible() const
bool AllowsUnalignedMem
AllowsUnalignedMem - If true, the subtarget allows unaligned memory accesses for some types...
const ARMTargetLowering * getTargetLowering() const override
bool hasT2ExtractPack() const
bool useFastISel() const
True if fast-isel is used.
bool HasVFPv2
HasVFPv2, HasVFPv3, HasVFPv4, HasFPARMv8, HasNEON - Specify what floating point ISAs are supported...
bool HasHardwareDivideInARM
HasHardwareDivideInARM - True if subtarget supports [su]div in ARM mode.
bool isThumb1Only() const
const ARMBaseTargetMachine & TM
bool GenLongCalls
Generate calls via indirect call instructions.
bool SupportsTailCall
SupportsTailCall - True if the OS supports tail call.
bool isOSWindows() const
Tests whether the OS is Windows.
bool UseMulOps
UseMulOps - True if non-microcoded fused integer multiply-add and multiply-subtract instructions shou...
const ARMBaseInstrInfo * getInstrInfo() const override
bool isR9Reserved() const
bool isTargetAEABI() const
bool useSoftFloat() const
bool HasRAS
HasRAS - Some processors perform return stack prediction.
bool isTargetDarwin() const
bool HasZeroCycleZeroing
If true, the instructions "vmov.i32 d0, #0" and "vmov.i32 q0, #0" are particularly effective at zeroi...
bool HasThumb2
HasThumb2 - True if Thumb2 instructions are supported.
bool UnsafeFPMath
Target machine allowed unsafe FP math (such as use of NEON fp)
bool hasMPExtension() const
bool isFPBrccSlow() const
bool isOSLinux() const
Tests whether the OS is Linux.
bool Pref32BitThumb
Pref32BitThumb - If true, codegen would prefer 32-bit Thumb instructions over 16-bit ones...
bool IsLittle
IsLittle - The target is Little Endian.
const Triple & getTargetTriple() const
bool isTargetCOFF() const
bool enableAtomicExpand() const override
bool isOSNaCl() const
Tests whether the OS is NaCl (Native Client)
bool isTargetMachO() const
bool NoARM
NoARM - True if subtarget does not support ARM mode execution.
bool prefers32BitThumb() const
bool hasAnyDataBarrier() const
Itinerary data supplied by a subtarget to be used by a target.
bool HasT2ExtractPack
HasT2ExtractPack - True if subtarget supports thumb2 extract/pack instructions.
bool HasPerfMon
If true, the processor supports the Performance Monitor Extensions.
bool isTargetNetBSD() const
bool isiOS() const
Is this an iOS triple.
bool AvoidMOVsShifterOperand
AvoidMOVsShifterOperand - If true, codegen should avoid using flag setting movs with shifter operand ...
bool HasCRC
HasCRC - if true, processor supports CRC instructions.
bool HasVirtualization
HasVirtualization - True if the subtarget supports the Virtualization extension.
ARMProcFamilyEnum ARMProcFamily
ARMProcFamily - ARM processor family: Cortex-A8, Cortex-A9, and others.
bool RestrictIT
RestrictIT - If true, the subtarget disallows generation of deprecated IT blocks to conform to ARMv8 ...
bool isTargetHardFloat() const
bool supportsTailCall() const
bool UseMovt
UseMovt - True if MOVT / MOVW pairs are used for materialization of 32-bit imms (including global add...
bool hasVirtualization() const
bool HasV4TOps
HasV4TOps, HasV5TOps, HasV5TEOps, HasV6Ops, HasV6MOps, HasV6KOps, HasV6T2Ops, HasV7Ops, HasV8Ops - Specify whether target support specific ARM ISA variants.
bool HasVMLxForwarding
HasVMLxForwarding - If true, NEON has special multiplier accumulator forwarding to allow mul + mla be...
bool HasCrypto
HasCrypto - if true, processor supports Cryptography extensions.
bool Thumb2DSP
Thumb2DSP - If true, the subtarget supports the v7 DSP (saturating arith and such) instructions in Th...
bool hasVMLxForwarding() const
bool hasZeroCycleZeroing() const
bool HasMPExtension
HasMPExtension - True if the subtarget supports Multiprocessing extension (ARMv7 only).
bool useNEONForSinglePrecisionFP() const
const ARMFrameLowering * getFrameLowering() const override
bool isOSBinFormatCOFF() const
Tests whether the OS uses the COFF binary format.
unsigned getStackAlignment() const
getStackAlignment - Returns the minimum alignment known to hold of the stack frame on entry to the fu...
bool hasSinCos() const
This function returns true if the target has sincos() routine in its compiler runtime or math librari...
Triple - Helper class for working with autoconf configuration names.
bool HasFP16
HasFP16 - True if subtarget supports half-precision FP (We support VFP+HF only so far) ...
bool HasTrustZone
HasTrustZone - if true, processor supports TrustZone security extensions.
bool isOSDarwin() const
isOSDarwin - Is this a "Darwin" OS (OS X or iOS).
bool genLongCalls() const
bool InThumbMode
InThumbMode - True if compiling for Thumb, false for ARM.
ARMSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const ARMBaseTargetMachine &TM, bool IsLittle)
This constructor initializes the data members to match that of the specified triple.
bool isTargetNaCl() const
void ParseSubtargetFeatures(StringRef CPU, StringRef FS)
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
bool GVIsIndirectSymbol(const GlobalValue *GV, Reloc::Model RelocM) const
GVIsIndirectSymbol - true if the GV will be accessed via an indirect symbol.
const InstrItineraryData * getInstrItineraryData() const override
getInstrItins - Return the instruction itineraries based on subtarget selection.
bool FPOnlySP
FPOnlySP - If true, the floating point unit only supports single precision.
ARMProcClassEnum ARMProcClass
ARMProcClass - ARM processor class: None, AClass, RClass or MClass.
bool isTargetAndroid() const
bool UseNaClTrap
NaCl TRAP instruction is generated instead of the regular TRAP.
unsigned getMaxInlineSizeThreshold() const
getMaxInlineSizeThreshold - Returns the maximum memset / memcpy size that still makes it profitable t...
MCSchedModel SchedModel
SchedModel - Processor specific instruction costs.
const TargetOptions & Options
Options passed via command line that could influence the target.
ARMSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS)
initializeSubtargetDependencies - Initializes using a CPU and feature string so that we can use initi...
bool UseSoftFloat
UseSoftFloat - True if we're using software floating point features.
bool IsR9Reserved
IsR9Reserved - True if R9 is a not available as general purpose register.
bool isOSBinFormatELF() const
Tests whether the OS uses the ELF binary format.
bool isTargetLinux() const
InstrItineraryData InstrItins
Selected instruction itineraries (one entry per itinerary class.)
bool UseNEONForSinglePrecisionFP
UseNEONForSinglePrecisionFP - if the NEONFP attribute has been specified.
const ARMBaseRegisterInfo * getRegisterInfo() const override
bool allowsUnalignedMem() const
bool useMovt(const MachineFunction &MF) const
EnvironmentType getEnvironment() const
getEnvironment - Get the parsed environment type of this triple.
bool hasTrustZone() const
bool SlowFPBrcc
SlowFPBrcc - True if floating point compare + branch is slow.
bool HasD16
HasD16 - True if subtarget is limited to 16 double precision FP registers for VFPv3.
bool enablePostRAScheduler() const override
True for some subtargets at > -O0.
bool AvoidCPSRPartialUpdate
AvoidCPSRPartialUpdate - If true, codegen would avoid using instructions that partially update CPSR a...
bool hasDataBarrier() const
std::string CPUString
CPUString - String name of used CPU.
bool hasDivideInARMMode() const
StringRef - Represent a constant reference to a string, i.e.
bool HasDataBarrier
HasDataBarrier - True if the subtarget supports DMB / DSB data barrier instructions.
Machine model for scheduling, bundling, and heuristics.
bool hasThumb2DSP() const
bool isTargetWindows() const
bool HasHardwareDivide
HasHardwareDivide - True if subtarget supports [su]div.