43 unsigned DestReg,
unsigned SrcReg,
49 bool NewMI=
false)
const;
51 virtual unsigned getIEQOpcode()
const { assert(!
"Implement");
return 0;}
54 unsigned DstReg,
unsigned SrcReg)
const;
55 virtual bool isMov(
unsigned Opcode)
const;
58 int isMIMG(uint16_t Opcode)
const;
59 int isSMRD(uint16_t Opcode)
const;
60 bool isVOP1(uint16_t Opcode)
const;
61 bool isVOP2(uint16_t Opcode)
const;
62 bool isVOP3(uint16_t Opcode)
const;
63 bool isVOPC(uint16_t Opcode)
const;
80 unsigned OpNo)
const;\
107 unsigned Channel)
const;
115 unsigned OffsetReg)
const;
121 unsigned OffsetReg)
const;
126 unsigned SavReg,
unsigned IndexReg)
const;
139 namespace SIInstrFlags {
148 #endif //SIINSTRINFO_H
Interface definition for SIRegisterInfo.
int getVOPe64(uint16_t Opcode)
void moveToVALU(MachineInstr &MI) const
Replace this instruction's opcode with the equivalent VALU opcode. This function will also move the u...
virtual bool isSafeToMoveRegClassDefs(const TargetRegisterClass *RC) const
bool isLiteralConstant(const MachineOperand &MO) const
virtual MachineInstrBuilder buildIndirectRead(MachineBasicBlock *MBB, MachineBasicBlock::iterator I, unsigned ValueReg, unsigned Address, unsigned OffsetReg) const
Build instruction(s) for an indirect register read.
int getCommuteOrig(uint16_t Opcode)
SIInstrInfo(AMDGPUTargetMachine &tm)
int isMIMG(uint16_t Opcode) const
bool canReadVGPR(const MachineInstr &MI, unsigned OpNo) const
virtual void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, DebugLoc DL, unsigned DestReg, unsigned SrcReg, bool KillSrc) const
virtual bool verifyInstruction(const MachineInstr *MI, StringRef &ErrInfo) const
virtual MachineInstr * commuteInstruction(MachineInstr *MI, bool NewMI=false) const
bundle_iterator< MachineInstr, instr_iterator > iterator
bool isSALUInstr(const MachineInstr &MI) const
virtual const TargetRegisterClass * getIndirectAddrRegClass() const
virtual unsigned calculateIndirectAddress(unsigned RegIndex, unsigned Channel) const
Calculate the "Indirect Address" for the given RegIndex and Channel.
void legalizeOpWithMove(MachineInstr *MI, unsigned OpIdx) const
Legalize the OpIndex operand of this instruction by inserting a MOV. For example: ADD_I32_e32 VGPR0...
virtual bool isMov(unsigned Opcode) const
MachineInstr * buildMovInstr(MachineBasicBlock *MBB, MachineBasicBlock::iterator I, unsigned DstReg, unsigned SrcReg) const
Build a MOV instruction.
bool isVOP1(uint16_t Opcode) const
bool isVOP3(uint16_t Opcode) const
void reserveIndirectRegisters(BitVector &Reserved, const MachineFunction &MF) const
Contains the definition of a TargetInstrInfo class that is common to all AMD GPUs.
unsigned commuteOpcode(unsigned Opcode) const
bool isVOPC(uint16_t Opcode) const
void legalizeOperands(MachineInstr *MI) const
Legalize all operands in this instruction. This function may create new instruction and insert them b...
int getCommuteRev(uint16_t Opcode)
void LoadM0(MachineInstr *MoveRel, MachineBasicBlock::iterator I, unsigned SavReg, unsigned IndexReg) const
const SIRegisterInfo & getRegisterInfo() const
static unsigned getVALUOp(const MachineInstr &MI)
bool isSALUOpSupportedOnVALU(const MachineInstr &MI) const
virtual MachineInstrBuilder buildIndirectWrite(MachineBasicBlock *MBB, MachineBasicBlock::iterator I, unsigned ValueReg, unsigned Address, unsigned OffsetReg) const
Build instruction(s) for an indirect register write.
virtual unsigned getIEQOpcode() const
bool isInlineConstant(const MachineOperand &MO) const
const TargetRegisterClass * getOpRegClass(const MachineInstr &MI, unsigned OpNo) const
Return the correct register class for OpNo. For target-specific instructions, this will return the re...
int isSMRD(uint16_t Opcode) const
bool isVOP2(uint16_t Opcode) const