[llvm] r372405 - Remove assert from MachineLoop::getLoopPredecessor()
Stanislav Mekhanoshin via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 20 08:26:10 PDT 2019
Author: rampitec
Date: Fri Sep 20 08:26:10 2019
New Revision: 372405
URL: http://llvm.org/viewvc/llvm-project?rev=372405&view=rev
Log:
Remove assert from MachineLoop::getLoopPredecessor()
According to the documentation method returns predecessor
if the given loop's header has exactly one unique predecessor
outside the loop. Otherwise return null.
In reality it asserts if there is no predecessor outside of
the loop.
The testcase has the loop where predecessors outside of the
loop were not identified as analyzeBranch() was unable to
process the mask branch and returned true. That is also not
correct to assert for the truly dead loops.
Differential Revision: https://reviews.llvm.org/D67634
Added:
llvm/trunk/test/CodeGen/AMDGPU/loop_header_nopred.mir
Modified:
llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h
Modified: llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h?rev=372405&r1=372404&r2=372405&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h (original)
+++ llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h Fri Sep 20 08:26:10 2019
@@ -200,8 +200,6 @@ BlockT *LoopBase<BlockT, LoopT>::getLoop
}
}
- // Make sure there is only one exit out of the preheader.
- assert(Out && "Header of loop has no predecessors from outside loop?");
return Out;
}
Added: llvm/trunk/test/CodeGen/AMDGPU/loop_header_nopred.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/loop_header_nopred.mir?rev=372405&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/loop_header_nopred.mir (added)
+++ llvm/trunk/test/CodeGen/AMDGPU/loop_header_nopred.mir Fri Sep 20 08:26:10 2019
@@ -0,0 +1,92 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc -march=amdgcn -o - -run-pass=block-placement -mcpu=gfx1010 -mattr=-inst-fwd-prefetch-bug -verify-machineinstrs %s | FileCheck -check-prefix=GCN %s
+
+# Used to fail with
+# Assertion `Out && "Header of loop has no predecessors from outside loop?"
+
+---
+name: loop_header_nopred
+body: |
+ ; GCN-LABEL: name: loop_header_nopred
+ ; GCN: bb.0:
+ ; GCN: successors: %bb.2(0x40000000), %bb.3(0x40000000)
+ ; GCN: S_CBRANCH_VCCZ %bb.3, implicit $vcc
+ ; GCN: S_BRANCH %bb.2
+ ; GCN: bb.6 (align 64):
+ ; GCN: successors: %bb.7(0x04000000), %bb.1(0x7c000000)
+ ; GCN: S_CBRANCH_VCCNZ %bb.7, implicit $vcc
+ ; GCN: bb.1:
+ ; GCN: successors: %bb.2(0x40000000), %bb.3(0x40000000)
+ ; GCN: S_CBRANCH_VCCNZ %bb.2, implicit $vcc
+ ; GCN: bb.3:
+ ; GCN: successors: %bb.4(0x40000000), %bb.6(0x40000000)
+ ; GCN: SI_MASK_BRANCH %bb.6, implicit $exec
+ ; GCN: S_BRANCH %bb.4
+ ; GCN: bb.2 (align 64):
+ ; GCN: successors: %bb.4(0x40000000), %bb.6(0x40000000)
+ ; GCN: SI_MASK_BRANCH %bb.6, implicit $exec
+ ; GCN: S_BRANCH %bb.4
+ ; GCN: bb.4:
+ ; GCN: successors: %bb.5(0x04000000), %bb.4(0x7c000000)
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_NOP 0
+ ; GCN: S_CBRANCH_EXECZ %bb.4, implicit $exec
+ ; GCN: bb.5:
+ ; GCN: successors: %bb.6(0x80000000)
+ ; GCN: S_BRANCH %bb.6
+ ; GCN: bb.7:
+ ; GCN: S_ENDPGM 0
+ bb.0:
+ successors: %bb.1(0x80000000)
+
+ bb.1:
+ successors: %bb.2(0x40000000), %bb.3(0x40000000)
+
+ S_CBRANCH_VCCZ %bb.3, implicit $vcc
+ S_BRANCH %bb.2
+
+ bb.2:
+ successors: %bb.3(0x80000000)
+
+ bb.3:
+ successors: %bb.4(0x40000000), %bb.6(0x40000000)
+
+ SI_MASK_BRANCH %bb.6, implicit $exec
+ S_BRANCH %bb.4
+
+ bb.4:
+ successors: %bb.5(0x04000000), %bb.4(0x7c000000)
+
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_NOP 0
+ S_CBRANCH_EXECZ %bb.4, implicit $exec
+
+ bb.5:
+ successors: %bb.6(0x80000000)
+
+ bb.6:
+ successors: %bb.7(0x04000000), %bb.1(0x7c000000)
+
+ S_CBRANCH_VCCZ %bb.1, implicit $vcc
+
+ bb.7:
+ S_ENDPGM 0
+...
More information about the llvm-commits
mailing list