MachineInstrBuilder newInstr;
MachineRegisterInfo &MRI = MF.getRegInfo();
const AMDGPURegisterInfo & RI = getRegisterInfo();
- unsigned ISAOpcode = getISAOpcode(MI.getOpcode());
// Create the new instruction
- newInstr = BuildMI(MF, DL, TM.getInstrInfo()->get(ISAOpcode));
+ newInstr = BuildMI(MF, DL, TM.getInstrInfo()->get(MI.getOpcode()));
for (unsigned i = 0; i < MI.getNumOperands(); i++) {
MachineOperand &MO = MI.getOperand(i);
virtual const AMDGPURegisterInfo &getRegisterInfo() const = 0;
- /// getISAOpcode - This function takes an AMDIL opcode as an argument and
- /// returns an equivalent ISA opcode.
- virtual unsigned getISAOpcode(unsigned AMDILopcode) const = 0;
-
/// convertToISA - Convert the AMDIL MachineInstr to a supported ISA
/// MachineInstr
virtual MachineInstr * convertToISA(MachineInstr & MI, MachineFunction &MF,
}
}
-unsigned R600InstrInfo::getISAOpcode(unsigned opcode) const
-{
- switch (opcode) {
- default: return opcode;
- case AMDIL::IEQ:
- return AMDIL::SETE_INT;
- case AMDIL::INE:
- return AMDIL::SETNE_INT;
- case AMDIL::IGE:
- return AMDIL::SETGE_INT;
- case AMDIL::MOVE_f32:
- case AMDIL::MOVE_i32:
- return AMDIL::MOV;
- case AMDIL::UGE:
- return AMDIL::SETGE_UINT;
- case AMDIL::UGT:
- return AMDIL::SETGT_UINT;
- }
-}
-
-unsigned R600InstrInfo::getASHRop() const
-{
- unsigned gen = TM.getSubtarget<AMDILSubtarget>().device()->getGeneration();
- if (gen < AMDILDeviceInfo::HD5XXX) {
- return AMDIL::ASHR_r600;
- } else {
- return AMDIL::ASHR_eg;
- }
-}
-
-unsigned R600InstrInfo::getLSHRop() const
-{
- unsigned gen = TM.getSubtarget<AMDILSubtarget>().device()->getGeneration();
- if (gen < AMDILDeviceInfo::HD5XXX) {
- return AMDIL::LSHR_r600;
- } else {
- return AMDIL::LSHR_eg;
- }
-}
-
MachineInstr * R600InstrInfo::getMovImmInstr(MachineFunction *MF,
unsigned DstReg, int64_t Imm) const
{
unsigned DestReg, unsigned SrcReg,
bool KillSrc) const;
- virtual unsigned getISAOpcode(unsigned opcode) const;
bool isTrig(const MachineInstr &MI) const;
- unsigned getLSHRop() const;
- unsigned getASHRop() const;
-
virtual MachineInstr * getMovImmInstr(MachineFunction *MF, unsigned DstReg,
int64_t Imm) const;
}
}
-MachineInstr * SIInstrInfo::convertToISA(MachineInstr & MI, MachineFunction &MF,
- DebugLoc DL) const
-{
- MachineInstr * newMI = AMDGPUInstrInfo::convertToISA(MI, MF, DL);
- const MCInstrDesc &newDesc = get(newMI->getOpcode());
-
- /* If this instruction was converted to a VOP3, we need to add the extra
- * operands for abs, clamp, omod, and negate. */
- if (getEncodingType(*newMI) == SIInstrEncodingType::VOP3
- && newMI->getNumOperands() < newDesc.getNumOperands()) {
- MachineInstrBuilder builder(newMI);
- for (unsigned op_idx = newMI->getNumOperands();
- op_idx < newDesc.getNumOperands(); op_idx++) {
- builder.addImm(0);
- }
- }
- return newMI;
-}
-
-unsigned SIInstrInfo::getISAOpcode(unsigned AMDILopcode) const
-{
- switch (AMDILopcode) {
- //XXX We need a better way of detecting end of program
- case AMDIL::MOVE_f32: return AMDIL::V_MOV_B32_e32;
- default: return AMDILopcode;
- }
-}
-
MachineInstr * SIInstrInfo::getMovImmInstr(MachineFunction *MF, unsigned DstReg,
int64_t Imm) const
{
/// number of bytes.
unsigned getEncodingBytes(const MachineInstr &MI) const;
- /// convertToISA - Convert the AMDIL MachineInstr to a supported SI
- ///MachineInstr
- virtual MachineInstr * convertToISA(MachineInstr & MI, MachineFunction &MF,
- DebugLoc DL) const;
-
- /// getISAOpcode - This function takes an AMDIL opcode as an argument and
- /// returns an equivalent SI opcode.
- virtual unsigned getISAOpcode(unsigned AMDILopcode) const;
-
virtual MachineInstr * getMovImmInstr(MachineFunction *MF, unsigned DstReg,
int64_t Imm) const;