R600: Remove successive JUMP in AnalyzeBranch when AllowModify is true
authorTom Stellard <thomas.stellard@amd.com>
Thu, 23 Jan 2014 18:49:34 +0000 (18:49 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Thu, 23 Jan 2014 18:49:34 +0000 (18:49 +0000)
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

lib/Target/R600/R600InstrInfo.cpp

index c0827fc1ca40a504f47c98ffbb0a9355afe8b05f..2eca6cf4327169f475e590e164deb9ddb67e66c4 100644 (file)
@@ -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.