aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2016-07-09 17:18:39 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2016-07-09 17:18:39 +0000
commit48d70cb4862050446de3207ee22bba780c556a7e (patch)
tree0f0409f531ba1fc2426310645b2a46c96d3fe556 /llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
parent2a19454a86fcd24ce7b5d5cbd76f0283737fd827 (diff)
downloadllvm-48d70cb4862050446de3207ee22bba780c556a7e.zip
llvm-48d70cb4862050446de3207ee22bba780c556a7e.tar.gz
llvm-48d70cb4862050446de3207ee22bba780c556a7e.tar.bz2
Revert "AMDGPU: Remove unused control flow intrinsic"
llvm-svn: 274978
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp b/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
index 1ba14cd..3d6fc9e 100644
--- a/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
+++ b/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
@@ -80,6 +80,7 @@ private:
void If(MachineInstr &MI);
void Else(MachineInstr &MI, bool ExecModified);
+ void Break(MachineInstr &MI);
void IfBreak(MachineInstr &MI);
void ElseBreak(MachineInstr &MI);
void Loop(MachineInstr &MI);
@@ -276,6 +277,20 @@ void SILowerControlFlow::Else(MachineInstr &MI, bool ExecModified) {
MI.eraseFromParent();
}
+void SILowerControlFlow::Break(MachineInstr &MI) {
+ MachineBasicBlock &MBB = *MI.getParent();
+ DebugLoc DL = MI.getDebugLoc();
+
+ unsigned Dst = MI.getOperand(0).getReg();
+ unsigned Src = MI.getOperand(1).getReg();
+
+ BuildMI(MBB, &MI, DL, TII->get(AMDGPU::S_OR_B64), Dst)
+ .addReg(AMDGPU::EXEC)
+ .addReg(Src);
+
+ MI.eraseFromParent();
+}
+
void SILowerControlFlow::IfBreak(MachineInstr &MI) {
MachineBasicBlock &MBB = *MI.getParent();
DebugLoc DL = MI.getDebugLoc();
@@ -661,6 +676,10 @@ bool SILowerControlFlow::runOnMachineFunction(MachineFunction &MF) {
Else(MI, ExecModified);
break;
+ case AMDGPU::SI_BREAK:
+ Break(MI);
+ break;
+
case AMDGPU::SI_IF_BREAK:
IfBreak(MI);
break;