summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-07-01 15:48:18 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-07-01 15:48:18 +0000
commitcda82f0bb6fd0577b9f2f8185f3b6be20ea96e58 (patch)
tree98f86aa91e038573d4517bd8e4d1661ea3f9649b /llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
parent7cfd99ab15d088d626a5272c8b0745b7c0e30068 (diff)
downloadbcm5719-llvm-cda82f0bb6fd0577b9f2f8185f3b6be20ea96e58.tar.gz
bcm5719-llvm-cda82f0bb6fd0577b9f2f8185f3b6be20ea96e58.zip
AMDGPU/GlobalISel: Select G_FRAME_INDEX
llvm-svn: 364789
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
index cc3d58ff102..5eab5cb9227 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
@@ -1014,6 +1014,22 @@ bool AMDGPUInstructionSelector::selectG_BRCOND(MachineInstr &I) const {
return false;
}
+bool AMDGPUInstructionSelector::selectG_FRAME_INDEX(MachineInstr &I) const {
+ MachineBasicBlock *BB = I.getParent();
+ MachineFunction *MF = BB->getParent();
+ MachineRegisterInfo &MRI = MF->getRegInfo();
+
+ Register DstReg = I.getOperand(0).getReg();
+ const RegisterBank *DstRB = RBI.getRegBank(DstReg, MRI, TRI);
+ const bool IsVGPR = DstRB->getID() == AMDGPU::VGPRRegBankID;
+ I.setDesc(TII.get(IsVGPR ? AMDGPU::V_MOV_B32_e32 : AMDGPU::S_MOV_B32));
+ if (IsVGPR)
+ I.addOperand(*MF, MachineOperand::CreateReg(AMDGPU::EXEC, false, true));
+
+ return RBI.constrainGenericRegister(
+ DstReg, IsVGPR ? AMDGPU::VGPR_32RegClass : AMDGPU::SReg_32RegClass, MRI);
+}
+
bool AMDGPUInstructionSelector::select(MachineInstr &I,
CodeGenCoverage &CoverageInfo) const {
@@ -1071,6 +1087,8 @@ bool AMDGPUInstructionSelector::select(MachineInstr &I,
return false;
case TargetOpcode::G_BRCOND:
return selectG_BRCOND(I);
+ case TargetOpcode::G_FRAME_INDEX:
+ return selectG_FRAME_INDEX(I);
}
return false;
}
OpenPOWER on IntegriCloud