54 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs2; RUN: opt < %s -passes=loop-extract -S | FileCheck %s3 4; This test used to enter an infinite loop, until out of memory (PR3082).5 6define void @test(i1 %arg) {7 8entry:9 br label %loopentry10 11loopentry:12 br i1 %arg, label %exit.1, label %loopexit13 14loopexit:15 br i1 %arg, label %loopentry, label %exit.016 17exit.0:18 br label %unified19 20exit.1:21 br label %unified22 23unified:24 ret void25}26; CHECK-LABEL: define {{[^@]+}}@test27; CHECK-SAME: (i1 [[ARG:%.*]]) {28; CHECK-NEXT: entry:29; CHECK-NEXT: br label [[CODEREPL:%.*]]30; CHECK: codeRepl:31; CHECK-NEXT: [[TARGETBLOCK:%.*]] = call i1 @test.loopentry(i1 [[ARG]])32; CHECK-NEXT: br i1 [[TARGETBLOCK]], label [[EXIT_1:%.*]], label [[EXIT_0:%.*]]33; CHECK: exit.0:34; CHECK-NEXT: br label [[UNIFIED:%.*]]35; CHECK: exit.1:36; CHECK-NEXT: br label [[UNIFIED]]37; CHECK: unified:38; CHECK-NEXT: ret void39;40;41; CHECK-LABEL: define {{[^@]+}}@test.loopentry42; CHECK-SAME: (i1 [[ARG:%.*]]) {43; CHECK-NEXT: newFuncRoot:44; CHECK-NEXT: br label [[LOOPENTRY:%.*]]45; CHECK: loopentry:46; CHECK-NEXT: br i1 [[ARG]], label [[EXIT_1_EXITSTUB:%.*]], label [[LOOPEXIT:%.*]]47; CHECK: loopexit:48; CHECK-NEXT: br i1 [[ARG]], label [[LOOPENTRY]], label [[EXIT_0_EXITSTUB:%.*]]49; CHECK: exit.1.exitStub:50; CHECK-NEXT: ret i1 true51; CHECK: exit.0.exitStub:52; CHECK-NEXT: ret i1 false53;54