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