summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2014-01-23 18:49:34 +0000
committerTom Stellard <thomas.stellard@amd.com>2014-01-23 18:49:34 +0000
commit63875e620fd821a77fe27d2b3212ac42ef3fc403 (patch)
treeb38e290b1a7cb3420b3cb886f42e9bca555bcb7d /lib
parent35f321dde5424977c64933393a4cd86a7fcc0306 (diff)
downloadllvm-63875e620fd821a77fe27d2b3212ac42ef3fc403.tar.gz
llvm-63875e620fd821a77fe27d2b3212ac42ef3fc403.tar.bz2
llvm-63875e620fd821a77fe27d2b3212ac42ef3fc403.tar.xz
R600: Remove successive JUMP in AnalyzeBranch when AllowModify is true
This fixes a crash in the OpenCV OpenCL test suite. There is no lit test for this, because the test would be very large and could easily be invalidated by changes to the scheduler or other parts of the compiler. Patch by: Vincent Lejeune git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199919 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/R600/R600InstrInfo.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/Target/R600/R600InstrInfo.cpp b/lib/Target/R600/R600InstrInfo.cpp
index c0827fc1ca..2eca6cf432 100644
--- a/lib/Target/R600/R600InstrInfo.cpp
+++ b/lib/Target/R600/R600InstrInfo.cpp
@@ -716,7 +716,13 @@ R600InstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,
return false;
}
- // Get the last instruction in the block.
+ // Remove successive JUMP
+ while (I != MBB.begin() && llvm::prior(I)->getOpcode() == AMDGPU::JUMP) {
+ MachineBasicBlock::iterator PriorI = llvm::prior(I);
+ if (AllowModify)
+ I->removeFromParent();
+ I = PriorI;
+ }
MachineInstr *LastInst = I;
// If there is only one terminator instruction, process it.