13#ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONSUBTARGET_H
14#define LLVM_LIB_TARGET_HEXAGON_HEXAGONSUBTARGET_H
32#define GET_SUBTARGETINFO_HEADER
33#include "HexagonGenSubtargetInfo.inc"
44 virtual void anchor();
46 bool UseHVX64BOps =
false;
47 bool UseHVX128BOps =
false;
49 bool UseAudioOps =
false;
50 bool UseCompound =
false;
51 bool UseLongCalls =
false;
52 bool UseMemops =
false;
53 bool UsePackets =
false;
54 bool UseNewValueJumps =
false;
55 bool UseNewValueStores =
false;
56 bool UseSmallData =
false;
57 bool UseUnsafeMath =
false;
58 bool UseZRegOps =
false;
59 bool UseHVXIEEEFPOps =
false;
60 bool UseHVXQFloatOps =
false;
61 bool UseHVXFloatingPoint =
false;
62 bool UseCabac =
false;
64 bool HasPreV65 =
false;
65 bool HasMemNoShuf =
false;
66 bool EnableDuplex =
false;
67 bool ReservedR19 =
false;
68 bool NoreturnStackElim =
false;
95 enum HexagonProcFamilyEnum { Others, TinyCore };
97 std::string CPUString;
98 HexagonProcFamilyEnum HexagonProcFamily = Others;
132 return &FrameLowering;
226 bool isTinyCore()
const {
return HexagonProcFamily == TinyCore; }
297 std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations)
301 std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations)
306 bool useAA()
const override;
324 static MVT Types[] = {MVT::i8, MVT::i16, MVT::i32};
325 static MVT TypesV68[] = {MVT::i8, MVT::i16, MVT::i32, MVT::f16, MVT::f32};
350 bool IsArtificial,
int Latency)
const;
351 void restoreLatency(
SUnit *Src,
SUnit *Dst)
const;
352 void changeLatency(
SUnit *Src,
SUnit *Dst,
unsigned Lat)
const;
const HexagonInstrInfo * TII
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This file defines the SmallSet class.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
bool isTinyCoreWithDuplex() const
const InstrItineraryData * getInstrItineraryData() const override
getInstrItins - Return the instruction itineraries based on subtarget selection.
Hexagon::ArchEnum HexagonArchVersion
bool useUnsafeMath() const
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.
bool useHVXV67Ops() const
bool hasV68OpsOnly() const
bool usePredicatedCalls() const
bool hasReservedR19() const
bool useLongCalls() const
bool enableMachineSchedDefaultSched() const override
const HexagonInstrInfo * getInstrInfo() const override
const HexagonFrameLowering * getFrameLowering() const override
Hexagon::ArchEnum HexagonHVXVersion
bool useSmallData() const
const HexagonRegisterInfo * getRegisterInfo() const override
bool hasV55OpsOnly() const
const Hexagon::ArchEnum & getHexagonArchVersion() const
void getSMSMutations(std::vector< std::unique_ptr< ScheduleDAGMutation > > &Mutations) const override
bool noreturnStackElim() const
bool isHVXVectorType(EVT VecTy, bool IncludeBool=false) const
const Triple & getTargetTriple() const
void getPostRAMutations(std::vector< std::unique_ptr< ScheduleDAGMutation > > &Mutations) const override
bool useHVXV62Ops() const
const HexagonTargetLowering * getTargetLowering() const override
bool hasV65OpsOnly() const
bool useNewValueStores() const
bool UseBSBScheduling
True if the target should use Back-Skip-Back scheduling.
unsigned getL1PrefetchDistance() const
ArrayRef< MVT > getHVXElementTypes() const
bool useHVXFloatingPoint() const
bool hasV62OpsOnly() const
bool useHVXV69Ops() const
bool hasMemNoShuf() const
bool enableSubRegLiveness() const override
bool hasV73OpsOnly() const
Align getTypeAlignment(MVT Ty) const
bool useHVXV71Ops() const
bool hasV71OpsOnly() const
bool useNewValueJumps() const
bool useHVXQFloatOps() const
unsigned getVectorLength() const
AntiDepBreakMode getAntiDepBreakMode() const override
bool hasV66OpsOnly() const
bool useHVX128BOps() const
bool hasV67OpsOnly() const
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
bool hasV69OpsOnly() const
bool useHVXV68Ops() const
bool useHVXV66Ops() const
bool useHVXIEEEFPOps() const
unsigned getL1CacheLineSize() const
bool useHVXV73Ops() const
bool isTypeForHVX(Type *VecTy, bool IncludeBool=false) const
Intrinsic::ID getIntrinsicId(unsigned Opc) const
HexagonSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS)
const HexagonSelectionDAGInfo * getSelectionDAGInfo() const override
bool enableMachineScheduler() const override
bool useHVXV65Ops() const
bool enablePostRAScheduler() const override
True if the subtarget should run a scheduler after register allocation.
bool useHVX64BOps() const
bool isEnvironmentMusl() const
bool useHVXV60Ops() const
bool useBSBScheduling() const
bool isHVXElementType(MVT Ty, bool IncludeBool=false) const
bool hasV60OpsOnly() const
const std::string & getCPUString() const
bool isXRaySupported() const override
bool useAA() const override
Enable use of alias analysis during code generation (during MI scheduling, DAGCombine,...
bool hasV5OpsOnly() const
Itinerary data supplied by a subtarget to be used by a target.
TypeSize getSizeInBits() const
Returns the size of the specified MVT in bits.
Representation of each machine instruction.
Scheduling unit. This is a node in the scheduling DAG.
A ScheduleDAG for scheduling lists of MachineInstr.
Mutate the DAG as a postpass after normal DAG building.
SmallSet - This maintains a set of unique values, optimizing for the case when the set is small (less...
StringRef - Represent a constant reference to a string, i.e.
Primary interface to the complete machine description for the target machine.
Provide an instruction scheduling machine model to CodeGen passes.
Triple - Helper class for working with autoconf configuration names.
EnvironmentType getEnvironment() const
Get the parsed environment type of this triple.
The instances of the Type class are immutable: once they are created, they are never changed.
A Use represents the edge between a Value definition and its users.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
CodeGenOptLevel
Code generation optimization level.
This struct is a compact representation of a valid (non-zero power of two) alignment.
void apply(ScheduleDAGInstrs *DAG) override
void apply(ScheduleDAGInstrs *DAG) override
void apply(ScheduleDAGInstrs *DAG) override
void apply(ScheduleDAGInstrs *DAG) override