16ecc9921SNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*5103ef64SRoman Lebedev; RUN: opt -S -passes=loop-unroll -unroll-runtime -unroll-runtime-multi-exit < %s | FileCheck %s 36ecc9921SNikita Popov 46ecc9921SNikita Popov; This loop has a known trip count on the non-latch exit. When performing 56ecc9921SNikita Popov; runtime unrolling (at least when using a prologue rather than epilogue) we 66ecc9921SNikita Popov; should not fold that exit based on known trip count information prior to 76ecc9921SNikita Popov; prologue insertion, as that may change the trip count for the modified loop. 86ecc9921SNikita Popov 96ecc9921SNikita Popovdefine void @test(i32 %s, i32 %n) { 106ecc9921SNikita Popov; CHECK-LABEL: @test( 116ecc9921SNikita Popov; CHECK-NEXT: entry: 126ecc9921SNikita Popov; CHECK-NEXT: [[N2:%.*]] = add i32 [[S:%.*]], 123 136ecc9921SNikita Popov; CHECK-NEXT: br label [[LOOP:%.*]] 146ecc9921SNikita Popov; CHECK: loop: 151ae266f4SNikita Popov; CHECK-NEXT: [[I:%.*]] = phi i32 [ [[S]], [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[LATCH:%.*]] ] 166ecc9921SNikita Popov; CHECK-NEXT: [[C1:%.*]] = icmp eq i32 [[I]], [[N2]] 171ae266f4SNikita Popov; CHECK-NEXT: br i1 [[C1]], label [[EXIT1:%.*]], label [[LATCH]] 186ecc9921SNikita Popov; CHECK: latch: 191ae266f4SNikita Popov; CHECK-NEXT: [[C2:%.*]] = icmp eq i32 [[I]], [[N:%.*]] 201ae266f4SNikita Popov; CHECK-NEXT: [[I_INC]] = add i32 [[I]], 1 211ae266f4SNikita Popov; CHECK-NEXT: br i1 [[C2]], label [[EXIT2:%.*]], label [[LOOP]] 226ecc9921SNikita Popov; CHECK: exit1: 236ecc9921SNikita Popov; CHECK-NEXT: ret void 246ecc9921SNikita Popov; CHECK: exit2: 256ecc9921SNikita Popov; CHECK-NEXT: ret void 266ecc9921SNikita Popov; 276ecc9921SNikita Popoventry: 286ecc9921SNikita Popov %n2 = add i32 %s, 123 296ecc9921SNikita Popov br label %loop 306ecc9921SNikita Popov 316ecc9921SNikita Popovloop: 326ecc9921SNikita Popov %i = phi i32 [ %s, %entry], [ %i.inc, %latch ] 336ecc9921SNikita Popov %c1 = icmp eq i32 %i, %n2 346ecc9921SNikita Popov br i1 %c1, label %exit1, label %latch 356ecc9921SNikita Popov 366ecc9921SNikita Popovlatch: 376ecc9921SNikita Popov %c2 = icmp eq i32 %i, %n 386ecc9921SNikita Popov %i.inc = add i32 %i, 1 396ecc9921SNikita Popov br i1 %c2, label %exit2, label %loop 406ecc9921SNikita Popov 416ecc9921SNikita Popovexit1: 426ecc9921SNikita Popov ret void 436ecc9921SNikita Popov 446ecc9921SNikita Popovexit2: 456ecc9921SNikita Popov ret void 466ecc9921SNikita Popov} 47