11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2- ; RUN: opt --passes=loop-unroll -unroll-runtime-other-exit-predictable=1 -S %s | FileCheck %s
2+ ; RUN: opt --passes=loop-unroll -unroll-runtime=true -unroll-runtime -other-exit-predictable=1 -S %s | FileCheck %s
33target triple = "x86_64-unknown-linux-gnu"
44
55define void @test (i64 %0 , ptr %1 ) #0 {
66; CHECK-LABEL: define void @test(
7- ; CHECK-SAME: i64 [[TMP0:%.*]], ptr [[TMP1:%.*]]) #[[ATTR0:[0-9]+]] {
7+ ; CHECK-SAME: i64 [[TMP0:%.*]], ptr [[TMP1:%.*]]) {
88; CHECK-NEXT: [[ENTRY:.*:]]
99; CHECK-NEXT: [[B1:%.*]] = icmp eq i64 [[TMP0]], 0
1010; CHECK-NEXT: br i1 [[B1]], label %[[AFTER:.*]], label %[[BODY_LR_PH:.*]]
1111; CHECK: [[BODY_LR_PH]]:
1212; CHECK-NEXT: [[TMP5:%.*]] = sub i64 0, [[TMP0]]
1313; CHECK-NEXT: [[TMP2:%.*]] = freeze i64 [[TMP5]]
1414; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[TMP2]], -1
15- ; CHECK-NEXT: [[XTRAITER:%.*]] = and i64 [[TMP2]], 3
15+ ; CHECK-NEXT: [[XTRAITER:%.*]] = and i64 [[TMP2]], 7
1616; CHECK-NEXT: [[LCMP_MOD:%.*]] = icmp ne i64 [[XTRAITER]], 0
1717; CHECK-NEXT: br i1 [[LCMP_MOD]], label %[[BODY_PROL_PREHEADER:.*]], label %[[BODY_PROL_LOOPEXIT:.*]]
1818; CHECK: [[BODY_PROL_PREHEADER]]:
@@ -35,22 +35,30 @@ define void @test(i64 %0, ptr %1) #0 {
3535; CHECK-NEXT: br label %[[BODY_PROL_LOOPEXIT]]
3636; CHECK: [[BODY_PROL_LOOPEXIT]]:
3737; CHECK-NEXT: [[A2_UNR:%.*]] = phi i64 [ [[TMP0]], %[[BODY_LR_PH]] ], [ [[A2_UNR_PH]], %[[BODY_PROL_LOOPEXIT_UNR_LCSSA]] ]
38- ; CHECK-NEXT: [[TMP4 :%.*]] = icmp ult i64 [[TMP3]], 3
39- ; CHECK-NEXT: br i1 [[TMP4 ]], label %[[HEADER_AFTER_CRIT_EDGE:.*]], label %[[BODY_LR_PH_NEW:.*]]
38+ ; CHECK-NEXT: [[TMP6 :%.*]] = icmp ult i64 [[TMP3]], 7
39+ ; CHECK-NEXT: br i1 [[TMP6 ]], label %[[HEADER_AFTER_CRIT_EDGE:.*]], label %[[BODY_LR_PH_NEW:.*]]
4040; CHECK: [[BODY_LR_PH_NEW]]:
4141; CHECK-NEXT: br label %[[BODY:.*]]
4242; CHECK: [[HEADER:.*]]:
4343; CHECK-NEXT: br i1 false, label %[[END_LOOPEXIT:.*]], label %[[HEADER_1:.*]]
4444; CHECK: [[HEADER_1]]:
4545; CHECK-NEXT: br i1 false, label %[[END_LOOPEXIT]], label %[[HEADER_2:.*]]
4646; CHECK: [[HEADER_2]]:
47- ; CHECK-NEXT: [[C_7:%.*]] = add i64 [[A2:%.*]], 4
4847; CHECK-NEXT: br i1 false, label %[[END_LOOPEXIT]], label %[[HEADER_3:.*]]
4948; CHECK: [[HEADER_3]]:
49+ ; CHECK-NEXT: br i1 false, label %[[END_LOOPEXIT]], label %[[HEADER_4:.*]]
50+ ; CHECK: [[HEADER_4]]:
51+ ; CHECK-NEXT: br i1 false, label %[[END_LOOPEXIT]], label %[[HEADER_5:.*]]
52+ ; CHECK: [[HEADER_5]]:
53+ ; CHECK-NEXT: br i1 false, label %[[END_LOOPEXIT]], label %[[HEADER_6:.*]]
54+ ; CHECK: [[HEADER_6]]:
55+ ; CHECK-NEXT: [[C_7:%.*]] = add i64 [[A2:%.*]], 8
56+ ; CHECK-NEXT: br i1 false, label %[[END_LOOPEXIT]], label %[[HEADER_7:.*]]
57+ ; CHECK: [[HEADER_7]]:
5058; CHECK-NEXT: [[B_7:%.*]] = icmp eq i64 [[C_7]], 0
5159; CHECK-NEXT: br i1 [[B_7]], label %[[HEADER_AFTER_CRIT_EDGE_UNR_LCSSA:.*]], label %[[BODY]]
5260; CHECK: [[BODY]]:
53- ; CHECK-NEXT: [[A2]] = phi i64 [ [[A2_UNR]], %[[BODY_LR_PH_NEW]] ], [ [[C_7]], %[[HEADER_3 ]] ]
61+ ; CHECK-NEXT: [[A2]] = phi i64 [ [[A2_UNR]], %[[BODY_LR_PH_NEW]] ], [ [[C_7]], %[[HEADER_7 ]] ]
5462; CHECK-NEXT: [[D:%.*]] = load i32, ptr [[TMP1]], align 4
5563; CHECK-NEXT: [[E:%.*]] = icmp eq i32 [[D]], 0
5664; CHECK-NEXT: br i1 [[E]], label %[[END_LOOPEXIT]], label %[[HEADER]]
@@ -92,7 +100,6 @@ after:
92100
93101declare void @foo ()
94102
95- attributes #0 = { "tune-cpu" ="generic" }
96103;.
97104; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}
98105; CHECK: [[META1]] = !{!"llvm.loop.unroll.disable"}
0 commit comments