1 //===-- SIInstrInfo.cpp - SI Instruction Information ---------------------===//
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 // SI Implementation of TargetInstrInfo.
12 //===----------------------------------------------------------------------===//
15 #include "SIInstrInfo.h"
16 #include "AMDGPUTargetMachine.h"
17 #include "llvm/CodeGen/MachineInstrBuilder.h"
18 #include "llvm/CodeGen/MachineRegisterInfo.h"
19 #include "llvm/MC/MCInstrDesc.h"
25 SIInstrInfo::SIInstrInfo(AMDGPUTargetMachine
&tm
)
26 : AMDGPUInstrInfo(tm
),
31 const SIRegisterInfo
&SIInstrInfo::getRegisterInfo() const
37 SIInstrInfo::copyPhysReg(MachineBasicBlock
&MBB
,
38 MachineBasicBlock::iterator MI
, DebugLoc DL
,
39 unsigned DestReg
, unsigned SrcReg
,
43 // If we are trying to copy to or from SCC, there is a bug somewhere else in
44 // the backend. While it may be theoretically possible to do this, it should
45 // never be necessary.
46 assert(DestReg
!= AMDGPU::SCC
&& SrcReg
!= AMDGPU::SCC
);
48 BuildMI(MBB
, MI
, DL
, get(AMDGPU::V_MOV_B32_e32
), DestReg
)
49 .addReg(SrcReg
, getKillRegState(KillSrc
));
52 MachineInstr
* SIInstrInfo::getMovImmInstr(MachineFunction
*MF
, unsigned DstReg
,
55 MachineInstr
* MI
= MF
->CreateMachineInstr(get(AMDGPU::V_MOV_IMM_I32
), DebugLoc());
56 MachineInstrBuilder(MI
).addReg(DstReg
, RegState::Define
);
57 MachineInstrBuilder(MI
).addImm(Imm
);
63 bool SIInstrInfo::isMov(unsigned Opcode
) const
66 default: return false;
67 case AMDGPU::S_MOV_B32
:
68 case AMDGPU::S_MOV_B64
:
69 case AMDGPU::V_MOV_B32_e32
:
70 case AMDGPU::V_MOV_B32_e64
:
71 case AMDGPU::V_MOV_IMM_F32
:
72 case AMDGPU::V_MOV_IMM_I32
:
73 case AMDGPU::S_MOV_IMM_I32
: