1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=loop-unroll -unroll-verify-domtree -verify-dom-info -S %s | FileCheck %s 3 4define void @test() { 5; CHECK-LABEL: @test( 6; CHECK-NEXT: entry: 7; CHECK-NEXT: br label [[LOOP_HEADER:%.*]] 8; CHECK: loop.header: 9; CHECK-NEXT: br label [[LOOP_LATCH:%.*]] 10; CHECK: loop.latch: 11; CHECK-NEXT: br i1 true, label [[LOOP_HEADER_1:%.*]], label [[LOOP_EXIT:%.*]] 12; CHECK: loop.header.1: 13; CHECK-NEXT: br i1 true, label [[EXIT_LOOPEXIT:%.*]], label [[LOOP_LATCH_1:%.*]] 14; CHECK: loop.latch.1: 15; CHECK-NEXT: br label [[LOOP_EXIT]] 16; CHECK: loop.exit: 17; CHECK-NEXT: br label [[EXIT:%.*]] 18; CHECK: exit.loopexit: 19; CHECK-NEXT: br label [[EXIT]] 20; CHECK: exit: 21; CHECK-NEXT: ret void 22; 23entry: 24 br label %loop.header 25 26loop.header: 27 %exitcond = phi i1 [ true, %loop.latch ], [ false, %entry ] 28 br i1 %exitcond, label %exit, label %loop.latch 29 30loop.latch: 31 br i1 true, label %loop.header, label %loop.exit 32 33loop.exit: 34 br label %exit 35 36exit: 37 ret void 38} 39 40define void @exiting_terminator_is_switch() { 41; CHECK-LABEL: @exiting_terminator_is_switch( 42; CHECK-NEXT: bb: 43; CHECK-NEXT: br label [[LOOP:%.*]] 44; CHECK: loop: 45; CHECK-NEXT: switch i1 true, label [[LOOP_BACKEDGE:%.*]] [ 46; CHECK-NEXT: i1 true, label [[EXIT:%.*]] 47; CHECK-NEXT: i1 false, label [[LOOP_BACKEDGE]] 48; CHECK-NEXT: ] 49; CHECK: loop.backedge: 50; CHECK-NEXT: unreachable 51; CHECK: exit: 52; CHECK-NEXT: ret void 53; 54bb: 55 br label %loop 56 57loop: 58 switch i1 true, label %loop [ 59 i1 true, label %exit 60 i1 false, label %loop 61 ] 62 63exit: 64 ret void 65} 66