diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-02-11 21:12:38 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2014-02-11 21:12:38 +0000 |
commit | 69bc4ddf101663a0b4f23dec25a6f2a2a76699f6 (patch) | |
tree | e6efe7b47022d1f7fee2dc1f87dda9d4948c503b | |
parent | 1e6240a85ddafbd35af931958d38b79b6683f23b (diff) |
R600/SI: Fix assertion on infinite loops.
This isn't the most useful case to fix in the real world,
but bugpoint runs into this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201177 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/R600/SILowerControlFlow.cpp | 6 | ||||
-rw-r--r-- | test/CodeGen/R600/infinite-loop.ll | 17 |
2 files changed, 21 insertions, 2 deletions
diff --git a/lib/Target/R600/SILowerControlFlow.cpp b/lib/Target/R600/SILowerControlFlow.cpp index 4b0952f721a..f6f9016e7ed 100644 --- a/lib/Target/R600/SILowerControlFlow.cpp +++ b/lib/Target/R600/SILowerControlFlow.cpp @@ -283,8 +283,10 @@ void SILowerControlFlowPass::EndCf(MachineInstr &MI) { } void SILowerControlFlowPass::Branch(MachineInstr &MI) { - assert(MI.getOperand(0).getMBB() == MI.getParent()->getNextNode()); - MI.eraseFromParent(); + if (MI.getOperand(0).getMBB() == MI.getParent()->getNextNode()) + MI.eraseFromParent(); + + // If these aren't equal, this is probably an infinite loop. } void SILowerControlFlowPass::Kill(MachineInstr &MI) { diff --git a/test/CodeGen/R600/infinite-loop.ll b/test/CodeGen/R600/infinite-loop.ll new file mode 100644 index 00000000000..a60bc37d659 --- /dev/null +++ b/test/CodeGen/R600/infinite-loop.ll @@ -0,0 +1,17 @@ +; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI %s + +; SI-LABEL: @infinite_loop: +; SI: V_MOV_B32_e32 [[REG:v[0-9]+]], 999 +; SI: BB0_1: +; SI: BUFFER_STORE_DWORD [[REG]] +; SI: S_WAITCNT vmcnt(0) expcnt(0) +; SI: S_BRANCH BB0_1 +define void @infinite_loop(i32 addrspace(1)* %out) { +entry: + br label %for.body + +for.body: ; preds = %entry, %for.body + store i32 999, i32 addrspace(1)* %out, align 4 + br label %for.body +} + |