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 UseZRegOps = 
false;
 
   58  bool UseHVXIEEEFPOps = 
false;
 
   59  bool UseHVXQFloatOps = 
false;
 
   60  bool UseHVXFloatingPoint = 
false;
 
   61  bool UseCabac = 
false;
 
   63  bool HasPreV65 = 
false;
 
   64  bool HasMemNoShuf = 
false;
 
   65  bool EnableDuplex = 
false;
 
   66  bool ReservedR19 = 
false;
 
   67  bool NoreturnStackElim = 
false;
 
   94  enum HexagonProcFamilyEnum { Others, TinyCore };
 
   96  std::string CPUString;
 
   97  HexagonProcFamilyEnum HexagonProcFamily = Others;
 
  131    return &FrameLowering;
 
 
  248  bool isTinyCore()
 const { 
return HexagonProcFamily == TinyCore; }
 
  319      std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations)
 
  323      std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations)
 
  328  bool useAA() 
const override;
 
  346    static MVT Types[] = {MVT::i8, MVT::i16, MVT::i32};
 
  347    static MVT TypesV68[] = {MVT::i8, MVT::i16, MVT::i32, MVT::f16, MVT::f32};
 
 
  361    return Align(std::max<unsigned>(1, Ty.getSizeInBits() / 8));
 
 
  372                    bool IsArtificial, 
int Latency) 
const;
 
  373  void restoreLatency(
SUnit *Src, 
SUnit *Dst) 
const;
 
  374  void changeLatency(
SUnit *Src, 
SUnit *Dst, 
unsigned Lat) 
const;
 
 
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
 
const HexagonInstrInfo * TII
 
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
 
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
 
bool hasV79OpsOnly() const
 
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
 
HexagonSubtarget(const Triple &TT, StringRef CPU, StringRef FS, const TargetMachine &TM)
 
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 hasV75OpsOnly() const
 
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 useHVXV79Ops() 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 useHVXV81Ops() 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 hasV81OpsOnly() 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.
 
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.
 
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
 
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.
 
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.
 
ArrayRef(const T &OneElt) -> ArrayRef< T >
 
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