13#ifndef LLVM_LIB_TARGET_MIPS_MIPSSUBTARGET_H
14#define LLVM_LIB_TARGET_MIPS_MIPSSUBTARGET_H
29#define GET_SUBTARGETINFO_HEADER
30#include "MipsGenSubtargetInfo.inc"
35class MipsTargetMachine;
38 virtual void anchor();
42 Mips1, Mips2, Mips32, Mips32r2, Mips32r3, Mips32r5, Mips32r6, Mips32Max,
43 Mips3, Mips4, Mips5, Mips64, Mips64r2, Mips64r3, Mips64r5, Mips64r6
46 enum class CPU { P5600 };
49 static bool DspWarningPrinted;
52 static bool MSAWarningPrinted;
55 static bool CRCWarningPrinted;
58 static bool GINVWarningPrinted;
61 static bool MIPS1WarningPrinted;
64 static bool VirtWarningPrinted;
67 MipsArchEnum MipsArchVersion;
122 bool UseSmallSection;
145 bool InMips16HardFloat;
148 bool InMicroMipsMode;
151 bool HasDSP, HasDSPR2, HasDSPR3;
157 bool AllowMixed16_32;
194 bool UseIndirectJumpsHazard;
197 bool UseLongCalls =
false;
200 bool UseXGOT =
false;
207 Align stackAlignment;
216 enum {NoOverride, Mips16Override, NoMips16Override} OverrideMode;
222 std::unique_ptr<const SelectionDAGTargetInfo> TSInfo;
223 std::unique_ptr<const MipsInstrInfo> InstrInfo;
224 std::unique_ptr<const MipsFrameLowering> FrameLowering;
225 std::unique_ptr<const MipsTargetLowering> TLInfo;
251 bool hasMips1()
const {
return MipsArchVersion >= Mips1; }
252 bool hasMips2()
const {
return MipsArchVersion >= Mips2; }
253 bool hasMips3()
const {
return MipsArchVersion >= Mips3; }
254 bool hasMips4()
const {
return MipsArchVersion >= Mips4; }
255 bool hasMips5()
const {
return MipsArchVersion >= Mips5; }
259 return (MipsArchVersion >= Mips32 && MipsArchVersion < Mips32Max) ||
263 return (MipsArchVersion >= Mips32r2 && MipsArchVersion < Mips32Max) ||
267 return (MipsArchVersion >= Mips32r3 && MipsArchVersion < Mips32Max) ||
271 return (MipsArchVersion >= Mips32r5 && MipsArchVersion < Mips32Max) ||
275 return (MipsArchVersion >= Mips32r6 && MipsArchVersion < Mips32Max) ||
278 bool hasMips64()
const {
return MipsArchVersion >= Mips64; }
324 bool has3D()
const {
return Has3D; }
328 bool hasMT()
const {
return HasMT; }
356 bool os16()
const {
return Os16; }
391 return FrameLowering.get();
394 return &InstrInfo->getRegisterInfo();
This file describes how to lower LLVM calls to machine code calls.
Interface for Targets to specify which operations they can successfully select and how the others sho...
Itinerary data supplied by a subtarget to be used by a target.
bool isXRaySupported() const override
const LegalizerInfo * getLegalizerInfo() const override
static bool useConstantIslands()
bool enablePostRAScheduler() const override
This overrides the PostRAScheduler bit in the SchedModel for each CPU.
bool inMicroMipsMode() const
std::unique_ptr< InstructionSelector > InstSelector
bool useSoftFloat() const
const MipsInstrInfo * getInstrInfo() const override
bool useIndirectJumpsHazard() const
MipsSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS, const TargetMachine &TM)
const CallLowering * getCallLowering() const override
std::unique_ptr< RegisterBankInfo > RegBankInfo
bool allowMixed16_32() const
bool inMips16Mode() const
~MipsSubtarget() override
bool inAbs2008Mode() const
std::unique_ptr< CallLowering > CallLoweringInfo
void setHelperClassesMips16()
const MipsRegisterInfo * getRegisterInfo() const override
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
bool disableMadd4() const
const RegisterBankInfo * getRegBankInfo() const override
bool systemSupportsUnalignedAccess() const
Does the system support unaligned memory access.
bool isPositionIndependent() const
bool hasExtractInsert() const
Features related to the presence of specific instructions.
bool enableLongBranchPass() const
void setHelperClassesMipsSE()
bool inMicroMips32r6Mode() const
bool hasMips4_32r2() const
Align getStackAlignment() const
const InstrItineraryData * getInstrItineraryData() const override
InstructionSelector * getInstructionSelector() const override
const SelectionDAGTargetInfo * getSelectionDAGInfo() const override
bool isSingleFloat() const
std::unique_ptr< LegalizerInfo > Legalizer
bool inMips16ModeDefault() const
bool useLongCalls() const
unsigned getGPRSizeInBytes() const
bool useSmallSection() const
const MipsTargetLowering * getTargetLowering() const override
bool inMips16HardFloat() const
bool hasStandardEncoding() const
void getCriticalPathRCs(RegClassVector &CriticalPathRCs) const override
bool isTargetNaCl() const
Reloc::Model getRelocationModel() const
CodeGenOptLevel getOptLevelToEnablePostRAScheduler() const override
const MipsABIInfo & getABI() const
const TargetFrameLowering * getFrameLowering() const override
Holds all the information related to register banks.
Targets can subclass this to parameterize the SelectionDAG lowering and instruction selection process...
StringRef - Represent a constant reference to a string, i.e.
Information about stack frame layout on the target.
Primary interface to the complete machine description for the target machine.
Triple - Helper class for working with autoconf configuration names.
bool isOSNaCl() const
Tests whether the OS is NaCl (Native Client)
bool isOSBinFormatELF() const
Tests whether the OS uses the ELF binary format.
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.
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.