13#ifndef LLVM_LIB_TARGET_MIPS_MIPSSUBTARGET_H
14#define LLVM_LIB_TARGET_MIPS_MIPSSUBTARGET_H
30#define GET_SUBTARGETINFO_HEADER
31#include "MipsGenSubtargetInfo.inc"
47#define OPTIONS_STRUCT_DECL
48#include "MipsOptions.inc"
51class MipsTargetMachine;
54 const MipsOptions &CLOpts;
55 const MipsMCOptions &MCCLOpts;
57 virtual void anchor();
61 Mips1, Mips2, Mips32, Mips32r2, Mips32r3, Mips32r5, Mips32r6, Mips32Max,
62 Mips3, Mips4, Mips5, Mips64, Mips64r2, Mips64r3, Mips64r5, Mips64r6
65 enum class CPU { Others, P5600, I6400, I6500 };
68 static bool DspWarningPrinted;
71 static bool MSAWarningPrinted;
74 static bool CRCWarningPrinted;
77 static bool GINVWarningPrinted;
80 static bool MIPS1WarningPrinted;
83 static bool VirtWarningPrinted;
86 MipsArchEnum MipsArchVersion;
89 CPU ProcImpl = CPU::Others;
125 std::bitset<32> UserReservedGPR;
146 bool UseSmallSection;
169 bool InMips16HardFloat;
172 bool InMicroMipsMode;
175 bool HasDSP, HasDSPR2, HasDSPR3;
210 bool UseIndirectJumpsHazard;
213 bool UseLongCalls =
false;
216 bool UseXGOT =
false;
222 bool UseCompactBranches =
true;
226 Align stackAlignment;
235 std::unique_ptr<const SelectionDAGTargetInfo> TSInfo;
236 std::unique_ptr<const MipsInstrInfo> InstrInfo;
237 std::unique_ptr<const MipsFrameLowering> FrameLowering;
238 std::unique_ptr<const MipsTargetLowering> TLInfo;
254 assert(GPR < UserReservedGPR.size() &&
"GPR number out of range");
255 return UserReservedGPR[GPR];
272 bool hasMips1()
const {
return MipsArchVersion >= Mips1; }
273 bool hasMips2()
const {
return MipsArchVersion >= Mips2; }
274 bool hasMips3()
const {
return MipsArchVersion >= Mips3; }
275 bool hasMips4()
const {
return MipsArchVersion >= Mips4; }
276 bool hasMips5()
const {
return MipsArchVersion >= Mips5; }
280 return (MipsArchVersion >= Mips32 && MipsArchVersion < Mips32Max) ||
284 return (MipsArchVersion >= Mips32r2 && MipsArchVersion < Mips32Max) ||
288 return (MipsArchVersion >= Mips32r3 && MipsArchVersion < Mips32Max) ||
292 return (MipsArchVersion >= Mips32r5 && MipsArchVersion < Mips32Max) ||
296 return (MipsArchVersion >= Mips32r6 && MipsArchVersion < Mips32Max) ||
299 bool hasMips64()
const {
return MipsArchVersion >= Mips64; }
327 bool isTargetCOFF()
const {
return getTargetTriple().isOSBinFormatCOFF(); }
328 bool isTargetELF()
const {
return getTargetTriple().isOSBinFormatELF(); }
345 bool has3D()
const {
return Has3D; }
349 bool hasMT()
const {
return HasMT; }
405 return FrameLowering.get();
408 return &InstrInfo->getRegisterInfo();
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
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...
Tracks which library functions to use for a particular subtarget or function.
void initLibcallLoweringInfo(LibcallLoweringInfo &Info) const override
bool isXRaySupported() const override
const LegalizerInfo * getLegalizerInfo() const override
bool enablePostRAScheduler() const override
This overrides the PostRAScheduler bit in the SchedModel for each CPU.
bool inMicroMipsMode() const
MipsSubtarget(const Triple &TT, StringRef CPU, StringRef FS, StringRef ABIName, bool little, const MipsTargetMachine &TM, MaybeAlign StackAlignOverride)
This constructor initializes the data members to match that of the specified triple.
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 inMips16Mode() const
~MipsSubtarget() override
bool useCompactBranches() const
bool inAbs2008Mode() const
const MipsOptions & getCLOpts() const
std::unique_ptr< CallLowering > CallLoweringInfo
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
static const RTLIB::LibcallImpl HardFloatLibCalls[34]
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 inMicroMips32r6Mode() const
bool isTargetCOFF() const
bool hasMips4_32r2() const
Align getStackAlignment() const
bool isTargetWindows() const
InstructionSelector * getInstructionSelector() const override
const SelectionDAGTargetInfo * getSelectionDAGInfo() const override
bool isSingleFloat() const
std::unique_ptr< LegalizerInfo > Legalizer
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
const MipsABIInfo & getABI() const
bool useConstantIslands() const
Reloc::Model getRelocationModel() const
const MipsMCOptions & getMCCLOpts() const
bool isGPRReservedByUser(unsigned GPR) const
CodeGenOptLevel getOptLevelToEnablePostRAScheduler() const override
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...
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.
This is an optimization pass for GlobalISel generic memory operations.
@ Never
Never set the bit.
CodeGenOptLevel
Code generation optimization level.
@ Optimal
Optimal is the default and will produce compact branches when appropriate.
@ Always
Always emit .debug_str_offsets talbes as DWARF64 for testing.
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.