14 #ifndef LLVM_LIB_TARGET_HEXAGON_HEXAGONSUBTARGET_H 15 #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 UseLongCalls =
false;
50 bool UseMemops =
false;
51 bool UsePackets =
false;
52 bool UseNewValueJumps =
false;
53 bool UseNewValueStores =
false;
54 bool UseSmallData =
false;
55 bool UseZRegOps =
false;
57 bool HasMemNoShuf =
false;
58 bool EnableDuplex =
false;
59 bool ReservedR19 =
false;
60 bool NoreturnStackElim =
false;
87 std::string CPUString;
112 return &FrameLowering;
202 std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations)
206 std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations)
211 bool useAA()
const override;
235 if (!IncludeBool && ElemTy ==
MVT::i1)
242 if (IncludeBool && ElemTy ==
MVT::i1) {
244 if (8*HwLen == NumElems)
248 for (
MVT T : ElemTypes)
249 if (NumElems *
T.getSizeInBits() == 8*HwLen)
255 if (VecWidth != 8*HwLen && VecWidth != 16*HwLen)
273 void restoreLatency(
SUnit *Src,
SUnit *Dst)
const;
274 void changeLatency(
SUnit *Src,
SUnit *Dst,
unsigned Lat)
const;
281 #endif // LLVM_LIB_TARGET_HEXAGON_HEXAGONSUBTARGET_H
bool useHVX128BOps() const
bool hasV55OpsOnly() const
AntiDepBreakMode getAntiDepBreakMode() const override
bool noreturnStackElim() const
This class represents lattice values for constants.
bool isVector() const
Return true if this is a vector value type.
bool hasV62OpsOnly() const
bool hasV66OpsOnly() const
Hexagon::ArchEnum HexagonArchVersion
unsigned getVectorNumElements() const
ArrayRef< MVT > getHVXElementTypes() const
Mutate the DAG as a postpass after normal DAG building.
void getSMSMutations(std::vector< std::unique_ptr< ScheduleDAGMutation >> &Mutations) const override
const Hexagon::ArchEnum & getHexagonArchVersion() const
const HexagonFrameLowering * getFrameLowering() const override
const InstrItineraryData * getInstrItineraryData() const override
getInstrItins - Return the instruction itineraries based on subtarget selection.
HexagonSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS)
unsigned getL1CacheLineSize() const
bool enablePostRAScheduler() const override
const HexagonInstrInfo * TII
ArrayRef< T > makeArrayRef(const T &OneElt)
Construct an ArrayRef from a single element.
bool hasV5OpsOnly() const
bool useLongCalls() const
const HexagonRegisterInfo * getRegisterInfo() const override
bool hasV65OpsOnly() const
Hexagon::ArchEnum HexagonHVXVersion
bool useBSBScheduling() const
unsigned getSizeInBits() const
const HexagonTargetLowering * getTargetLowering() const override
unsigned getL1PrefetchDistance() const
HexagonSubtarget(const Triple &TT, StringRef CPU, StringRef FS, const TargetMachine &TM)
bool hasReservedR19() const
const std::string & getCPUString() const
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Itinerary data supplied by a subtarget to be used by a target.
MVT getVectorElementType() const
SmallSet - This maintains a set of unique values, optimizing for the case when the set is small (less...
CodeGenOpt::Level OptLevel
void apply(ScheduleDAGInstrs *DAG) override
bool useHVX64BOps() const
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly...
bool useAA() const override
Enable use of alias analysis during code generation (during MI scheduling, DAGCombine, etc.).
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Triple - Helper class for working with autoconf configuration names.
bool isHVXVectorType(MVT VecTy, bool IncludeBool=false) const
bool hasV60OpsOnly() const
bool enableMachineScheduler() const override
bool usePredicatedCalls() const
void getPostRAMutations(std::vector< std::unique_ptr< ScheduleDAGMutation >> &Mutations) const override
bool UseBSBScheduling
True if the target should use Back-Skip-Back scheduling.
bool enableSubRegLiveness() const override
void adjustSchedDependency(SUnit *def, SUnit *use, SDep &dep) const override
Perform target specific adjustments to the latency of a schedule dependency.
bool hasMemNoShuf() const
bool useNewValueJumps() const
A ScheduleDAG for scheduling lists of MachineInstr.
Representation of each machine instruction.
bool enableMachineSchedDefaultSched() const override
void ParseSubtargetFeatures(StringRef CPU, StringRef FS)
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
unsigned getVectorLength() const
unsigned getTypeAlignment(MVT Ty) const
bool useSmallData() const
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
const HexagonInstrInfo * getInstrInfo() const override
const HexagonSelectionDAGInfo * getSelectionDAGInfo() const override
Primary interface to the complete machine description for the target machine.
StringRef - Represent a constant reference to a string, i.e.
bool useNewValueStores() const
Scheduling unit. This is a node in the scheduling DAG.