1 //===-- R600InstrInfo.cpp - TODO: Add brief description -------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // TODO: Add full description
12 //===----------------------------------------------------------------------===//
14 #include "R600InstrInfo.h"
15 #include "AMDGPUTargetMachine.h"
16 #include "R600RegisterInfo.h"
20 R600InstrInfo::R600InstrInfo(AMDGPUTargetMachine &tm)
21 : AMDGPUInstrInfo(tm),
26 const R600RegisterInfo &R600InstrInfo::getRegisterInfo() const
31 bool R600InstrInfo::isTrig(const MachineInstr &MI) const
33 return get(MI.getOpcode()).TSFlags & R600_InstFlag::TRIG;
37 R600InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
38 MachineBasicBlock::iterator MI, DebugLoc DL,
39 unsigned DestReg, unsigned SrcReg,
42 if (!TargetRegisterInfo::isVirtualRegister(SrcReg)
43 && AMDIL::GPRI32RegClass.contains(SrcReg)) {
46 BuildMI(MBB, MI, DL, get(AMDIL::MOV), DestReg)
47 .addReg(SrcReg, getKillRegState(KillSrc));
50 unsigned R600InstrInfo::getISAOpcode(unsigned opcode) const
53 default: return AMDGPUInstrInfo::getISAOpcode(opcode);
54 case AMDIL::CUSTOM_ADD_i32:
55 return AMDIL::ADD_INT;
56 case AMDIL::CUSTOM_XOR_i32:
57 return AMDIL::XOR_INT;
66 unsigned R600InstrInfo::getLSHRop() const
68 unsigned gen = TM.getSubtarget<AMDILSubtarget>().device()->getGeneration();
69 if (gen < AMDILDeviceInfo::HD5XXX) {
70 return AMDIL::LSHR_r600;
72 return AMDIL::LSHR_eg;
76 unsigned R600InstrInfo::getMULHI_UINT() const
78 unsigned gen = TM.getSubtarget<AMDILSubtarget>().device()->getGeneration();
80 if (gen < AMDILDeviceInfo::HD5XXX) {
81 return AMDIL::MULHI_UINT_r600;
83 return AMDIL::MULHI_UINT_eg;
87 unsigned R600InstrInfo::getMULLO_UINT() const
89 unsigned gen = TM.getSubtarget<AMDILSubtarget>().device()->getGeneration();
91 if (gen < AMDILDeviceInfo::HD5XXX) {
92 return AMDIL::MULLO_UINT_r600;
94 return AMDIL::MULLO_UINT_eg;
98 unsigned R600InstrInfo::getRECIP_UINT() const
100 const AMDILDevice * dev = TM.getSubtarget<AMDILSubtarget>().device();
102 if (dev->getGeneration() < AMDILDeviceInfo::HD5XXX) {
103 return AMDIL::RECIP_UINT_r600;
104 } else if (dev->getDeviceFlag() != OCL_DEVICE_CAYMAN) {
105 return AMDIL::RECIP_UINT_eg;
107 return AMDIL::RECIP_UINT_cm;