44 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=loop-unroll -unroll-runtime %s | FileCheck %s3 4define i32 @pr131465(i1 %x) mustprogress {5; CHECK-LABEL: define i32 @pr131465(6; CHECK-SAME: i1 [[X:%.*]]) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT: [[ENTRY:.*]]:8; CHECK-NEXT: [[INC:%.*]] = zext i1 [[X]] to i329; CHECK-NEXT: br label %[[FOR_BODY:.*]]10; CHECK: [[FOR_BODY]]:11; CHECK-NEXT: [[INDVAR:%.*]] = phi i32 [ 2, %[[ENTRY]] ], [ [[NEXT_1:%.*]], %[[FOR_BODY_1:.*]] ]12; CHECK-NEXT: [[NEXT:%.*]] = add nsw i32 [[INDVAR]], [[INC]]13; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[NEXT]], 214; CHECK-NEXT: br i1 [[EXITCOND]], label %[[FOR_END:.*]], label %[[FOR_BODY_1]], !llvm.loop [[LOOP0:![0-9]+]]15; CHECK: [[FOR_BODY_1]]:16; CHECK-NEXT: [[NEXT_1]] = add nsw i32 [[NEXT]], [[INC]]17; CHECK-NEXT: [[EXITCOND_1:%.*]] = icmp eq i32 [[NEXT_1]], 218; CHECK-NEXT: br i1 [[EXITCOND_1]], label %[[FOR_END]], label %[[FOR_BODY]], !llvm.loop [[LOOP2:![0-9]+]]19; CHECK: [[FOR_END]]:20; CHECK-NEXT: ret i32 021;22entry:23 %inc = zext i1 %x to i3224 br label %for.body25 26for.body:27 %indvar = phi i32 [ 2, %entry ], [ %next, %for.body ]28 %next = add nsw i32 %indvar, %inc29 %exitcond = icmp eq i32 %next, 230 br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !031 32for.end:33 ret i32 034}35 36; Force runtime unrolling.37!0 = !{!0, !{!"llvm.loop.unroll.count", i32 2}}38;.39; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}40; CHECK: [[META1]] = !{!"llvm.loop.unroll.count", i32 2}41; CHECK: [[LOOP2]] = distinct !{[[LOOP2]], [[META3:![0-9]+]]}42; CHECK: [[META3]] = !{!"llvm.loop.unroll.disable"}43;.44