2018-06-22 10:43:41 +08:00
|
|
|
; RUN: opt -simple-loop-unswitch -loop-deletion -S < %s | FileCheck %s
|
2018-12-04 22:23:37 +08:00
|
|
|
; RUN: opt -simple-loop-unswitch -enable-mssa-loop-dependency=true -verify-memoryssa -loop-deletion -S < %s | FileCheck %s
|
2018-06-22 10:43:41 +08:00
|
|
|
;
|
|
|
|
; Check that when we do unswitching where we re-enqueue the loop to be processed
|
|
|
|
; again, but manage to delete the loop before ever getting to iterate on it, it
|
|
|
|
; doesn't crash the legacy pass manager.
|
|
|
|
|
|
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
|
|
|
|
define void @pr37888() {
|
|
|
|
; CHECK-LABEL: define void @pr37888()
|
|
|
|
entry:
|
|
|
|
%tobool = icmp ne i16 undef, 0
|
|
|
|
br label %for.body
|
|
|
|
; CHECK: %[[TOBOOL:.*]] = icmp ne
|
|
|
|
; CHECK-NEXT: br i1 %[[TOBOOL]], label %if.then, label %[[ENTRY_SPLIT:.*]]
|
|
|
|
;
|
|
|
|
; CHECK: [[ENTRY_SPLIT]]:
|
|
|
|
; CHECK-NEXT: br label %for.end
|
|
|
|
|
|
|
|
for.body:
|
|
|
|
br i1 %tobool, label %if.then, label %if.end
|
|
|
|
|
|
|
|
if.then:
|
|
|
|
unreachable
|
|
|
|
; CHECK: if.then:
|
|
|
|
; CHECK-NEXT: unreachable
|
|
|
|
|
|
|
|
if.end:
|
|
|
|
br label %for.inc
|
|
|
|
|
|
|
|
for.inc:
|
|
|
|
br i1 undef, label %for.body, label %for.end
|
|
|
|
|
|
|
|
for.end:
|
|
|
|
ret void
|
|
|
|
; CHECK: for.end:
|
|
|
|
; CHECK-NEXT: ret void
|
|
|
|
}
|