LLVM 22.0.0git
llvm::HexagonSubtarget Class Reference

#include "Target/Hexagon/HexagonSubtarget.h"

Inheritance diagram for llvm::HexagonSubtarget:
[legend]

Classes

struct  BankConflictMutation
struct  CallMutation
struct  HVXMemLatencyMutation
struct  UsrOverflowMutation

Public Member Functions

 HexagonSubtarget (const Triple &TT, StringRef CPU, StringRef FS, const TargetMachine &TM)
const TriplegetTargetTriple () const
bool isEnvironmentMusl () const
const InstrItineraryDatagetInstrItineraryData () const override
 getInstrItins - Return the instruction itineraries based on subtarget selection.
const HexagonInstrInfogetInstrInfo () const override
const HexagonRegisterInfogetRegisterInfo () const override
const HexagonTargetLoweringgetTargetLowering () const override
const HexagonFrameLoweringgetFrameLowering () const override
const HexagonSelectionDAGInfogetSelectionDAGInfo () const override
HexagonSubtargetinitializeSubtargetDependencies (StringRef CPU, StringRef FS)
void ParseSubtargetFeatures (StringRef CPU, StringRef TuneCPU, StringRef FS)
 ParseSubtargetFeatures - Parses features string setting specified subtarget options.
bool isXRaySupported () const override
bool hasV5Ops () const
bool hasV5OpsOnly () const
bool hasV55Ops () const
bool hasV55OpsOnly () const
bool hasV60Ops () const
bool hasV60OpsOnly () const
bool hasV62Ops () const
bool hasV62OpsOnly () const
bool hasV65Ops () const
bool hasV65OpsOnly () const
bool hasV66Ops () const
bool hasV66OpsOnly () const
bool hasV67Ops () const
bool hasV67OpsOnly () const
bool hasV68Ops () const
bool hasV68OpsOnly () const
bool hasV69Ops () const
bool hasV69OpsOnly () const
bool hasV71Ops () const
bool hasV71OpsOnly () const
bool hasV73Ops () const
bool hasV73OpsOnly () const
bool hasV75Ops () const
bool hasV75OpsOnly () const
bool hasV79Ops () const
bool hasV79OpsOnly () const
bool useHVXV79Ops () const
bool useAudioOps () const
bool useCompound () const
bool useLongCalls () const
bool useMemops () const
bool usePackets () const
bool useNewValueJumps () const
bool useNewValueStores () const
bool useSmallData () const
bool useUnsafeMath () const
bool useZRegOps () const
bool useCabac () const
bool isTinyCore () const
bool isTinyCoreWithDuplex () const
bool useHVXIEEEFPOps () const
bool useHVXQFloatOps () const
bool useHVXFloatingPoint () const
bool useHVXOps () const
bool useHVXV60Ops () const
bool useHVXV62Ops () const
bool useHVXV65Ops () const
bool useHVXV66Ops () const
bool useHVXV67Ops () const
bool useHVXV68Ops () const
bool useHVXV69Ops () const
bool useHVXV71Ops () const
bool useHVXV73Ops () const
bool useHVX128BOps () const
bool useHVX64BOps () const
bool hasMemNoShuf () const
bool hasReservedR19 () const
bool usePredicatedCalls () const
bool noreturnStackElim () const
bool useBSBScheduling () const
bool enableMachineScheduler () const override
bool enableMachineSchedDefaultSched () const override
AntiDepBreakMode getAntiDepBreakMode () const override
bool enablePostRAScheduler () const override
 True if the subtarget should run a scheduler after register allocation.
bool enableSubRegLiveness () const override
const std::string & getCPUString () const
const Hexagon::ArchEnumgetHexagonArchVersion () const
void getPostRAMutations (std::vector< std::unique_ptr< ScheduleDAGMutation > > &Mutations) const override
void getSMSMutations (std::vector< std::unique_ptr< ScheduleDAGMutation > > &Mutations) const override
bool useAA () const override
 Enable use of alias analysis during code generation (during MI scheduling, DAGCombine, etc.).
void adjustSchedDependency (SUnit *Def, int DefOpIdx, SUnit *Use, int UseOpIdx, SDep &Dep, const TargetSchedModel *SchedModel) const override
 Perform target specific adjustments to the latency of a schedule dependency.
unsigned getVectorLength () const
ArrayRef< MVTgetHVXElementTypes () const
bool isHVXElementType (MVT Ty, bool IncludeBool=false) const
bool isHVXVectorType (EVT VecTy, bool IncludeBool=false) const
bool isTypeForHVX (Type *VecTy, bool IncludeBool=false) const
Align getTypeAlignment (MVT Ty) const
unsigned getL1CacheLineSize () const
unsigned getL1PrefetchDistance () const
Intrinsic::ID getIntrinsicId (unsigned Opc) const

Public Attributes

Hexagon::ArchEnum HexagonArchVersion
Hexagon::ArchEnum HexagonHVXVersion = Hexagon::ArchEnum::NoArch
CodeGenOptLevel OptLevel
bool UseBSBScheduling
 True if the target should use Back-Skip-Back scheduling.

Detailed Description

Definition at line 43 of file HexagonSubtarget.h.

Constructor & Destructor Documentation

◆ HexagonSubtarget()

HexagonSubtarget::HexagonSubtarget ( const Triple & TT,
StringRef CPU,
StringRef FS,
const TargetMachine & TM )

Member Function Documentation

◆ adjustSchedDependency()

◆ enableMachineSchedDefaultSched()

bool llvm::HexagonSubtarget::enableMachineSchedDefaultSched ( ) const
inlineoverride

Definition at line 294 of file HexagonSubtarget.h.

◆ enableMachineScheduler()

bool HexagonSubtarget::enableMachineScheduler ( ) const
override

Definition at line 529 of file HexagonSubtarget.cpp.

References DisableHexagonMISched.

◆ enablePostRAScheduler()

bool llvm::HexagonSubtarget::enablePostRAScheduler ( ) const
inlineoverride

True if the subtarget should run a scheduler after register allocation.

Definition at line 301 of file HexagonSubtarget.h.

◆ enableSubRegLiveness()

bool HexagonSubtarget::enableSubRegLiveness ( ) const
override

Definition at line 725 of file HexagonSubtarget.cpp.

◆ getAntiDepBreakMode()

AntiDepBreakMode llvm::HexagonSubtarget::getAntiDepBreakMode ( ) const
inlineoverride

Definition at line 298 of file HexagonSubtarget.h.

◆ getCPUString()

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

Definition at line 305 of file HexagonSubtarget.h.

◆ getFrameLowering()

const HexagonFrameLowering * llvm::HexagonSubtarget::getFrameLowering ( ) const
inlineoverride

◆ getHexagonArchVersion()

◆ getHVXElementTypes()

ArrayRef< MVT > llvm::HexagonSubtarget::getHVXElementTypes ( ) const
inline

Definition at line 338 of file HexagonSubtarget.h.

References llvm::ArrayRef(), useHVXFloatingPoint(), and useHVXV68Ops().

Referenced by isHVXElementType(), and isHVXVectorType().

◆ getInstrInfo()

◆ getInstrItineraryData()

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

getInstrItins - Return the instruction itineraries based on subtarget selection.

Definition at line 121 of file HexagonSubtarget.h.

◆ getIntrinsicId()

Intrinsic::ID HexagonSubtarget::getIntrinsicId ( unsigned Opc) const

Definition at line 727 of file HexagonSubtarget.cpp.

References A(), B(), error, getVectorLength(), llvm_unreachable, Opc, and llvm::sort().

◆ getL1CacheLineSize()

unsigned HexagonSubtarget::getL1CacheLineSize ( ) const

Definition at line 717 of file HexagonSubtarget.cpp.

◆ getL1PrefetchDistance()

unsigned HexagonSubtarget::getL1PrefetchDistance ( ) const

Definition at line 721 of file HexagonSubtarget.cpp.

◆ getPostRAMutations()

void HexagonSubtarget::getPostRAMutations ( std::vector< std::unique_ptr< ScheduleDAGMutation > > & Mutations) const
override

Definition at line 513 of file HexagonSubtarget.cpp.

◆ getRegisterInfo()

const HexagonRegisterInfo * llvm::HexagonSubtarget::getRegisterInfo ( ) const
inlineoverride

◆ getSelectionDAGInfo()

const HexagonSelectionDAGInfo * llvm::HexagonSubtarget::getSelectionDAGInfo ( ) const
inlineoverride

Definition at line 134 of file HexagonSubtarget.h.

◆ getSMSMutations()

void HexagonSubtarget::getSMSMutations ( std::vector< std::unique_ptr< ScheduleDAGMutation > > & Mutations) const
override

Definition at line 520 of file HexagonSubtarget.cpp.

◆ getTargetLowering()

const HexagonTargetLowering * llvm::HexagonSubtarget::getTargetLowering ( ) const
inlineoverride

Definition at line 128 of file HexagonSubtarget.h.

Referenced by isTypeForHVX().

◆ getTargetTriple()

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

Definition at line 114 of file HexagonSubtarget.h.

◆ getTypeAlignment()

Align llvm::HexagonSubtarget::getTypeAlignment ( MVT Ty) const
inline

Definition at line 351 of file HexagonSubtarget.h.

References getVectorLength(), and isHVXVectorType().

◆ getVectorLength()

unsigned llvm::HexagonSubtarget::getVectorLength ( ) const
inline

◆ hasMemNoShuf()

bool llvm::HexagonSubtarget::hasMemNoShuf ( ) const
inline

Definition at line 282 of file HexagonSubtarget.h.

◆ hasReservedR19()

bool llvm::HexagonSubtarget::hasReservedR19 ( ) const
inline

Definition at line 283 of file HexagonSubtarget.h.

Referenced by llvm::HexagonRegisterInfo::getReservedRegs().

◆ hasV55Ops()

bool llvm::HexagonSubtarget::hasV55Ops ( ) const
inline

Definition at line 153 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V55.

◆ hasV55OpsOnly()

bool llvm::HexagonSubtarget::hasV55OpsOnly ( ) const
inline

Definition at line 156 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V55.

◆ hasV5Ops()

bool llvm::HexagonSubtarget::hasV5Ops ( ) const
inline

Definition at line 147 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V5.

◆ hasV5OpsOnly()

bool llvm::HexagonSubtarget::hasV5OpsOnly ( ) const
inline

Definition at line 150 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V5.

◆ hasV60Ops()

bool llvm::HexagonSubtarget::hasV60Ops ( ) const
inline

Definition at line 159 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V60.

Referenced by initializeSubtargetDependencies().

◆ hasV60OpsOnly()

bool llvm::HexagonSubtarget::hasV60OpsOnly ( ) const
inline

Definition at line 162 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V60.

Referenced by cannotCoexistAsymm().

◆ hasV62Ops()

bool llvm::HexagonSubtarget::hasV62Ops ( ) const
inline

Definition at line 165 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V62.

◆ hasV62OpsOnly()

bool llvm::HexagonSubtarget::hasV62OpsOnly ( ) const
inline

Definition at line 168 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V62.

◆ hasV65Ops()

bool llvm::HexagonSubtarget::hasV65Ops ( ) const
inline

◆ hasV65OpsOnly()

bool llvm::HexagonSubtarget::hasV65OpsOnly ( ) const
inline

Definition at line 174 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V65.

◆ hasV66Ops()

bool llvm::HexagonSubtarget::hasV66Ops ( ) const
inline

Definition at line 177 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V66.

◆ hasV66OpsOnly()

bool llvm::HexagonSubtarget::hasV66OpsOnly ( ) const
inline

Definition at line 180 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V66.

◆ hasV67Ops()

bool llvm::HexagonSubtarget::hasV67Ops ( ) const
inline

Definition at line 183 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V67.

◆ hasV67OpsOnly()

bool llvm::HexagonSubtarget::hasV67OpsOnly ( ) const
inline

Definition at line 186 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V67.

◆ hasV68Ops()

bool llvm::HexagonSubtarget::hasV68Ops ( ) const
inline

Definition at line 189 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V68.

Referenced by initializeSubtargetDependencies().

◆ hasV68OpsOnly()

bool llvm::HexagonSubtarget::hasV68OpsOnly ( ) const
inline

Definition at line 192 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V68.

◆ hasV69Ops()

bool llvm::HexagonSubtarget::hasV69Ops ( ) const
inline

Definition at line 195 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V69.

◆ hasV69OpsOnly()

bool llvm::HexagonSubtarget::hasV69OpsOnly ( ) const
inline

Definition at line 198 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V69.

◆ hasV71Ops()

bool llvm::HexagonSubtarget::hasV71Ops ( ) const
inline

Definition at line 201 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V71.

◆ hasV71OpsOnly()

bool llvm::HexagonSubtarget::hasV71OpsOnly ( ) const
inline

Definition at line 204 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V71.

◆ hasV73Ops()

bool llvm::HexagonSubtarget::hasV73Ops ( ) const
inline

Definition at line 207 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V73.

◆ hasV73OpsOnly()

bool llvm::HexagonSubtarget::hasV73OpsOnly ( ) const
inline

Definition at line 210 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V73.

◆ hasV75Ops()

bool llvm::HexagonSubtarget::hasV75Ops ( ) const
inline

Definition at line 213 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V75.

◆ hasV75OpsOnly()

bool llvm::HexagonSubtarget::hasV75OpsOnly ( ) const
inline

Definition at line 216 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V75.

◆ hasV79Ops()

bool llvm::HexagonSubtarget::hasV79Ops ( ) const
inline

Definition at line 219 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V79.

◆ hasV79OpsOnly()

bool llvm::HexagonSubtarget::hasV79OpsOnly ( ) const
inline

Definition at line 222 of file HexagonSubtarget.h.

References getHexagonArchVersion(), and llvm::Hexagon::V79.

◆ initializeSubtargetDependencies()

◆ isEnvironmentMusl()

bool llvm::HexagonSubtarget::isEnvironmentMusl ( ) const
inline

Definition at line 115 of file HexagonSubtarget.h.

References llvm::Triple::Musl.

◆ isHVXElementType()

bool HexagonSubtarget::isHVXElementType ( MVT Ty,
bool IncludeBool = false ) const

Definition at line 170 of file HexagonSubtarget.cpp.

References getHVXElementTypes(), llvm::is_contained(), and useHVXOps().

◆ isHVXVectorType()

◆ isTinyCore()

bool llvm::HexagonSubtarget::isTinyCore ( ) const
inline

Definition at line 241 of file HexagonSubtarget.h.

Referenced by initializeSubtargetDependencies(), and isTinyCoreWithDuplex().

◆ isTinyCoreWithDuplex()

bool llvm::HexagonSubtarget::isTinyCoreWithDuplex ( ) const
inline

Definition at line 242 of file HexagonSubtarget.h.

References isTinyCore().

◆ isTypeForHVX()

◆ isXRaySupported()

bool llvm::HexagonSubtarget::isXRaySupported ( ) const
inlineoverride

Definition at line 145 of file HexagonSubtarget.h.

◆ noreturnStackElim()

bool llvm::HexagonSubtarget::noreturnStackElim ( ) const
inline

Definition at line 286 of file HexagonSubtarget.h.

◆ ParseSubtargetFeatures()

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

ParseSubtargetFeatures - Parses features string setting specified subtarget options.

Definition of function is auto generated by tblgen.

Referenced by initializeSubtargetDependencies().

◆ useAA()

bool HexagonSubtarget::useAA ( ) const
override

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

Definition at line 428 of file HexagonSubtarget.cpp.

References llvm::None, and OptLevel.

◆ useAudioOps()

bool llvm::HexagonSubtarget::useAudioOps ( ) const
inline

Definition at line 229 of file HexagonSubtarget.h.

◆ useBSBScheduling()

bool llvm::HexagonSubtarget::useBSBScheduling ( ) const
inline

Definition at line 288 of file HexagonSubtarget.h.

References UseBSBScheduling.

◆ useCabac()

bool llvm::HexagonSubtarget::useCabac ( ) const
inline

Definition at line 239 of file HexagonSubtarget.h.

◆ useCompound()

bool llvm::HexagonSubtarget::useCompound ( ) const
inline

Definition at line 230 of file HexagonSubtarget.h.

◆ useHVX128BOps()

bool llvm::HexagonSubtarget::useHVX128BOps ( ) const
inline

Definition at line 279 of file HexagonSubtarget.h.

References useHVXOps().

Referenced by getVectorLength().

◆ useHVX64BOps()

bool llvm::HexagonSubtarget::useHVX64BOps ( ) const
inline

Definition at line 280 of file HexagonSubtarget.h.

References useHVXOps().

Referenced by getVectorLength().

◆ useHVXFloatingPoint()

bool llvm::HexagonSubtarget::useHVXFloatingPoint ( ) const
inline

Definition at line 248 of file HexagonSubtarget.h.

Referenced by getHVXElementTypes(), and isTypeForHVX().

◆ useHVXIEEEFPOps()

bool llvm::HexagonSubtarget::useHVXIEEEFPOps ( ) const
inline

Definition at line 244 of file HexagonSubtarget.h.

References useHVXOps().

◆ useHVXOps()

◆ useHVXQFloatOps()

bool llvm::HexagonSubtarget::useHVXQFloatOps ( ) const
inline

Definition at line 245 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V68.

◆ useHVXV60Ops()

bool llvm::HexagonSubtarget::useHVXV60Ops ( ) const
inline

Definition at line 252 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V60.

◆ useHVXV62Ops()

bool llvm::HexagonSubtarget::useHVXV62Ops ( ) const
inline

Definition at line 255 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V62.

◆ useHVXV65Ops()

bool llvm::HexagonSubtarget::useHVXV65Ops ( ) const
inline

Definition at line 258 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V65.

◆ useHVXV66Ops()

bool llvm::HexagonSubtarget::useHVXV66Ops ( ) const
inline

Definition at line 261 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V66.

◆ useHVXV67Ops()

bool llvm::HexagonSubtarget::useHVXV67Ops ( ) const
inline

Definition at line 264 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V67.

◆ useHVXV68Ops()

bool llvm::HexagonSubtarget::useHVXV68Ops ( ) const
inline

◆ useHVXV69Ops()

bool llvm::HexagonSubtarget::useHVXV69Ops ( ) const
inline

Definition at line 270 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V69.

◆ useHVXV71Ops()

bool llvm::HexagonSubtarget::useHVXV71Ops ( ) const
inline

Definition at line 273 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V71.

◆ useHVXV73Ops()

bool llvm::HexagonSubtarget::useHVXV73Ops ( ) const
inline

Definition at line 276 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V73.

◆ useHVXV79Ops()

bool llvm::HexagonSubtarget::useHVXV79Ops ( ) const
inline

Definition at line 225 of file HexagonSubtarget.h.

References HexagonHVXVersion, and llvm::Hexagon::V79.

◆ useLongCalls()

bool llvm::HexagonSubtarget::useLongCalls ( ) const
inline

Definition at line 231 of file HexagonSubtarget.h.

◆ useMemops()

bool llvm::HexagonSubtarget::useMemops ( ) const
inline

Definition at line 232 of file HexagonSubtarget.h.

◆ useNewValueJumps()

bool llvm::HexagonSubtarget::useNewValueJumps ( ) const
inline

Definition at line 234 of file HexagonSubtarget.h.

◆ useNewValueStores()

bool llvm::HexagonSubtarget::useNewValueStores ( ) const
inline

Definition at line 235 of file HexagonSubtarget.h.

◆ usePackets()

bool llvm::HexagonSubtarget::usePackets ( ) const
inline

Definition at line 233 of file HexagonSubtarget.h.

◆ usePredicatedCalls()

bool HexagonSubtarget::usePredicatedCalls ( ) const

Definition at line 535 of file HexagonSubtarget.cpp.

References EnablePredicatedCalls.

◆ useSmallData()

bool llvm::HexagonSubtarget::useSmallData ( ) const
inline

Definition at line 236 of file HexagonSubtarget.h.

◆ useUnsafeMath()

bool llvm::HexagonSubtarget::useUnsafeMath ( ) const
inline

Definition at line 237 of file HexagonSubtarget.h.

◆ useZRegOps()

bool llvm::HexagonSubtarget::useZRegOps ( ) const
inline

Definition at line 238 of file HexagonSubtarget.h.

Member Data Documentation

◆ HexagonArchVersion

Hexagon::ArchEnum llvm::HexagonSubtarget::HexagonArchVersion

Definition at line 71 of file HexagonSubtarget.h.

Referenced by getHexagonArchVersion(), and initializeSubtargetDependencies().

◆ HexagonHVXVersion

◆ OptLevel

CodeGenOptLevel llvm::HexagonSubtarget::OptLevel

Definition at line 73 of file HexagonSubtarget.h.

Referenced by HexagonSubtarget(), and useAA().

◆ UseBSBScheduling

bool llvm::HexagonSubtarget::UseBSBScheduling

True if the target should use Back-Skip-Back scheduling.

This is the default for V60.

Definition at line 76 of file HexagonSubtarget.h.

Referenced by initializeSubtargetDependencies(), and useBSBScheduling().


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