xref: /llvm-project/llvm/test/Transforms/LoopUnroll/loop-branch-folding.ll (revision 1d6a678591076f316bfcaa03a55beba20406dc00)
1*1d6a6785SXiangZhang; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2*1d6a6785SXiangZhang; RUN: opt < %s -S -passes=simplifycfg | FileCheck %s --check-prefixes=CHECK-CFG
3*1d6a6785SXiangZhang; RUN: opt < %s -S -passes=simplifycfg,loop-unroll --unroll-max-upperbound=17 | FileCheck %s --check-prefixes=CHECK-UNROLL
4*1d6a6785SXiangZhang
5*1d6a6785SXiangZhang; This test designed to check:
6*1d6a6785SXiangZhang; We can still unroll loop with 'pragma unroll' if loop count(trip count) was destroyed by previous optimization.
7*1d6a6785SXiangZhang; For exmaple, in following test, loop condition "Dim < 16" was 'merged' with "Dim == Dims" in folding branches
8*1d6a6785SXiangZhang; at simplifycfg. But if custumer mark the loop with "#pragma unroll", we can still successfully unroll it under
9*1d6a6785SXiangZhang; unroll-max-upperbound.
10*1d6a6785SXiangZhang;
11*1d6a6785SXiangZhang; __device__ void func(int Idx, int *Arr[], int Dims, int *Out) {
12*1d6a6785SXiangZhang;   #pragma unroll
13*1d6a6785SXiangZhang;   for (int Dim = 0; Dim < 16; ++Dim) {
14*1d6a6785SXiangZhang;     if (Dim == Dims) {
15*1d6a6785SXiangZhang;       break;
16*1d6a6785SXiangZhang;     }
17*1d6a6785SXiangZhang;     int divmod = Arr[Dim][Idx];
18*1d6a6785SXiangZhang;     Idx = divmod + 1;
19*1d6a6785SXiangZhang;
20*1d6a6785SXiangZhang;     for (int arg = 0; arg < 4; arg++) {
21*1d6a6785SXiangZhang;       Out[arg] += Arr[Dim][arg];
22*1d6a6785SXiangZhang;       bar();
23*1d6a6785SXiangZhang;     }
24*1d6a6785SXiangZhang;   }
25*1d6a6785SXiangZhang; }
26*1d6a6785SXiangZhang
27*1d6a6785SXiangZhangdefine void @func(i32 noundef %Idx, ptr noundef %Arr, i32 noundef %Dims, ptr noundef %Out) {
28*1d6a6785SXiangZhang; CHECK-CFG-LABEL: define void @func(
29*1d6a6785SXiangZhang; CHECK-CFG-SAME: i32 noundef [[IDX:%.*]], ptr noundef [[ARR:%.*]], i32 noundef [[DIMS:%.*]], ptr noundef [[OUT:%.*]]) {
30*1d6a6785SXiangZhang; CHECK-CFG-NEXT:  entry:
31*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    br label [[FOR_COND:%.*]]
32*1d6a6785SXiangZhang; CHECK-CFG:       for.cond:
33*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[DIM_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC16:%.*]], [[FOR_COND_CLEANUP6:%.*]] ]
34*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[IDX_ADDR_0:%.*]] = phi i32 [ [[IDX]], [[ENTRY]] ], [ [[ADD:%.*]], [[FOR_COND_CLEANUP6]] ]
35*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[CMP:%.*]] = icmp sge i32 [[DIM_0]], 16
36*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[DIM_0]], [[DIMS]]
37*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[OR_COND:%.*]] = or i1 [[CMP]], [[CMP1]]
38*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    br i1 [[OR_COND]], label [[CLEANUP:%.*]], label [[IF_END:%.*]]
39*1d6a6785SXiangZhang; CHECK-CFG:       if.end:
40*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[IDXPROM:%.*]] = sext i32 [[DIM_0]] to i64
41*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 [[IDXPROM]]
42*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8
43*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[IDXPROM2:%.*]] = sext i32 [[IDX_ADDR_0]] to i64
44*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i64 [[IDXPROM2]]
45*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX3]], align 4
46*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[ADD]] = add nsw i32 [[TMP1]], 1
47*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    br label [[FOR_COND4:%.*]]
48*1d6a6785SXiangZhang; CHECK-CFG:       for.cond4:
49*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[ARG_0:%.*]] = phi i32 [ 0, [[IF_END]] ], [ [[INC:%.*]], [[FOR_BODY7:%.*]] ]
50*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[ARG_0]], 4
51*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    br i1 [[CMP5]], label [[FOR_BODY7]], label [[FOR_COND_CLEANUP6]]
52*1d6a6785SXiangZhang; CHECK-CFG:       for.cond.cleanup6:
53*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[INC16]] = add nsw i32 [[DIM_0]], 1
54*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    br label [[FOR_COND]], !llvm.loop [[LOOP0:![0-9]+]]
55*1d6a6785SXiangZhang; CHECK-CFG:       for.body7:
56*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[ARRAYIDX]], align 8
57*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[ARG_0]] to i64
58*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i64 [[IDXPROM10]]
59*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[TMP3:%.*]] = load i32, ptr [[ARRAYIDX11]], align 4
60*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[ARRAYIDX13:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 [[IDXPROM10]]
61*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX13]], align 4
62*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[ADD14:%.*]] = add nsw i32 [[TMP4]], [[TMP3]]
63*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    store i32 [[ADD14]], ptr [[ARRAYIDX13]], align 4
64*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    call void @_Z3barv()
65*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    [[INC]] = add nsw i32 [[ARG_0]], 1
66*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    br label [[FOR_COND4]], !llvm.loop [[LOOP3:![0-9]+]]
67*1d6a6785SXiangZhang; CHECK-CFG:       cleanup:
68*1d6a6785SXiangZhang; CHECK-CFG-NEXT:    ret void
69*1d6a6785SXiangZhang;
70*1d6a6785SXiangZhang; CHECK-UNROLL-LABEL: define void @func(
71*1d6a6785SXiangZhang; CHECK-UNROLL-SAME: i32 noundef [[IDX:%.*]], ptr noundef [[ARR:%.*]], i32 noundef [[DIMS:%.*]], ptr noundef [[OUT:%.*]]) {
72*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:  entry:
73*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND:%.*]]
74*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond:
75*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1:%.*]] = icmp eq i32 0, [[DIMS]]
76*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1]], label [[CLEANUP:%.*]], label [[IF_END:%.*]]
77*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end:
78*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4:%.*]]
79*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4:
80*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7:%.*]]
81*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6:
82*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_1:%.*]] = icmp eq i32 1, [[DIMS]]
83*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_1]], label [[CLEANUP]], label [[IF_END_1:%.*]]
84*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.1:
85*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_1:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 1
86*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_1:%.*]]
87*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.1:
88*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_12:%.*]]
89*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.12:
90*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARRAYIDX_1]], align 8
91*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4
92*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP2:%.*]] = load i32, ptr [[OUT]], align 4
93*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_11:%.*]] = add nsw i32 [[TMP2]], [[TMP1]]
94*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_11]], ptr [[OUT]], align 4
95*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
96*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_1:%.*]]
97*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.1:
98*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[ARRAYIDX_1]], align 8
99*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_1:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 1
100*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP4:%.*]] = load i32, ptr [[ARRAYIDX11_1_1]], align 4
101*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_1:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
102*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP5:%.*]] = load i32, ptr [[ARRAYIDX13_1_1]], align 4
103*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_1:%.*]] = add nsw i32 [[TMP5]], [[TMP4]]
104*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_1]], ptr [[ARRAYIDX13_1_1]], align 4
105*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
106*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_1:%.*]]
107*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.1:
108*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[ARRAYIDX_1]], align 8
109*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_1:%.*]] = getelementptr inbounds i32, ptr [[TMP6]], i64 2
110*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP7:%.*]] = load i32, ptr [[ARRAYIDX11_2_1]], align 4
111*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_1:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
112*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP8:%.*]] = load i32, ptr [[ARRAYIDX13_2_1]], align 4
113*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_1:%.*]] = add nsw i32 [[TMP8]], [[TMP7]]
114*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_1]], ptr [[ARRAYIDX13_2_1]], align 4
115*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
116*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_1:%.*]]
117*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.1:
118*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[ARRAYIDX_1]], align 8
119*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_1:%.*]] = getelementptr inbounds i32, ptr [[TMP9]], i64 3
120*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP10:%.*]] = load i32, ptr [[ARRAYIDX11_3_1]], align 4
121*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_1:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
122*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP11:%.*]] = load i32, ptr [[ARRAYIDX13_3_1]], align 4
123*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_1:%.*]] = add nsw i32 [[TMP11]], [[TMP10]]
124*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_1]], ptr [[ARRAYIDX13_3_1]], align 4
125*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
126*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4:%.*]], label [[FOR_COND_CLEANUP6_1:%.*]]
127*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.1:
128*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_2:%.*]] = icmp eq i32 2, [[DIMS]]
129*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_2]], label [[CLEANUP]], label [[IF_END_2:%.*]]
130*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.2:
131*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_2:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 2
132*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_2:%.*]]
133*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.2:
134*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_24:%.*]]
135*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.24:
136*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[ARRAYIDX_2]], align 8
137*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 4
138*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP14:%.*]] = load i32, ptr [[OUT]], align 4
139*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_23:%.*]] = add nsw i32 [[TMP14]], [[TMP13]]
140*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_23]], ptr [[OUT]], align 4
141*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
142*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_2:%.*]]
143*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.2:
144*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[ARRAYIDX_2]], align 8
145*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_2:%.*]] = getelementptr inbounds i32, ptr [[TMP15]], i64 1
146*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP16:%.*]] = load i32, ptr [[ARRAYIDX11_1_2]], align 4
147*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_2:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
148*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP17:%.*]] = load i32, ptr [[ARRAYIDX13_1_2]], align 4
149*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_2:%.*]] = add nsw i32 [[TMP17]], [[TMP16]]
150*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_2]], ptr [[ARRAYIDX13_1_2]], align 4
151*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
152*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_2:%.*]]
153*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.2:
154*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[ARRAYIDX_2]], align 8
155*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_2:%.*]] = getelementptr inbounds i32, ptr [[TMP18]], i64 2
156*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP19:%.*]] = load i32, ptr [[ARRAYIDX11_2_2]], align 4
157*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_2:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
158*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP20:%.*]] = load i32, ptr [[ARRAYIDX13_2_2]], align 4
159*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_2:%.*]] = add nsw i32 [[TMP20]], [[TMP19]]
160*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_2]], ptr [[ARRAYIDX13_2_2]], align 4
161*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
162*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_2:%.*]]
163*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.2:
164*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[ARRAYIDX_2]], align 8
165*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_2:%.*]] = getelementptr inbounds i32, ptr [[TMP21]], i64 3
166*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX11_3_2]], align 4
167*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_2:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
168*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP23:%.*]] = load i32, ptr [[ARRAYIDX13_3_2]], align 4
169*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_2:%.*]] = add nsw i32 [[TMP23]], [[TMP22]]
170*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_2]], ptr [[ARRAYIDX13_3_2]], align 4
171*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
172*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_2:%.*]]
173*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.2:
174*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_3:%.*]] = icmp eq i32 3, [[DIMS]]
175*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_3]], label [[CLEANUP]], label [[IF_END_3:%.*]]
176*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.3:
177*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_3:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 3
178*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_3:%.*]]
179*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.3:
180*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_36:%.*]]
181*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.36:
182*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[ARRAYIDX_3]], align 8
183*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 4
184*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP26:%.*]] = load i32, ptr [[OUT]], align 4
185*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_35:%.*]] = add nsw i32 [[TMP26]], [[TMP25]]
186*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_35]], ptr [[OUT]], align 4
187*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
188*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_3:%.*]]
189*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.3:
190*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[ARRAYIDX_3]], align 8
191*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_3:%.*]] = getelementptr inbounds i32, ptr [[TMP27]], i64 1
192*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP28:%.*]] = load i32, ptr [[ARRAYIDX11_1_3]], align 4
193*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_3:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
194*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP29:%.*]] = load i32, ptr [[ARRAYIDX13_1_3]], align 4
195*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_3:%.*]] = add nsw i32 [[TMP29]], [[TMP28]]
196*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_3]], ptr [[ARRAYIDX13_1_3]], align 4
197*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
198*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_3:%.*]]
199*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.3:
200*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[ARRAYIDX_3]], align 8
201*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_3:%.*]] = getelementptr inbounds i32, ptr [[TMP30]], i64 2
202*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP31:%.*]] = load i32, ptr [[ARRAYIDX11_2_3]], align 4
203*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_3:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
204*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP32:%.*]] = load i32, ptr [[ARRAYIDX13_2_3]], align 4
205*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_3:%.*]] = add nsw i32 [[TMP32]], [[TMP31]]
206*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_3]], ptr [[ARRAYIDX13_2_3]], align 4
207*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
208*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_3:%.*]]
209*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.3:
210*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[ARRAYIDX_3]], align 8
211*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_3:%.*]] = getelementptr inbounds i32, ptr [[TMP33]], i64 3
212*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP34:%.*]] = load i32, ptr [[ARRAYIDX11_3_3]], align 4
213*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_3:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
214*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP35:%.*]] = load i32, ptr [[ARRAYIDX13_3_3]], align 4
215*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_3:%.*]] = add nsw i32 [[TMP35]], [[TMP34]]
216*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_3]], ptr [[ARRAYIDX13_3_3]], align 4
217*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
218*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_3:%.*]]
219*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.3:
220*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_4:%.*]] = icmp eq i32 4, [[DIMS]]
221*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_4]], label [[CLEANUP]], label [[IF_END_4:%.*]]
222*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.4:
223*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_4:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 4
224*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_4:%.*]]
225*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.4:
226*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_48:%.*]]
227*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.48:
228*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[ARRAYIDX_4]], align 8
229*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 4
230*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP38:%.*]] = load i32, ptr [[OUT]], align 4
231*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_47:%.*]] = add nsw i32 [[TMP38]], [[TMP37]]
232*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_47]], ptr [[OUT]], align 4
233*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
234*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_4:%.*]]
235*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.4:
236*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP39:%.*]] = load ptr, ptr [[ARRAYIDX_4]], align 8
237*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_4:%.*]] = getelementptr inbounds i32, ptr [[TMP39]], i64 1
238*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP40:%.*]] = load i32, ptr [[ARRAYIDX11_1_4]], align 4
239*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_4:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
240*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP41:%.*]] = load i32, ptr [[ARRAYIDX13_1_4]], align 4
241*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_4:%.*]] = add nsw i32 [[TMP41]], [[TMP40]]
242*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_4]], ptr [[ARRAYIDX13_1_4]], align 4
243*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
244*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_4:%.*]]
245*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.4:
246*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[ARRAYIDX_4]], align 8
247*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_4:%.*]] = getelementptr inbounds i32, ptr [[TMP42]], i64 2
248*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP43:%.*]] = load i32, ptr [[ARRAYIDX11_2_4]], align 4
249*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_4:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
250*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP44:%.*]] = load i32, ptr [[ARRAYIDX13_2_4]], align 4
251*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_4:%.*]] = add nsw i32 [[TMP44]], [[TMP43]]
252*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_4]], ptr [[ARRAYIDX13_2_4]], align 4
253*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
254*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_4:%.*]]
255*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.4:
256*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP45:%.*]] = load ptr, ptr [[ARRAYIDX_4]], align 8
257*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_4:%.*]] = getelementptr inbounds i32, ptr [[TMP45]], i64 3
258*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP46:%.*]] = load i32, ptr [[ARRAYIDX11_3_4]], align 4
259*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_4:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
260*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP47:%.*]] = load i32, ptr [[ARRAYIDX13_3_4]], align 4
261*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_4:%.*]] = add nsw i32 [[TMP47]], [[TMP46]]
262*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_4]], ptr [[ARRAYIDX13_3_4]], align 4
263*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
264*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_4:%.*]]
265*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.4:
266*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_5:%.*]] = icmp eq i32 5, [[DIMS]]
267*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_5]], label [[CLEANUP]], label [[IF_END_5:%.*]]
268*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.5:
269*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_5:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 5
270*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_5:%.*]]
271*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.5:
272*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_5:%.*]]
273*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.5:
274*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP48:%.*]] = load ptr, ptr [[ARRAYIDX_5]], align 8
275*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP49:%.*]] = load i32, ptr [[TMP48]], align 4
276*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP50:%.*]] = load i32, ptr [[OUT]], align 4
277*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_5:%.*]] = add nsw i32 [[TMP50]], [[TMP49]]
278*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_5]], ptr [[OUT]], align 4
279*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
280*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_5:%.*]]
281*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.5:
282*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP51:%.*]] = load ptr, ptr [[ARRAYIDX_5]], align 8
283*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_5:%.*]] = getelementptr inbounds i32, ptr [[TMP51]], i64 1
284*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP52:%.*]] = load i32, ptr [[ARRAYIDX11_1_5]], align 4
285*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_5:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
286*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP53:%.*]] = load i32, ptr [[ARRAYIDX13_1_5]], align 4
287*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_5:%.*]] = add nsw i32 [[TMP53]], [[TMP52]]
288*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_5]], ptr [[ARRAYIDX13_1_5]], align 4
289*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
290*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_5:%.*]]
291*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.5:
292*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP54:%.*]] = load ptr, ptr [[ARRAYIDX_5]], align 8
293*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_5:%.*]] = getelementptr inbounds i32, ptr [[TMP54]], i64 2
294*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP55:%.*]] = load i32, ptr [[ARRAYIDX11_2_5]], align 4
295*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_5:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
296*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP56:%.*]] = load i32, ptr [[ARRAYIDX13_2_5]], align 4
297*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_5:%.*]] = add nsw i32 [[TMP56]], [[TMP55]]
298*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_5]], ptr [[ARRAYIDX13_2_5]], align 4
299*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
300*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_5:%.*]]
301*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.5:
302*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP57:%.*]] = load ptr, ptr [[ARRAYIDX_5]], align 8
303*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_5:%.*]] = getelementptr inbounds i32, ptr [[TMP57]], i64 3
304*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP58:%.*]] = load i32, ptr [[ARRAYIDX11_3_5]], align 4
305*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_5:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
306*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP59:%.*]] = load i32, ptr [[ARRAYIDX13_3_5]], align 4
307*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_5:%.*]] = add nsw i32 [[TMP59]], [[TMP58]]
308*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_5]], ptr [[ARRAYIDX13_3_5]], align 4
309*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
310*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_5:%.*]]
311*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.5:
312*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_6:%.*]] = icmp eq i32 6, [[DIMS]]
313*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_6]], label [[CLEANUP]], label [[IF_END_6:%.*]]
314*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.6:
315*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_6:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 6
316*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_6:%.*]]
317*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.6:
318*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_6:%.*]]
319*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.6:
320*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP60:%.*]] = load ptr, ptr [[ARRAYIDX_6]], align 8
321*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP61:%.*]] = load i32, ptr [[TMP60]], align 4
322*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP62:%.*]] = load i32, ptr [[OUT]], align 4
323*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_6:%.*]] = add nsw i32 [[TMP62]], [[TMP61]]
324*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_6]], ptr [[OUT]], align 4
325*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
326*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_6:%.*]]
327*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.6:
328*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP63:%.*]] = load ptr, ptr [[ARRAYIDX_6]], align 8
329*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_6:%.*]] = getelementptr inbounds i32, ptr [[TMP63]], i64 1
330*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP64:%.*]] = load i32, ptr [[ARRAYIDX11_1_6]], align 4
331*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_6:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
332*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP65:%.*]] = load i32, ptr [[ARRAYIDX13_1_6]], align 4
333*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_6:%.*]] = add nsw i32 [[TMP65]], [[TMP64]]
334*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_6]], ptr [[ARRAYIDX13_1_6]], align 4
335*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
336*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_6:%.*]]
337*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.6:
338*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP66:%.*]] = load ptr, ptr [[ARRAYIDX_6]], align 8
339*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_6:%.*]] = getelementptr inbounds i32, ptr [[TMP66]], i64 2
340*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP67:%.*]] = load i32, ptr [[ARRAYIDX11_2_6]], align 4
341*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_6:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
342*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP68:%.*]] = load i32, ptr [[ARRAYIDX13_2_6]], align 4
343*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_6:%.*]] = add nsw i32 [[TMP68]], [[TMP67]]
344*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_6]], ptr [[ARRAYIDX13_2_6]], align 4
345*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
346*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_6:%.*]]
347*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.6:
348*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP69:%.*]] = load ptr, ptr [[ARRAYIDX_6]], align 8
349*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_6:%.*]] = getelementptr inbounds i32, ptr [[TMP69]], i64 3
350*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP70:%.*]] = load i32, ptr [[ARRAYIDX11_3_6]], align 4
351*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_6:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
352*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP71:%.*]] = load i32, ptr [[ARRAYIDX13_3_6]], align 4
353*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_6:%.*]] = add nsw i32 [[TMP71]], [[TMP70]]
354*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_6]], ptr [[ARRAYIDX13_3_6]], align 4
355*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
356*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_6:%.*]]
357*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.6:
358*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_7:%.*]] = icmp eq i32 7, [[DIMS]]
359*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_7]], label [[CLEANUP]], label [[IF_END_7:%.*]]
360*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.7:
361*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_7:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 7
362*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_7:%.*]]
363*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.7:
364*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_7:%.*]]
365*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.7:
366*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP72:%.*]] = load ptr, ptr [[ARRAYIDX_7]], align 8
367*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP73:%.*]] = load i32, ptr [[TMP72]], align 4
368*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP74:%.*]] = load i32, ptr [[OUT]], align 4
369*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_7:%.*]] = add nsw i32 [[TMP74]], [[TMP73]]
370*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_7]], ptr [[OUT]], align 4
371*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
372*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_7:%.*]]
373*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.7:
374*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP75:%.*]] = load ptr, ptr [[ARRAYIDX_7]], align 8
375*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_7:%.*]] = getelementptr inbounds i32, ptr [[TMP75]], i64 1
376*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP76:%.*]] = load i32, ptr [[ARRAYIDX11_1_7]], align 4
377*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_7:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
378*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP77:%.*]] = load i32, ptr [[ARRAYIDX13_1_7]], align 4
379*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_7:%.*]] = add nsw i32 [[TMP77]], [[TMP76]]
380*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_7]], ptr [[ARRAYIDX13_1_7]], align 4
381*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
382*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_7:%.*]]
383*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.7:
384*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP78:%.*]] = load ptr, ptr [[ARRAYIDX_7]], align 8
385*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_7:%.*]] = getelementptr inbounds i32, ptr [[TMP78]], i64 2
386*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP79:%.*]] = load i32, ptr [[ARRAYIDX11_2_7]], align 4
387*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_7:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
388*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP80:%.*]] = load i32, ptr [[ARRAYIDX13_2_7]], align 4
389*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_7:%.*]] = add nsw i32 [[TMP80]], [[TMP79]]
390*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_7]], ptr [[ARRAYIDX13_2_7]], align 4
391*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
392*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_7:%.*]]
393*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.7:
394*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[ARRAYIDX_7]], align 8
395*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_7:%.*]] = getelementptr inbounds i32, ptr [[TMP81]], i64 3
396*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP82:%.*]] = load i32, ptr [[ARRAYIDX11_3_7]], align 4
397*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_7:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
398*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP83:%.*]] = load i32, ptr [[ARRAYIDX13_3_7]], align 4
399*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_7:%.*]] = add nsw i32 [[TMP83]], [[TMP82]]
400*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_7]], ptr [[ARRAYIDX13_3_7]], align 4
401*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
402*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_7:%.*]]
403*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.7:
404*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_8:%.*]] = icmp eq i32 8, [[DIMS]]
405*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_8]], label [[CLEANUP]], label [[IF_END_8:%.*]]
406*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.8:
407*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_8:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 8
408*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_8:%.*]]
409*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.8:
410*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_8:%.*]]
411*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.8:
412*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP84:%.*]] = load ptr, ptr [[ARRAYIDX_8]], align 8
413*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP85:%.*]] = load i32, ptr [[TMP84]], align 4
414*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP86:%.*]] = load i32, ptr [[OUT]], align 4
415*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_8:%.*]] = add nsw i32 [[TMP86]], [[TMP85]]
416*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_8]], ptr [[OUT]], align 4
417*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
418*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_8:%.*]]
419*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.8:
420*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP87:%.*]] = load ptr, ptr [[ARRAYIDX_8]], align 8
421*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_8:%.*]] = getelementptr inbounds i32, ptr [[TMP87]], i64 1
422*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP88:%.*]] = load i32, ptr [[ARRAYIDX11_1_8]], align 4
423*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_8:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
424*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP89:%.*]] = load i32, ptr [[ARRAYIDX13_1_8]], align 4
425*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_8:%.*]] = add nsw i32 [[TMP89]], [[TMP88]]
426*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_8]], ptr [[ARRAYIDX13_1_8]], align 4
427*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
428*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_8:%.*]]
429*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.8:
430*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP90:%.*]] = load ptr, ptr [[ARRAYIDX_8]], align 8
431*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_8:%.*]] = getelementptr inbounds i32, ptr [[TMP90]], i64 2
432*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP91:%.*]] = load i32, ptr [[ARRAYIDX11_2_8]], align 4
433*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_8:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
434*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP92:%.*]] = load i32, ptr [[ARRAYIDX13_2_8]], align 4
435*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_8:%.*]] = add nsw i32 [[TMP92]], [[TMP91]]
436*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_8]], ptr [[ARRAYIDX13_2_8]], align 4
437*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
438*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_8:%.*]]
439*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.8:
440*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP93:%.*]] = load ptr, ptr [[ARRAYIDX_8]], align 8
441*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_8:%.*]] = getelementptr inbounds i32, ptr [[TMP93]], i64 3
442*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP94:%.*]] = load i32, ptr [[ARRAYIDX11_3_8]], align 4
443*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_8:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
444*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP95:%.*]] = load i32, ptr [[ARRAYIDX13_3_8]], align 4
445*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_8:%.*]] = add nsw i32 [[TMP95]], [[TMP94]]
446*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_8]], ptr [[ARRAYIDX13_3_8]], align 4
447*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
448*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_8:%.*]]
449*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.8:
450*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_9:%.*]] = icmp eq i32 9, [[DIMS]]
451*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_9]], label [[CLEANUP]], label [[IF_END_9:%.*]]
452*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.9:
453*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_9:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 9
454*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_9:%.*]]
455*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.9:
456*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_9:%.*]]
457*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.9:
458*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP96:%.*]] = load ptr, ptr [[ARRAYIDX_9]], align 8
459*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP97:%.*]] = load i32, ptr [[TMP96]], align 4
460*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP98:%.*]] = load i32, ptr [[OUT]], align 4
461*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_9:%.*]] = add nsw i32 [[TMP98]], [[TMP97]]
462*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_9]], ptr [[OUT]], align 4
463*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
464*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_9:%.*]]
465*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.9:
466*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP99:%.*]] = load ptr, ptr [[ARRAYIDX_9]], align 8
467*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_9:%.*]] = getelementptr inbounds i32, ptr [[TMP99]], i64 1
468*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP100:%.*]] = load i32, ptr [[ARRAYIDX11_1_9]], align 4
469*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_9:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
470*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP101:%.*]] = load i32, ptr [[ARRAYIDX13_1_9]], align 4
471*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_9:%.*]] = add nsw i32 [[TMP101]], [[TMP100]]
472*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_9]], ptr [[ARRAYIDX13_1_9]], align 4
473*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
474*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_9:%.*]]
475*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.9:
476*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP102:%.*]] = load ptr, ptr [[ARRAYIDX_9]], align 8
477*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_9:%.*]] = getelementptr inbounds i32, ptr [[TMP102]], i64 2
478*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP103:%.*]] = load i32, ptr [[ARRAYIDX11_2_9]], align 4
479*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_9:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
480*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP104:%.*]] = load i32, ptr [[ARRAYIDX13_2_9]], align 4
481*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_9:%.*]] = add nsw i32 [[TMP104]], [[TMP103]]
482*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_9]], ptr [[ARRAYIDX13_2_9]], align 4
483*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
484*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_9:%.*]]
485*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.9:
486*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP105:%.*]] = load ptr, ptr [[ARRAYIDX_9]], align 8
487*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_9:%.*]] = getelementptr inbounds i32, ptr [[TMP105]], i64 3
488*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP106:%.*]] = load i32, ptr [[ARRAYIDX11_3_9]], align 4
489*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_9:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
490*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP107:%.*]] = load i32, ptr [[ARRAYIDX13_3_9]], align 4
491*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_9:%.*]] = add nsw i32 [[TMP107]], [[TMP106]]
492*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_9]], ptr [[ARRAYIDX13_3_9]], align 4
493*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
494*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_9:%.*]]
495*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.9:
496*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_10:%.*]] = icmp eq i32 10, [[DIMS]]
497*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_10]], label [[CLEANUP]], label [[IF_END_10:%.*]]
498*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.10:
499*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_10:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 10
500*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_10:%.*]]
501*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.10:
502*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_10:%.*]]
503*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.10:
504*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP108:%.*]] = load ptr, ptr [[ARRAYIDX_10]], align 8
505*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP109:%.*]] = load i32, ptr [[TMP108]], align 4
506*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP110:%.*]] = load i32, ptr [[OUT]], align 4
507*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_10:%.*]] = add nsw i32 [[TMP110]], [[TMP109]]
508*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_10]], ptr [[OUT]], align 4
509*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
510*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_10:%.*]]
511*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.10:
512*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP111:%.*]] = load ptr, ptr [[ARRAYIDX_10]], align 8
513*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_10:%.*]] = getelementptr inbounds i32, ptr [[TMP111]], i64 1
514*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP112:%.*]] = load i32, ptr [[ARRAYIDX11_1_10]], align 4
515*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_10:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
516*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP113:%.*]] = load i32, ptr [[ARRAYIDX13_1_10]], align 4
517*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_10:%.*]] = add nsw i32 [[TMP113]], [[TMP112]]
518*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_10]], ptr [[ARRAYIDX13_1_10]], align 4
519*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
520*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_10:%.*]]
521*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.10:
522*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP114:%.*]] = load ptr, ptr [[ARRAYIDX_10]], align 8
523*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_10:%.*]] = getelementptr inbounds i32, ptr [[TMP114]], i64 2
524*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP115:%.*]] = load i32, ptr [[ARRAYIDX11_2_10]], align 4
525*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_10:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
526*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP116:%.*]] = load i32, ptr [[ARRAYIDX13_2_10]], align 4
527*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_10:%.*]] = add nsw i32 [[TMP116]], [[TMP115]]
528*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_10]], ptr [[ARRAYIDX13_2_10]], align 4
529*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
530*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_10:%.*]]
531*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.10:
532*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP117:%.*]] = load ptr, ptr [[ARRAYIDX_10]], align 8
533*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_10:%.*]] = getelementptr inbounds i32, ptr [[TMP117]], i64 3
534*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP118:%.*]] = load i32, ptr [[ARRAYIDX11_3_10]], align 4
535*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_10:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
536*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP119:%.*]] = load i32, ptr [[ARRAYIDX13_3_10]], align 4
537*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_10:%.*]] = add nsw i32 [[TMP119]], [[TMP118]]
538*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_10]], ptr [[ARRAYIDX13_3_10]], align 4
539*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
540*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_10:%.*]]
541*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.10:
542*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_11:%.*]] = icmp eq i32 11, [[DIMS]]
543*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_11]], label [[CLEANUP]], label [[IF_END_11:%.*]]
544*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.11:
545*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_11:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 11
546*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_11:%.*]]
547*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.11:
548*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_11:%.*]]
549*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.11:
550*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP120:%.*]] = load ptr, ptr [[ARRAYIDX_11]], align 8
551*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP121:%.*]] = load i32, ptr [[TMP120]], align 4
552*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP122:%.*]] = load i32, ptr [[OUT]], align 4
553*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_119:%.*]] = add nsw i32 [[TMP122]], [[TMP121]]
554*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_119]], ptr [[OUT]], align 4
555*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
556*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_11:%.*]]
557*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.11:
558*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[ARRAYIDX_11]], align 8
559*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_11:%.*]] = getelementptr inbounds i32, ptr [[TMP123]], i64 1
560*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP124:%.*]] = load i32, ptr [[ARRAYIDX11_1_11]], align 4
561*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_11:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
562*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP125:%.*]] = load i32, ptr [[ARRAYIDX13_1_11]], align 4
563*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_11:%.*]] = add nsw i32 [[TMP125]], [[TMP124]]
564*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_11]], ptr [[ARRAYIDX13_1_11]], align 4
565*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
566*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_11:%.*]]
567*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.11:
568*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP126:%.*]] = load ptr, ptr [[ARRAYIDX_11]], align 8
569*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_11:%.*]] = getelementptr inbounds i32, ptr [[TMP126]], i64 2
570*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP127:%.*]] = load i32, ptr [[ARRAYIDX11_2_11]], align 4
571*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_11:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
572*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP128:%.*]] = load i32, ptr [[ARRAYIDX13_2_11]], align 4
573*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_11:%.*]] = add nsw i32 [[TMP128]], [[TMP127]]
574*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_11]], ptr [[ARRAYIDX13_2_11]], align 4
575*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
576*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_11:%.*]]
577*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.11:
578*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP129:%.*]] = load ptr, ptr [[ARRAYIDX_11]], align 8
579*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_11:%.*]] = getelementptr inbounds i32, ptr [[TMP129]], i64 3
580*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP130:%.*]] = load i32, ptr [[ARRAYIDX11_3_11]], align 4
581*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_11:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
582*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP131:%.*]] = load i32, ptr [[ARRAYIDX13_3_11]], align 4
583*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_11:%.*]] = add nsw i32 [[TMP131]], [[TMP130]]
584*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_11]], ptr [[ARRAYIDX13_3_11]], align 4
585*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
586*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_11:%.*]]
587*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.11:
588*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_12:%.*]] = icmp eq i32 12, [[DIMS]]
589*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_12]], label [[CLEANUP]], label [[IF_END_12:%.*]]
590*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.12:
591*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_12:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 12
592*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_12:%.*]]
593*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.12:
594*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1210:%.*]]
595*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1210:
596*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP132:%.*]] = load ptr, ptr [[ARRAYIDX_12]], align 8
597*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP133:%.*]] = load i32, ptr [[TMP132]], align 4
598*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP134:%.*]] = load i32, ptr [[OUT]], align 4
599*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_12:%.*]] = add nsw i32 [[TMP134]], [[TMP133]]
600*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_12]], ptr [[OUT]], align 4
601*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
602*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_12:%.*]]
603*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.12:
604*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP135:%.*]] = load ptr, ptr [[ARRAYIDX_12]], align 8
605*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_12:%.*]] = getelementptr inbounds i32, ptr [[TMP135]], i64 1
606*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP136:%.*]] = load i32, ptr [[ARRAYIDX11_1_12]], align 4
607*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_12:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
608*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP137:%.*]] = load i32, ptr [[ARRAYIDX13_1_12]], align 4
609*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_12:%.*]] = add nsw i32 [[TMP137]], [[TMP136]]
610*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_12]], ptr [[ARRAYIDX13_1_12]], align 4
611*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
612*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_12:%.*]]
613*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.12:
614*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP138:%.*]] = load ptr, ptr [[ARRAYIDX_12]], align 8
615*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_12:%.*]] = getelementptr inbounds i32, ptr [[TMP138]], i64 2
616*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP139:%.*]] = load i32, ptr [[ARRAYIDX11_2_12]], align 4
617*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_12:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
618*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP140:%.*]] = load i32, ptr [[ARRAYIDX13_2_12]], align 4
619*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_12:%.*]] = add nsw i32 [[TMP140]], [[TMP139]]
620*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_12]], ptr [[ARRAYIDX13_2_12]], align 4
621*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
622*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_12:%.*]]
623*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.12:
624*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP141:%.*]] = load ptr, ptr [[ARRAYIDX_12]], align 8
625*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_12:%.*]] = getelementptr inbounds i32, ptr [[TMP141]], i64 3
626*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP142:%.*]] = load i32, ptr [[ARRAYIDX11_3_12]], align 4
627*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_12:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
628*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP143:%.*]] = load i32, ptr [[ARRAYIDX13_3_12]], align 4
629*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_12:%.*]] = add nsw i32 [[TMP143]], [[TMP142]]
630*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_12]], ptr [[ARRAYIDX13_3_12]], align 4
631*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
632*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_12:%.*]]
633*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.12:
634*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_13:%.*]] = icmp eq i32 13, [[DIMS]]
635*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_13]], label [[CLEANUP]], label [[IF_END_13:%.*]]
636*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.13:
637*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_13:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 13
638*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_13:%.*]]
639*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.13:
640*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_13:%.*]]
641*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.13:
642*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP144:%.*]] = load ptr, ptr [[ARRAYIDX_13]], align 8
643*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP145:%.*]] = load i32, ptr [[TMP144]], align 4
644*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP146:%.*]] = load i32, ptr [[OUT]], align 4
645*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_13:%.*]] = add nsw i32 [[TMP146]], [[TMP145]]
646*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_13]], ptr [[OUT]], align 4
647*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
648*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_13:%.*]]
649*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.13:
650*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP147:%.*]] = load ptr, ptr [[ARRAYIDX_13]], align 8
651*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_13:%.*]] = getelementptr inbounds i32, ptr [[TMP147]], i64 1
652*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP148:%.*]] = load i32, ptr [[ARRAYIDX11_1_13]], align 4
653*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_13:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
654*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP149:%.*]] = load i32, ptr [[ARRAYIDX13_1_13]], align 4
655*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_13:%.*]] = add nsw i32 [[TMP149]], [[TMP148]]
656*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_13]], ptr [[ARRAYIDX13_1_13]], align 4
657*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
658*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_13:%.*]]
659*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.13:
660*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP150:%.*]] = load ptr, ptr [[ARRAYIDX_13]], align 8
661*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_13:%.*]] = getelementptr inbounds i32, ptr [[TMP150]], i64 2
662*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP151:%.*]] = load i32, ptr [[ARRAYIDX11_2_13]], align 4
663*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_13:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
664*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP152:%.*]] = load i32, ptr [[ARRAYIDX13_2_13]], align 4
665*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_13:%.*]] = add nsw i32 [[TMP152]], [[TMP151]]
666*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_13]], ptr [[ARRAYIDX13_2_13]], align 4
667*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
668*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_13:%.*]]
669*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.13:
670*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP153:%.*]] = load ptr, ptr [[ARRAYIDX_13]], align 8
671*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_13:%.*]] = getelementptr inbounds i32, ptr [[TMP153]], i64 3
672*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP154:%.*]] = load i32, ptr [[ARRAYIDX11_3_13]], align 4
673*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_13:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
674*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP155:%.*]] = load i32, ptr [[ARRAYIDX13_3_13]], align 4
675*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_13:%.*]] = add nsw i32 [[TMP155]], [[TMP154]]
676*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_13]], ptr [[ARRAYIDX13_3_13]], align 4
677*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
678*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_13:%.*]]
679*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.13:
680*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_14:%.*]] = icmp eq i32 14, [[DIMS]]
681*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_14]], label [[CLEANUP]], label [[IF_END_14:%.*]]
682*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.14:
683*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_14:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 14
684*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_14:%.*]]
685*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.14:
686*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_14:%.*]]
687*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.14:
688*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP156:%.*]] = load ptr, ptr [[ARRAYIDX_14]], align 8
689*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP157:%.*]] = load i32, ptr [[TMP156]], align 4
690*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP158:%.*]] = load i32, ptr [[OUT]], align 4
691*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_14:%.*]] = add nsw i32 [[TMP158]], [[TMP157]]
692*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_14]], ptr [[OUT]], align 4
693*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
694*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_14:%.*]]
695*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.14:
696*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP159:%.*]] = load ptr, ptr [[ARRAYIDX_14]], align 8
697*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_14:%.*]] = getelementptr inbounds i32, ptr [[TMP159]], i64 1
698*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP160:%.*]] = load i32, ptr [[ARRAYIDX11_1_14]], align 4
699*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_14:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
700*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP161:%.*]] = load i32, ptr [[ARRAYIDX13_1_14]], align 4
701*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_14:%.*]] = add nsw i32 [[TMP161]], [[TMP160]]
702*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_14]], ptr [[ARRAYIDX13_1_14]], align 4
703*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
704*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_14:%.*]]
705*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.14:
706*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[ARRAYIDX_14]], align 8
707*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_14:%.*]] = getelementptr inbounds i32, ptr [[TMP162]], i64 2
708*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP163:%.*]] = load i32, ptr [[ARRAYIDX11_2_14]], align 4
709*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_14:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
710*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP164:%.*]] = load i32, ptr [[ARRAYIDX13_2_14]], align 4
711*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_14:%.*]] = add nsw i32 [[TMP164]], [[TMP163]]
712*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_14]], ptr [[ARRAYIDX13_2_14]], align 4
713*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
714*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_14:%.*]]
715*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.14:
716*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP165:%.*]] = load ptr, ptr [[ARRAYIDX_14]], align 8
717*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_14:%.*]] = getelementptr inbounds i32, ptr [[TMP165]], i64 3
718*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP166:%.*]] = load i32, ptr [[ARRAYIDX11_3_14]], align 4
719*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_14:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
720*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP167:%.*]] = load i32, ptr [[ARRAYIDX13_3_14]], align 4
721*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_14:%.*]] = add nsw i32 [[TMP167]], [[TMP166]]
722*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_14]], ptr [[ARRAYIDX13_3_14]], align 4
723*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
724*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_14:%.*]]
725*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.14:
726*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[CMP1_15:%.*]] = icmp eq i32 15, [[DIMS]]
727*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 [[CMP1_15]], label [[CLEANUP]], label [[IF_END_15:%.*]]
728*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.15:
729*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_15:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 15
730*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_15:%.*]]
731*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.15:
732*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_15:%.*]]
733*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.15:
734*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP168:%.*]] = load ptr, ptr [[ARRAYIDX_15]], align 8
735*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP169:%.*]] = load i32, ptr [[TMP168]], align 4
736*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP170:%.*]] = load i32, ptr [[OUT]], align 4
737*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_15:%.*]] = add nsw i32 [[TMP170]], [[TMP169]]
738*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_15]], ptr [[OUT]], align 4
739*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
740*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_15:%.*]]
741*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.15:
742*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP171:%.*]] = load ptr, ptr [[ARRAYIDX_15]], align 8
743*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_15:%.*]] = getelementptr inbounds i32, ptr [[TMP171]], i64 1
744*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP172:%.*]] = load i32, ptr [[ARRAYIDX11_1_15]], align 4
745*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_15:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
746*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP173:%.*]] = load i32, ptr [[ARRAYIDX13_1_15]], align 4
747*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_15:%.*]] = add nsw i32 [[TMP173]], [[TMP172]]
748*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_15]], ptr [[ARRAYIDX13_1_15]], align 4
749*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
750*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_15:%.*]]
751*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.15:
752*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP174:%.*]] = load ptr, ptr [[ARRAYIDX_15]], align 8
753*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_15:%.*]] = getelementptr inbounds i32, ptr [[TMP174]], i64 2
754*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP175:%.*]] = load i32, ptr [[ARRAYIDX11_2_15]], align 4
755*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_15:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
756*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP176:%.*]] = load i32, ptr [[ARRAYIDX13_2_15]], align 4
757*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_15:%.*]] = add nsw i32 [[TMP176]], [[TMP175]]
758*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_15]], ptr [[ARRAYIDX13_2_15]], align 4
759*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
760*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_15:%.*]]
761*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.15:
762*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP177:%.*]] = load ptr, ptr [[ARRAYIDX_15]], align 8
763*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_15:%.*]] = getelementptr inbounds i32, ptr [[TMP177]], i64 3
764*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP178:%.*]] = load i32, ptr [[ARRAYIDX11_3_15]], align 4
765*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_15:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
766*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP179:%.*]] = load i32, ptr [[ARRAYIDX13_3_15]], align 4
767*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_15:%.*]] = add nsw i32 [[TMP179]], [[TMP178]]
768*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_15]], ptr [[ARRAYIDX13_3_15]], align 4
769*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
770*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_15:%.*]]
771*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.15:
772*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 true, label [[CLEANUP]], label [[IF_END_16:%.*]]
773*1d6a6785SXiangZhang; CHECK-UNROLL:       if.end.16:
774*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_16:%.*]] = getelementptr inbounds ptr, ptr [[ARR]], i64 16
775*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_COND4_16:%.*]]
776*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond4.16:
777*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_16:%.*]]
778*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.16:
779*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP180:%.*]] = load ptr, ptr [[ARRAYIDX_16]], align 8
780*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP181:%.*]] = load i32, ptr [[TMP180]], align 4
781*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP182:%.*]] = load i32, ptr [[OUT]], align 4
782*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_16:%.*]] = add nsw i32 [[TMP182]], [[TMP181]]
783*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_16]], ptr [[OUT]], align 4
784*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
785*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1_16:%.*]]
786*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1.16:
787*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP183:%.*]] = load ptr, ptr [[ARRAYIDX_16]], align 8
788*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1_16:%.*]] = getelementptr inbounds i32, ptr [[TMP183]], i64 1
789*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP184:%.*]] = load i32, ptr [[ARRAYIDX11_1_16]], align 4
790*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1_16:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
791*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP185:%.*]] = load i32, ptr [[ARRAYIDX13_1_16]], align 4
792*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1_16:%.*]] = add nsw i32 [[TMP185]], [[TMP184]]
793*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1_16]], ptr [[ARRAYIDX13_1_16]], align 4
794*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
795*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2_16:%.*]]
796*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2.16:
797*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP186:%.*]] = load ptr, ptr [[ARRAYIDX_16]], align 8
798*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2_16:%.*]] = getelementptr inbounds i32, ptr [[TMP186]], i64 2
799*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP187:%.*]] = load i32, ptr [[ARRAYIDX11_2_16]], align 4
800*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2_16:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
801*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP188:%.*]] = load i32, ptr [[ARRAYIDX13_2_16]], align 4
802*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2_16:%.*]] = add nsw i32 [[TMP188]], [[TMP187]]
803*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2_16]], ptr [[ARRAYIDX13_2_16]], align 4
804*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
805*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3_16:%.*]]
806*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3.16:
807*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP189:%.*]] = load ptr, ptr [[ARRAYIDX_16]], align 8
808*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3_16:%.*]] = getelementptr inbounds i32, ptr [[TMP189]], i64 3
809*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP190:%.*]] = load i32, ptr [[ARRAYIDX11_3_16]], align 4
810*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3_16:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
811*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP191:%.*]] = load i32, ptr [[ARRAYIDX13_3_16]], align 4
812*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3_16:%.*]] = add nsw i32 [[TMP191]], [[TMP190]]
813*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3_16]], ptr [[ARRAYIDX13_3_16]], align 4
814*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
815*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6_16:%.*]]
816*1d6a6785SXiangZhang; CHECK-UNROLL:       for.cond.cleanup6.16:
817*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    unreachable
818*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7:
819*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP192:%.*]] = load ptr, ptr [[ARR]], align 8
820*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP193:%.*]] = load i32, ptr [[TMP192]], align 4
821*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP194:%.*]] = load i32, ptr [[OUT]], align 4
822*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14:%.*]] = add nsw i32 [[TMP194]], [[TMP193]]
823*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14]], ptr [[OUT]], align 4
824*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
825*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_1:%.*]]
826*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.1:
827*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP195:%.*]] = load ptr, ptr [[ARR]], align 8
828*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_1:%.*]] = getelementptr inbounds i32, ptr [[TMP195]], i64 1
829*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP196:%.*]] = load i32, ptr [[ARRAYIDX11_1]], align 4
830*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_1:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 1
831*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP197:%.*]] = load i32, ptr [[ARRAYIDX13_1]], align 4
832*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_1:%.*]] = add nsw i32 [[TMP197]], [[TMP196]]
833*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_1]], ptr [[ARRAYIDX13_1]], align 4
834*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
835*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_2:%.*]]
836*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.2:
837*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP198:%.*]] = load ptr, ptr [[ARR]], align 8
838*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_2:%.*]] = getelementptr inbounds i32, ptr [[TMP198]], i64 2
839*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP199:%.*]] = load i32, ptr [[ARRAYIDX11_2]], align 4
840*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_2:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 2
841*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP200:%.*]] = load i32, ptr [[ARRAYIDX13_2]], align 4
842*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_2:%.*]] = add nsw i32 [[TMP200]], [[TMP199]]
843*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_2]], ptr [[ARRAYIDX13_2]], align 4
844*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
845*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br label [[FOR_BODY7_3:%.*]]
846*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.3:
847*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP201:%.*]] = load ptr, ptr [[ARR]], align 8
848*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_3:%.*]] = getelementptr inbounds i32, ptr [[TMP201]], i64 3
849*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP202:%.*]] = load i32, ptr [[ARRAYIDX11_3]], align 4
850*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_3:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 3
851*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP203:%.*]] = load i32, ptr [[ARRAYIDX13_3]], align 4
852*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_3:%.*]] = add nsw i32 [[TMP203]], [[TMP202]]
853*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_3]], ptr [[ARRAYIDX13_3]], align 4
854*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
855*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    br i1 false, label [[FOR_BODY7_4]], label [[FOR_COND_CLEANUP6:%.*]]
856*1d6a6785SXiangZhang; CHECK-UNROLL:       for.body7.4:
857*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX_LCSSA:%.*]] = phi ptr [ [[ARR]], [[FOR_BODY7_3]] ], [ [[ARRAYIDX_1]], [[FOR_BODY7_3_1]] ], [ [[ARRAYIDX_2]], [[FOR_BODY7_3_2]] ], [ [[ARRAYIDX_3]], [[FOR_BODY7_3_3]] ], [ [[ARRAYIDX_4]], [[FOR_BODY7_3_4]] ], [ [[ARRAYIDX_5]], [[FOR_BODY7_3_5]] ], [ [[ARRAYIDX_6]], [[FOR_BODY7_3_6]] ], [ [[ARRAYIDX_7]], [[FOR_BODY7_3_7]] ], [ [[ARRAYIDX_8]], [[FOR_BODY7_3_8]] ], [ [[ARRAYIDX_9]], [[FOR_BODY7_3_9]] ], [ [[ARRAYIDX_10]], [[FOR_BODY7_3_10]] ], [ [[ARRAYIDX_11]], [[FOR_BODY7_3_11]] ], [ [[ARRAYIDX_12]], [[FOR_BODY7_3_12]] ], [ [[ARRAYIDX_13]], [[FOR_BODY7_3_13]] ], [ [[ARRAYIDX_14]], [[FOR_BODY7_3_14]] ], [ [[ARRAYIDX_15]], [[FOR_BODY7_3_15]] ], [ [[ARRAYIDX_16]], [[FOR_BODY7_3_16]] ]
858*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[ARRAYIDX_LCSSA]], align 8
859*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX11_4:%.*]] = getelementptr inbounds i32, ptr [[TMP204]], i64 4
860*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP205:%.*]] = load i32, ptr [[ARRAYIDX11_4]], align 4
861*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ARRAYIDX13_4:%.*]] = getelementptr inbounds i32, ptr [[OUT]], i64 4
862*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[TMP206:%.*]] = load i32, ptr [[ARRAYIDX13_4]], align 4
863*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    [[ADD14_4:%.*]] = add nsw i32 [[TMP206]], [[TMP205]]
864*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    store i32 [[ADD14_4]], ptr [[ARRAYIDX13_4]], align 4
865*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    call void @_Z3barv()
866*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    unreachable
867*1d6a6785SXiangZhang; CHECK-UNROLL:       cleanup:
868*1d6a6785SXiangZhang; CHECK-UNROLL-NEXT:    ret void
869*1d6a6785SXiangZhang;
870*1d6a6785SXiangZhangentry:
871*1d6a6785SXiangZhang  br label %for.cond
872*1d6a6785SXiangZhang
873*1d6a6785SXiangZhangfor.cond:                                         ; preds = %for.cond.cleanup6, %entry
874*1d6a6785SXiangZhang  %Dim.0 = phi i32 [ 0, %entry ], [ %inc16, %for.cond.cleanup6 ]
875*1d6a6785SXiangZhang  %Idx.addr.0 = phi i32 [ %Idx, %entry ], [ %add, %for.cond.cleanup6 ]
876*1d6a6785SXiangZhang  %cmp = icmp slt i32 %Dim.0, 16
877*1d6a6785SXiangZhang  br i1 %cmp, label %for.body, label %for.cond.cleanup
878*1d6a6785SXiangZhang
879*1d6a6785SXiangZhangfor.cond.cleanup:                                 ; preds = %for.cond
880*1d6a6785SXiangZhang  br label %cleanup
881*1d6a6785SXiangZhang
882*1d6a6785SXiangZhangfor.body:                                         ; preds = %for.cond
883*1d6a6785SXiangZhang  %cmp1 = icmp eq i32 %Dim.0, %Dims
884*1d6a6785SXiangZhang  br i1 %cmp1, label %if.then, label %if.end
885*1d6a6785SXiangZhang
886*1d6a6785SXiangZhangif.then:                                          ; preds = %for.body
887*1d6a6785SXiangZhang  br label %cleanup
888*1d6a6785SXiangZhang
889*1d6a6785SXiangZhangif.end:                                           ; preds = %for.body
890*1d6a6785SXiangZhang  %idxprom = sext i32 %Dim.0 to i64
891*1d6a6785SXiangZhang  %arrayidx = getelementptr inbounds ptr, ptr %Arr, i64 %idxprom
892*1d6a6785SXiangZhang  %0 = load ptr, ptr %arrayidx, align 8
893*1d6a6785SXiangZhang  %idxprom2 = sext i32 %Idx.addr.0 to i64
894*1d6a6785SXiangZhang  %arrayidx3 = getelementptr inbounds i32, ptr %0, i64 %idxprom2
895*1d6a6785SXiangZhang  %1 = load i32, ptr %arrayidx3, align 4
896*1d6a6785SXiangZhang  %add = add nsw i32 %1, 1
897*1d6a6785SXiangZhang  br label %for.cond4
898*1d6a6785SXiangZhang
899*1d6a6785SXiangZhangfor.cond4:                                        ; preds = %for.body7, %if.end
900*1d6a6785SXiangZhang  %arg.0 = phi i32 [ 0, %if.end ], [ %inc, %for.body7 ]
901*1d6a6785SXiangZhang  %cmp5 = icmp slt i32 %arg.0, 4
902*1d6a6785SXiangZhang  br i1 %cmp5, label %for.body7, label %for.cond.cleanup6
903*1d6a6785SXiangZhang
904*1d6a6785SXiangZhangfor.cond.cleanup6:                                ; preds = %for.cond4
905*1d6a6785SXiangZhang  %inc16 = add nsw i32 %Dim.0, 1
906*1d6a6785SXiangZhang  br label %for.cond, !llvm.loop !0
907*1d6a6785SXiangZhang
908*1d6a6785SXiangZhangfor.body7:                                        ; preds = %for.cond4
909*1d6a6785SXiangZhang  %2 = load ptr, ptr %arrayidx, align 8
910*1d6a6785SXiangZhang  %idxprom10 = sext i32 %arg.0 to i64
911*1d6a6785SXiangZhang  %arrayidx11 = getelementptr inbounds i32, ptr %2, i64 %idxprom10
912*1d6a6785SXiangZhang  %3 = load i32, ptr %arrayidx11, align 4
913*1d6a6785SXiangZhang  %arrayidx13 = getelementptr inbounds i32, ptr %Out, i64 %idxprom10
914*1d6a6785SXiangZhang  %4 = load i32, ptr %arrayidx13, align 4
915*1d6a6785SXiangZhang  %add14 = add nsw i32 %4, %3
916*1d6a6785SXiangZhang  store i32 %add14, ptr %arrayidx13, align 4
917*1d6a6785SXiangZhang  call void @_Z3barv()
918*1d6a6785SXiangZhang  %inc = add nsw i32 %arg.0, 1
919*1d6a6785SXiangZhang  br label %for.cond4, !llvm.loop !3
920*1d6a6785SXiangZhang
921*1d6a6785SXiangZhangcleanup:                                          ; preds = %if.then, %for.cond.cleanup
922*1d6a6785SXiangZhang  ret void
923*1d6a6785SXiangZhang}
924*1d6a6785SXiangZhang
925*1d6a6785SXiangZhang  declare void @_Z3barv()
926*1d6a6785SXiangZhang
927*1d6a6785SXiangZhang!0 = distinct !{!0, !1, !2}
928*1d6a6785SXiangZhang!1 = !{!"llvm.loop.mustprogress"}
929*1d6a6785SXiangZhang!2 = !{!"llvm.loop.unroll.enable"}
930*1d6a6785SXiangZhang!3 = distinct !{!3, !1}
931*1d6a6785SXiangZhang;.
932*1d6a6785SXiangZhang; CHECK-CFG: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
933*1d6a6785SXiangZhang; CHECK-CFG: [[META1]] = !{!"llvm.loop.mustprogress"}
934*1d6a6785SXiangZhang; CHECK-CFG: [[META2]] = !{!"llvm.loop.unroll.enable"}
935*1d6a6785SXiangZhang; CHECK-CFG: [[LOOP3]] = distinct !{[[LOOP3]], [[META1]]}
936*1d6a6785SXiangZhang;.
937