LLVM  8.0.1
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
llvm::Mips16InstrInfo Class Reference

#include "Target/Mips/Mips16InstrInfo.h"

Inheritance diagram for llvm::Mips16InstrInfo:
Inheritance graph
[legend]
Collaboration diagram for llvm::Mips16InstrInfo:
Collaboration graph
[legend]

Public Member Functions

 Mips16InstrInfo (const MipsSubtarget &STI)
 
const MipsRegisterInfogetRegisterInfo () const override
 getRegisterInfo - TargetInstrInfo is a superset of MRegister info. More...
 
unsigned isLoadFromStackSlot (const MachineInstr &MI, int &FrameIndex) const override
 isLoadFromStackSlot - If the specified machine instruction is a direct load from a stack slot, return the virtual or physical register number of the destination along with the FrameIndex of the loaded stack slot. More...
 
unsigned isStoreToStackSlot (const MachineInstr &MI, int &FrameIndex) const override
 isStoreToStackSlot - If the specified machine instruction is a direct store to a stack slot, return the virtual or physical register number of the source reg along with the FrameIndex of the loaded stack slot. More...
 
void copyPhysReg (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const DebugLoc &DL, unsigned DestReg, unsigned SrcReg, bool KillSrc) const override
 
void storeRegToStack (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned SrcReg, bool isKill, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI, int64_t Offset) const override
 
void loadRegFromStack (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned DestReg, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI, int64_t Offset) const override
 
bool expandPostRAPseudo (MachineInstr &MI) const override
 
unsigned getOppositeBranchOpc (unsigned Opc) const override
 GetOppositeBranchOpc - Return the inverse of the specified opcode, e.g. More...
 
void makeFrame (unsigned SP, int64_t FrameSize, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const
 
void restoreFrame (unsigned SP, int64_t FrameSize, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const
 
void adjustStackPtr (unsigned SP, int64_t Amount, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const override
 Adjust SP by Amount bytes. More...
 
unsigned loadImmediate (unsigned FrameReg, int64_t Imm, MachineBasicBlock &MBB, MachineBasicBlock::iterator II, const DebugLoc &DL, unsigned &NewImm) const
 Emit a series of instructions to load an immediate. More...
 
const MCInstrDescAddiuSpImm (int64_t Imm) const
 
void BuildAddiuSpImm (MachineBasicBlock &MBB, MachineBasicBlock::iterator I, int64_t Imm) const
 
- Public Member Functions inherited from llvm::MipsInstrInfo
 MipsInstrInfo (const MipsSubtarget &STI, unsigned UncondBrOpc)
 
bool analyzeBranch (MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, SmallVectorImpl< MachineOperand > &Cond, bool AllowModify) const override
 Branch Analysis. More...
 
unsigned removeBranch (MachineBasicBlock &MBB, int *BytesRemoved=nullptr) const override
 
unsigned insertBranch (MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, ArrayRef< MachineOperand > Cond, const DebugLoc &DL, int *BytesAdded=nullptr) const override
 
bool reverseBranchCondition (SmallVectorImpl< MachineOperand > &Cond) const override
 reverseBranchCondition - Return the inverse opcode of the specified Branch instruction. More...
 
BranchType analyzeBranch (MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, SmallVectorImpl< MachineOperand > &Cond, bool AllowModify, SmallVectorImpl< MachineInstr *> &BranchInstrs) const
 
unsigned getEquivalentCompactForm (const MachineBasicBlock::iterator I) const
 Determine the opcode of a non-delay slot form for a branch if one exists. More...
 
bool isBranchOffsetInRange (unsigned BranchOpc, int64_t BrOffset) const override
 Determine if the branch target is in range. More...
 
bool SafeInForbiddenSlot (const MachineInstr &MI) const
 Predicate to determine if an instruction can go in a forbidden slot. More...
 
bool HasForbiddenSlot (const MachineInstr &MI) const
 Predicate to determine if an instruction has a forbidden slot. More...
 
void insertNoop (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI) const override
 Insert nop instruction when hazard condition is found. More...
 
unsigned getInstSizeInBytes (const MachineInstr &MI) const override
 Return the number of bytes of code the specified instruction may be. More...
 
void storeRegToStackSlot (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned SrcReg, bool isKill, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI) const override
 
void loadRegFromStackSlot (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned DestReg, int FrameIndex, const TargetRegisterClass *RC, const TargetRegisterInfo *TRI) const override
 
MachineInstrBuilder genInstrWithNewOpc (unsigned NewOpc, MachineBasicBlock::iterator I) const
 Create an instruction which has the same operands and memory operands as MI but has a new opcode. More...
 
bool findCommutedOpIndices (MachineInstr &MI, unsigned &SrcOpIdx1, unsigned &SrcOpIdx2) const override
 
bool verifyInstruction (const MachineInstr &MI, StringRef &ErrInfo) const override
 Perform target specific instruction verification. More...
 
std::pair< unsigned, unsigneddecomposeMachineOperandsTargetFlags (unsigned TF) const override
 
ArrayRef< std::pair< unsigned, const char * > > getSerializableDirectMachineOperandTargetFlags () const override
 

Static Public Member Functions

static bool validImmediate (unsigned Opcode, unsigned Reg, int64_t Amount)
 
static bool validSpImm8 (int offset)
 
- Static Public Member Functions inherited from llvm::MipsInstrInfo
static const MipsInstrInfocreate (MipsSubtarget &STI)
 

Protected Member Functions

bool isCopyInstrImpl (const MachineInstr &MI, const MachineOperand *&Source, const MachineOperand *&Destination) const override
 If the specific machine instruction is a instruction that moves/copies value from one register to another register return true along with machine operand and machine operand. More...
 
- Protected Member Functions inherited from llvm::MipsInstrInfo
bool isZeroImm (const MachineOperand &op) const
 
MachineMemOperandGetMemOperand (MachineBasicBlock &MBB, int FI, MachineMemOperand::Flags Flags) const
 

Additional Inherited Members

- Public Types inherited from llvm::MipsInstrInfo
enum  BranchType {
  BT_None, BT_NoBranch, BT_Uncond, BT_Cond,
  BT_CondUncond, BT_Indirect
}
 
- Protected Attributes inherited from llvm::MipsInstrInfo
const MipsSubtargetSubtarget
 
unsigned UncondBrOpc
 

Detailed Description

Definition at line 28 of file Mips16InstrInfo.h.

Constructor & Destructor Documentation

◆ Mips16InstrInfo()

Mips16InstrInfo::Mips16InstrInfo ( const MipsSubtarget STI)
explicit

Definition at line 43 of file Mips16InstrInfo.cpp.

Referenced by llvm::createMips16InstrInfo().

Member Function Documentation

◆ AddiuSpImm()

const MCInstrDesc & Mips16InstrInfo::AddiuSpImm ( int64_t  Imm) const

Definition at line 459 of file Mips16InstrInfo.cpp.

References BuildAddiuSpImm(), and validSpImm8().

Referenced by BuildAddiuSpImm(), and validSpImm8().

◆ adjustStackPtr()

void Mips16InstrInfo::adjustStackPtr ( unsigned  SP,
int64_t  Amount,
MachineBasicBlock MBB,
MachineBasicBlock::iterator  I 
) const
overridevirtual

Adjust SP by Amount bytes.

Implements llvm::MipsInstrInfo.

Definition at line 311 of file Mips16InstrInfo.cpp.

References BuildAddiuSpImm(), and llvm::isInt< 16 >().

◆ BuildAddiuSpImm()

void Mips16InstrInfo::BuildAddiuSpImm ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  I,
int64_t  Imm 
) const

◆ copyPhysReg()

void Mips16InstrInfo::copyPhysReg ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MI,
const DebugLoc DL,
unsigned  DestReg,
unsigned  SrcReg,
bool  KillSrc 
) const
override

◆ expandPostRAPseudo()

bool Mips16InstrInfo::expandPostRAPseudo ( MachineInstr MI) const
override

◆ getOppositeBranchOpc()

unsigned Mips16InstrInfo::getOppositeBranchOpc ( unsigned  Opc) const
overridevirtual

GetOppositeBranchOpc - Return the inverse of the specified opcode, e.g.

turning BEQ to BNE.

Implements llvm::MipsInstrInfo.

Definition at line 163 of file Mips16InstrInfo.cpp.

References llvm_unreachable.

◆ getRegisterInfo()

const MipsRegisterInfo & Mips16InstrInfo::getRegisterInfo ( ) const
overridevirtual

getRegisterInfo - TargetInstrInfo is a superset of MRegister info.

As such, whenever a client has an instance of instruction info, it should always be able to get register info as well (through this method).

Implements llvm::MipsInstrInfo.

Definition at line 46 of file Mips16InstrInfo.cpp.

Referenced by llvm::Mips16FrameLowering::determineCalleeSaves().

◆ isCopyInstrImpl()

bool Mips16InstrInfo::isCopyInstrImpl ( const MachineInstr MI,
const MachineOperand *&  Source,
const MachineOperand *&  Destination 
) const
overrideprotected

If the specific machine instruction is a instruction that moves/copies value from one register to another register return true along with machine operand and machine operand.

Definition at line 100 of file Mips16InstrInfo.cpp.

References llvm::MachineInstr::getOperand(), and llvm::MachineInstr::isMoveReg().

Referenced by validSpImm8().

◆ isLoadFromStackSlot()

unsigned Mips16InstrInfo::isLoadFromStackSlot ( const MachineInstr MI,
int &  FrameIndex 
) const
override

isLoadFromStackSlot - If the specified machine instruction is a direct load from a stack slot, return the virtual or physical register number of the destination along with the FrameIndex of the loaded stack slot.

If not, return 0. This predicate must return 0 if the instruction has any side effects other than loading from the stack slot.

Definition at line 55 of file Mips16InstrInfo.cpp.

◆ isStoreToStackSlot()

unsigned Mips16InstrInfo::isStoreToStackSlot ( const MachineInstr MI,
int &  FrameIndex 
) const
override

isStoreToStackSlot - If the specified machine instruction is a direct store to a stack slot, return the virtual or physical register number of the source reg along with the FrameIndex of the loaded stack slot.

If not, return 0. This predicate must return 0 if the instruction has any side effects other than storing to the stack slot.

Definition at line 65 of file Mips16InstrInfo.cpp.

◆ loadImmediate()

unsigned Mips16InstrInfo::loadImmediate ( unsigned  FrameReg,
int64_t  Imm,
MachineBasicBlock MBB,
MachineBasicBlock::iterator  II,
const DebugLoc DL,
unsigned NewImm 
) const

◆ loadRegFromStack()

void Mips16InstrInfo::loadRegFromStack ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MBBI,
unsigned  DestReg,
int  FrameIndex,
const TargetRegisterClass RC,
const TargetRegisterInfo TRI,
int64_t  Offset 
) const
overridevirtual

◆ makeFrame()

void Mips16InstrInfo::makeFrame ( unsigned  SP,
int64_t  FrameSize,
MachineBasicBlock MBB,
MachineBasicBlock::iterator  I 
) const

◆ restoreFrame()

void Mips16InstrInfo::restoreFrame ( unsigned  SP,
int64_t  FrameSize,
MachineBasicBlock MBB,
MachineBasicBlock::iterator  I 
) const

◆ storeRegToStack()

void Mips16InstrInfo::storeRegToStack ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MBBI,
unsigned  SrcReg,
bool  isKill,
int  FrameIndex,
const TargetRegisterClass RC,
const TargetRegisterInfo TRI,
int64_t  Offset 
) const
overridevirtual

◆ validImmediate()

bool Mips16InstrInfo::validImmediate ( unsigned  Opcode,
unsigned  Reg,
int64_t  Amount 
)
static

Definition at line 476 of file Mips16InstrInfo.cpp.

References llvm::isInt< 16 >(), and llvm_unreachable.

Referenced by llvm::Mips16RegisterInfo::intRegClass().

◆ validSpImm8()

static bool llvm::Mips16InstrInfo::validSpImm8 ( int  offset)
inlinestatic

Definition at line 95 of file Mips16InstrInfo.h.

References AddiuSpImm(), BuildAddiuSpImm(), isCopyInstrImpl(), and llvm::Sched::Source.

Referenced by AddiuSpImm().


The documentation for this class was generated from the following files: