annotate llvm/test/Transforms/LoopUnroll/unroll-header-exiting-with-phis.ll @ 201:a96fbbdf2d0f

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 04 Jun 2021 21:07:06 +0900
parents 0572611fdcc8
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
anatofuz
parents:
diff changeset
2 ; RUN: opt < %s -S -loop-unroll -unroll-allow-partial | FileCheck %s
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 ; The phi which acts as input to func should not be undef. It should
anatofuz
parents:
diff changeset
5 ; have its loop-carried value (the load in for.cond) replaced accordingly
anatofuz
parents:
diff changeset
6 ; after unrolling the loop.
anatofuz
parents:
diff changeset
7
anatofuz
parents:
diff changeset
8 define i16 @full_unroll(i16* %A) {
anatofuz
parents:
diff changeset
9 ; CHECK-LABEL: @full_unroll(
anatofuz
parents:
diff changeset
10 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
11 ; CHECK-NEXT: br label [[FOR_COND:%.*]]
anatofuz
parents:
diff changeset
12 ; CHECK: for.cond:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
13 ; CHECK-NEXT: [[TMP2:%.*]] = load i16, i16* [[A:%.*]], align 2
150
anatofuz
parents:
diff changeset
14 ; CHECK-NEXT: br label [[FOR_COND_CLEANUP3:%.*]]
anatofuz
parents:
diff changeset
15 ; CHECK: for.cond.cleanup:
anatofuz
parents:
diff changeset
16 ; CHECK-NEXT: [[DOTLCSSA10_LCSSA:%.*]] = phi i16 [ [[TMP2_2:%.*]], [[FOR_COND_CLEANUP3_2:%.*]] ]
anatofuz
parents:
diff changeset
17 ; CHECK-NEXT: [[TMP3:%.*]] = call i16 @func(i16 [[DOTLCSSA10_LCSSA]])
anatofuz
parents:
diff changeset
18 ; CHECK-NEXT: ret i16 0
anatofuz
parents:
diff changeset
19 ; CHECK: for.cond.cleanup3:
anatofuz
parents:
diff changeset
20 ; CHECK-NEXT: [[PTR_1:%.*]] = getelementptr inbounds i16, i16* [[A]], i64 1
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
21 ; CHECK-NEXT: [[TMP2_1:%.*]] = load i16, i16* [[PTR_1]], align 2
150
anatofuz
parents:
diff changeset
22 ; CHECK-NEXT: br label [[FOR_COND_CLEANUP3_1:%.*]]
anatofuz
parents:
diff changeset
23 ; CHECK: for.cond.cleanup3.1:
anatofuz
parents:
diff changeset
24 ; CHECK-NEXT: [[PTR_2:%.*]] = getelementptr inbounds i16, i16* [[A]], i64 2
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
25 ; CHECK-NEXT: [[TMP2_2]] = load i16, i16* [[PTR_2]], align 2
150
anatofuz
parents:
diff changeset
26 ; CHECK-NEXT: br label [[FOR_COND_CLEANUP3_2]]
anatofuz
parents:
diff changeset
27 ; CHECK: for.cond.cleanup3.2:
anatofuz
parents:
diff changeset
28 ; CHECK-NEXT: [[PTR_3:%.*]] = getelementptr inbounds i16, i16* [[A]], i64 3
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
29 ; CHECK-NEXT: [[TMP2_3:%.*]] = load i16, i16* [[PTR_3]], align 2
150
anatofuz
parents:
diff changeset
30 ; CHECK-NEXT: br i1 false, label [[FOR_COND_CLEANUP3_3:%.*]], label [[FOR_COND_CLEANUP:%.*]]
anatofuz
parents:
diff changeset
31 ; CHECK: for.cond.cleanup3.3:
anatofuz
parents:
diff changeset
32 ; CHECK-NEXT: unreachable
anatofuz
parents:
diff changeset
33 ;
anatofuz
parents:
diff changeset
34 entry:
anatofuz
parents:
diff changeset
35 br label %for.cond
anatofuz
parents:
diff changeset
36
anatofuz
parents:
diff changeset
37 for.cond: ; preds = %for.cond.cleanup3, %entry
anatofuz
parents:
diff changeset
38 %.lcssa10 = phi i16 [ 123, %entry ], [ %.lcssa, %for.cond.cleanup3 ]
anatofuz
parents:
diff changeset
39 %i.0 = phi i64 [ 0, %entry ], [ %inc9, %for.cond.cleanup3 ]
anatofuz
parents:
diff changeset
40 %ptr = getelementptr inbounds i16, i16* %A, i64 %i.0
anatofuz
parents:
diff changeset
41 %tmp2 = load i16, i16* %ptr
anatofuz
parents:
diff changeset
42 %cmp = icmp ult i64 %i.0, 3
anatofuz
parents:
diff changeset
43 br i1 %cmp, label %for.cond.cleanup3, label %for.cond.cleanup
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 for.cond.cleanup: ; preds = %for.cond
anatofuz
parents:
diff changeset
46 %.lcssa10.lcssa = phi i16 [ %.lcssa10, %for.cond ]
anatofuz
parents:
diff changeset
47 %tmp3 = call i16 (i16) @func(i16 %.lcssa10.lcssa)
anatofuz
parents:
diff changeset
48 ret i16 0
anatofuz
parents:
diff changeset
49
anatofuz
parents:
diff changeset
50 for.cond.cleanup3: ; preds = %for.cond
anatofuz
parents:
diff changeset
51 %.lcssa = phi i16 [ %tmp2, %for.cond ]
anatofuz
parents:
diff changeset
52 %inc9 = add i64 %i.0, 1
anatofuz
parents:
diff changeset
53 br label %for.cond
anatofuz
parents:
diff changeset
54 }
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 define i16 @partial_unroll(i16* %A) {
anatofuz
parents:
diff changeset
57 ; CHECK-LABEL: @partial_unroll(
anatofuz
parents:
diff changeset
58 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
59 ; CHECK-NEXT: br label [[FOR_COND:%.*]]
anatofuz
parents:
diff changeset
60 ; CHECK: for.cond:
anatofuz
parents:
diff changeset
61 ; CHECK-NEXT: [[I_0:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC9_2:%.*]], [[FOR_COND_CLEANUP3_2:%.*]] ]
anatofuz
parents:
diff changeset
62 ; CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds i16, i16* [[A:%.*]], i64 [[I_0]]
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
63 ; CHECK-NEXT: [[TMP2:%.*]] = load i16, i16* [[PTR]], align 2
150
anatofuz
parents:
diff changeset
64 ; CHECK-NEXT: br label [[FOR_COND_CLEANUP3:%.*]]
anatofuz
parents:
diff changeset
65 ; CHECK: for.cond.cleanup:
anatofuz
parents:
diff changeset
66 ; CHECK-NEXT: [[DOTLCSSA10_LCSSA:%.*]] = phi i16 [ [[TMP2_1:%.*]], [[FOR_COND_CLEANUP3_1:%.*]] ]
anatofuz
parents:
diff changeset
67 ; CHECK-NEXT: [[TMP3:%.*]] = call i16 @func(i16 [[DOTLCSSA10_LCSSA]])
anatofuz
parents:
diff changeset
68 ; CHECK-NEXT: ret i16 0
anatofuz
parents:
diff changeset
69 ; CHECK: for.cond.cleanup3:
anatofuz
parents:
diff changeset
70 ; CHECK-NEXT: [[INC9:%.*]] = add nuw nsw i64 [[I_0]], 1
anatofuz
parents:
diff changeset
71 ; CHECK-NEXT: [[PTR_1:%.*]] = getelementptr inbounds i16, i16* [[A]], i64 [[INC9]]
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
72 ; CHECK-NEXT: [[TMP2_1]] = load i16, i16* [[PTR_1]], align 2
150
anatofuz
parents:
diff changeset
73 ; CHECK-NEXT: br label [[FOR_COND_CLEANUP3_1]]
anatofuz
parents:
diff changeset
74 ; CHECK: for.cond.cleanup3.1:
anatofuz
parents:
diff changeset
75 ; CHECK-NEXT: [[INC9_1:%.*]] = add nuw nsw i64 [[INC9]], 1
anatofuz
parents:
diff changeset
76 ; CHECK-NEXT: [[PTR_2:%.*]] = getelementptr inbounds i16, i16* [[A]], i64 [[INC9_1]]
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
77 ; CHECK-NEXT: [[TMP2_2:%.*]] = load i16, i16* [[PTR_2]], align 2
150
anatofuz
parents:
diff changeset
78 ; CHECK-NEXT: [[CMP_2:%.*]] = icmp ult i64 [[INC9_1]], 200
anatofuz
parents:
diff changeset
79 ; CHECK-NEXT: br i1 [[CMP_2]], label [[FOR_COND_CLEANUP3_2]], label [[FOR_COND_CLEANUP:%.*]]
anatofuz
parents:
diff changeset
80 ; CHECK: for.cond.cleanup3.2:
anatofuz
parents:
diff changeset
81 ; CHECK-NEXT: [[INC9_2]] = add nuw nsw i64 [[INC9_1]], 1
anatofuz
parents:
diff changeset
82 ; CHECK-NEXT: br label [[FOR_COND]]
anatofuz
parents:
diff changeset
83 ;
anatofuz
parents:
diff changeset
84 entry:
anatofuz
parents:
diff changeset
85 br label %for.cond
anatofuz
parents:
diff changeset
86
anatofuz
parents:
diff changeset
87 for.cond: ; preds = %for.cond.cleanup3, %entry
anatofuz
parents:
diff changeset
88 %.lcssa10 = phi i16 [ 123, %entry ], [ %.lcssa, %for.cond.cleanup3 ]
anatofuz
parents:
diff changeset
89 %i.0 = phi i64 [ 0, %entry ], [ %inc9, %for.cond.cleanup3 ]
anatofuz
parents:
diff changeset
90 %ptr = getelementptr inbounds i16, i16* %A, i64 %i.0
anatofuz
parents:
diff changeset
91 %tmp2 = load i16, i16* %ptr
anatofuz
parents:
diff changeset
92 %cmp = icmp ult i64 %i.0, 200
anatofuz
parents:
diff changeset
93 br i1 %cmp, label %for.cond.cleanup3, label %for.cond.cleanup
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 for.cond.cleanup: ; preds = %for.cond
anatofuz
parents:
diff changeset
96 %.lcssa10.lcssa = phi i16 [ %.lcssa10, %for.cond ]
anatofuz
parents:
diff changeset
97 %tmp3 = call i16 (i16) @func(i16 %.lcssa10.lcssa)
anatofuz
parents:
diff changeset
98 ret i16 0
anatofuz
parents:
diff changeset
99
anatofuz
parents:
diff changeset
100 for.cond.cleanup3: ; preds = %for.cond
anatofuz
parents:
diff changeset
101 %.lcssa = phi i16 [ %tmp2, %for.cond ]
anatofuz
parents:
diff changeset
102 %inc9 = add i64 %i.0, 1
anatofuz
parents:
diff changeset
103 br label %for.cond
anatofuz
parents:
diff changeset
104 }
anatofuz
parents:
diff changeset
105
anatofuz
parents:
diff changeset
106 declare i16 @func(i16)
anatofuz
parents:
diff changeset
107