1 ; RUN: opt -simple-loop-unswitch -loop-deletion -S < %s | FileCheck %s 2 ; 3 ; Check that when we do unswitching where we re-enqueue the loop to be processed 4 ; again, but manage to delete the loop before ever getting to iterate on it, it 5 ; doesn't crash the legacy pass manager. 6 7 target triple = "x86_64-unknown-linux-gnu" 8 9 define void @pr37888() { 10 ; CHECK-LABEL: define void @pr37888() 11 entry: 12 %tobool = icmp ne i16 undef, 0 13 br label %for.body 14 ; CHECK: %[[TOBOOL:.*]] = icmp ne 15 ; CHECK-NEXT: br i1 %[[TOBOOL]], label %if.then, label %[[ENTRY_SPLIT:.*]] 16 ; 17 ; CHECK: [[ENTRY_SPLIT]]: 18 ; CHECK-NEXT: br label %for.end 19 20 for.body: 21 br i1 %tobool, label %if.then, label %if.end 22 23 if.then: 24 unreachable 25 ; CHECK: if.then: 26 ; CHECK-NEXT: unreachable 27 28 if.end: 29 br label %for.inc 30 31 for.inc: 32 br i1 undef, label %for.body, label %for.end 33 34 for.end: 35 ret void 36 ; CHECK: for.end: 37 ; CHECK-NEXT: ret void 38 } 39