; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -passes=loop-unroll -unroll-verify-domtree -verify-dom-info -S %s | FileCheck %s define void @test() { ; CHECK-LABEL: @test( ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[LOOP_HEADER:%.*]] ; CHECK: loop.header: ; CHECK-NEXT: br label [[LOOP_LATCH:%.*]] ; CHECK: loop.latch: ; CHECK-NEXT: br i1 true, label [[LOOP_HEADER_1:%.*]], label [[LOOP_EXIT:%.*]] ; CHECK: loop.header.1: ; CHECK-NEXT: br i1 true, label [[EXIT_LOOPEXIT:%.*]], label [[LOOP_LATCH_1:%.*]] ; CHECK: loop.latch.1: ; CHECK-NEXT: br label [[LOOP_EXIT]] ; CHECK: loop.exit: ; CHECK-NEXT: br label [[EXIT:%.*]] ; CHECK: exit.loopexit: ; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: ; CHECK-NEXT: ret void ; entry: br label %loop.header loop.header: %exitcond = phi i1 [ true, %loop.latch ], [ false, %entry ] br i1 %exitcond, label %exit, label %loop.latch loop.latch: br i1 true, label %loop.header, label %loop.exit loop.exit: br label %exit exit: ret void } define void @exiting_terminator_is_switch() { ; CHECK-LABEL: @exiting_terminator_is_switch( ; CHECK-NEXT: bb: ; CHECK-NEXT: br label [[LOOP:%.*]] ; CHECK: loop: ; CHECK-NEXT: switch i1 true, label [[LOOP_BACKEDGE:%.*]] [ ; CHECK-NEXT: i1 true, label [[EXIT:%.*]] ; CHECK-NEXT: i1 false, label [[LOOP_BACKEDGE]] ; CHECK-NEXT: ] ; CHECK: loop.backedge: ; CHECK-NEXT: unreachable ; CHECK: exit: ; CHECK-NEXT: ret void ; bb: br label %loop loop: switch i1 true, label %loop [ i1 true, label %exit i1 false, label %loop ] exit: ret void }