1; RUN: opt %loadPolly -polly-scops -analyze -polly-ignore-aliasing < %s | FileCheck %s 2; RUN: opt %loadPolly -polly-function-scops -analyze -polly-ignore-aliasing < %s | FileCheck %s 3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 5 6; typedef struct Mat { 7; float* data; 8; long rows; 9; long cols; 10; long deps; 11; } Matrix; 12; 13; #define M(m,r,c,d) m->data[(r) * m->cols * mt->mdeps + (c) * m->deps + (d)] 14; 15; void jacobi(long nn, Matrix* a1, ..., Matrix* a19) { 16; long i, j, k, n, imax, jmax, kmax; 17; 18; for(n = 0 ; n < nn ; n++) 19; for(i = 1 ; i < a1->rows-1; i++) 20; for(j = 1 ; j < a1->cols-1; j++) 21; for(k = 1 ; k < a1->deps-1; k++) 22; M(a19,i,j,k) = M(a1,i,j,k) + ... + M(a18,i,j,k); 23; } 24; 25; We applied some loop invariant code motion to ensure the loads from m->data, 26; m->rows, m->cols and m->deps happen before the scop. 27 28; This test case verifies that the construction of the assumed context finishes 29; successfully. Depending on how constraineds are accummulated in the assumed 30; context, this test case can take even for a smaller number of arrays over a 31; minute to complete. With the unrolling choosen in this test, an inefficient 32; formulation of the assumption tracking cause LLVM to crash due to excessive 33; memory usage due to an overly large number of disjuncts being formed. 34 35%struct.Mat = type { float*, i64, i64, i64 } 36 37; CHECK: Assumed Context: 38; CHECK-DAG: a2_cols >= -1 + a1_cols 39; CHECK-DAG: a2_deps >= -1 + a1_deps 40; CHECK-DAG: a3_cols >= -1 + a1_cols 41; CHECK-DAG: a3_deps >= -1 + a1_deps 42; CHECK-DAG: a4_cols >= -1 + a1_cols 43; CHECK-DAG: a4_deps >= -1 + a1_deps 44; CHECK-DAG: a5_cols >= -1 + a1_cols 45; CHECK-DAG: a5_deps >= -1 + a1_deps 46; CHECK-DAG: a6_cols >= -1 + a1_cols 47; CHECK-DAG: a6_deps >= -1 + a1_deps 48; CHECK-DAG: a7_cols >= -1 + a1_cols 49; CHECK-DAG: a7_deps >= -1 + a1_deps 50; CHECK-DAG: a8_cols >= -1 + a1_cols 51; CHECK-DAG: a8_deps >= -1 + a1_deps 52; CHECK-DAG: a9_deps >= -1 + a1_deps 53; CHECK-DAG: a9_cols >= -1 + a1_cols 54; CHECK-DAG: a10_cols >= -1 + a1_cols 55; CHECK-DAG: a10_deps >= -1 + a1_deps 56; CHECK-DAG: a11_cols >= -1 + a1_cols 57; CHECK-DAG: a11_deps >= -1 + a1_deps 58; CHECK-DAG: a12_cols >= -1 + a1_cols 59; CHECK-DAG: a12_deps >= -1 + a1_deps 60; CHECK-DAG: a13_cols >= -1 + a1_cols 61; CHECK-DAG: a13_deps >= -1 + a1_deps 62; CHECK-DAG: a14_cols >= -1 + a1_cols 63; CHECK-DAG: a14_deps >= -1 + a1_deps 64; CHECK-DAG: a15_cols >= -1 + a1_cols 65; CHECK-DAG: a15_deps >= -1 + a1_deps 66; CHECK-DAG: a16_cols >= -1 + a1_cols 67; CHECK-DAG: a16_deps >= -1 + a1_deps 68; CHECK-DAG: a17_cols >= -1 + a1_cols 69; CHECK-DAG: a17_deps >= -1 + a1_deps 70; CHECK-DAG: a18_cols >= -1 + a1_cols 71; CHECK-DAG: a18_deps >= -1 + a1_deps 72; CHECK-DAG: a19_deps >= -1 + a1_deps 73; CHECK-DAG: a19_cols >= -1 + a1_cols 74 75define void @jacobi(i64 %nn, 76 %struct.Mat* %a1, 77 %struct.Mat* %a2, 78 %struct.Mat* %a3, 79 %struct.Mat* %a4, 80 %struct.Mat* %a5, 81 %struct.Mat* %a6, 82 %struct.Mat* %a7, 83 %struct.Mat* %a8, 84 %struct.Mat* %a9, 85 %struct.Mat* %a10, 86 %struct.Mat* %a11, 87 %struct.Mat* %a12, 88 %struct.Mat* %a13, 89 %struct.Mat* %a14, 90 %struct.Mat* %a15, 91 %struct.Mat* %a16, 92 %struct.Mat* %a17, 93 %struct.Mat* %a18, 94 %struct.Mat* %a19 95 ) { 96 97entry: 98 br label %entry.split 99 100entry.split: 101 %a1.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a1, i32 0, i32 0 102 %a1.data = load float*, float** %a1.data.ptr, align 8 103 %a1.rows.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a1, i32 0, i32 1 104 %a1.rows = load i64, i64* %a1.rows.ptr, align 8 105 %a1.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a1, i32 0, i32 2 106 %a1.cols = load i64, i64* %a1.cols.ptr, align 8 107 %a1.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a1, i32 0, i32 3 108 %a1.deps = load i64, i64* %a1.deps.ptr, align 8 109 110 %a2.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a2, i32 0, i32 0 111 %a2.data = load float*, float** %a2.data.ptr, align 8 112 %a2.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a2, i32 0, i32 2 113 %a2.cols = load i64, i64* %a2.cols.ptr, align 8 114 %a2.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a2, i32 0, i32 3 115 %a2.deps = load i64, i64* %a2.deps.ptr, align 8 116 117 %a3.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a3, i32 0, i32 0 118 %a3.data = load float*, float** %a3.data.ptr, align 8 119 %a3.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a3, i32 0, i32 2 120 %a3.cols = load i64, i64* %a3.cols.ptr, align 8 121 %a3.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a3, i32 0, i32 3 122 %a3.deps = load i64, i64* %a3.deps.ptr, align 8 123 124 %a4.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a4, i32 0, i32 0 125 %a4.data = load float*, float** %a4.data.ptr, align 8 126 %a4.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a4, i32 0, i32 2 127 %a4.cols = load i64, i64* %a4.cols.ptr, align 8 128 %a4.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a4, i32 0, i32 3 129 %a4.deps = load i64, i64* %a4.deps.ptr, align 8 130 131 %a5.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a5, i32 0, i32 0 132 %a5.data = load float*, float** %a5.data.ptr, align 8 133 %a5.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a5, i32 0, i32 2 134 %a5.cols = load i64, i64* %a5.cols.ptr, align 8 135 %a5.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a5, i32 0, i32 3 136 %a5.deps = load i64, i64* %a5.deps.ptr, align 8 137 138 %a6.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a6, i32 0, i32 0 139 %a6.data = load float*, float** %a6.data.ptr, align 8 140 %a6.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a6, i32 0, i32 2 141 %a6.cols = load i64, i64* %a6.cols.ptr, align 8 142 %a6.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a6, i32 0, i32 3 143 %a6.deps = load i64, i64* %a6.deps.ptr, align 8 144 145 %a7.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a7, i32 0, i32 0 146 %a7.data = load float*, float** %a7.data.ptr, align 8 147 %a7.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a7, i32 0, i32 2 148 %a7.cols = load i64, i64* %a7.cols.ptr, align 8 149 %a7.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a7, i32 0, i32 3 150 %a7.deps = load i64, i64* %a7.deps.ptr, align 8 151 152 %a8.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a8, i32 0, i32 0 153 %a8.data = load float*, float** %a8.data.ptr, align 8 154 %a8.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a8, i32 0, i32 2 155 %a8.cols = load i64, i64* %a8.cols.ptr, align 8 156 %a8.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a8, i32 0, i32 3 157 %a8.deps = load i64, i64* %a8.deps.ptr, align 8 158 159 %a9.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a9, i32 0, i32 0 160 %a9.data = load float*, float** %a9.data.ptr, align 8 161 %a9.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a9, i32 0, i32 2 162 %a9.cols = load i64, i64* %a9.cols.ptr, align 8 163 %a9.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a9, i32 0, i32 3 164 %a9.deps = load i64, i64* %a9.deps.ptr, align 8 165 166 %a10.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a10, i32 0, i32 0 167 %a10.data = load float*, float** %a10.data.ptr, align 8 168 %a10.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a10, i32 0, i32 2 169 %a10.cols = load i64, i64* %a10.cols.ptr, align 8 170 %a10.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a10, i32 0, i32 3 171 %a10.deps = load i64, i64* %a10.deps.ptr, align 8 172 173 %a11.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a11, i32 0, i32 0 174 %a11.data = load float*, float** %a11.data.ptr, align 8 175 %a11.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a11, i32 0, i32 2 176 %a11.cols = load i64, i64* %a11.cols.ptr, align 8 177 %a11.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a11, i32 0, i32 3 178 %a11.deps = load i64, i64* %a11.deps.ptr, align 8 179 180 %a12.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a12, i32 0, i32 0 181 %a12.data = load float*, float** %a12.data.ptr, align 8 182 %a12.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a12, i32 0, i32 2 183 %a12.cols = load i64, i64* %a12.cols.ptr, align 8 184 %a12.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a12, i32 0, i32 3 185 %a12.deps = load i64, i64* %a12.deps.ptr, align 8 186 187 %a13.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a13, i32 0, i32 0 188 %a13.data = load float*, float** %a13.data.ptr, align 8 189 %a13.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a13, i32 0, i32 2 190 %a13.cols = load i64, i64* %a13.cols.ptr, align 8 191 %a13.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a13, i32 0, i32 3 192 %a13.deps = load i64, i64* %a13.deps.ptr, align 8 193 194 %a14.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a14, i32 0, i32 0 195 %a14.data = load float*, float** %a14.data.ptr, align 8 196 %a14.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a14, i32 0, i32 2 197 %a14.cols = load i64, i64* %a14.cols.ptr, align 8 198 %a14.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a14, i32 0, i32 3 199 %a14.deps = load i64, i64* %a14.deps.ptr, align 8 200 201 %a15.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a15, i32 0, i32 0 202 %a15.data = load float*, float** %a15.data.ptr, align 8 203 %a15.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a15, i32 0, i32 2 204 %a15.cols = load i64, i64* %a15.cols.ptr, align 8 205 %a15.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a15, i32 0, i32 3 206 %a15.deps = load i64, i64* %a15.deps.ptr, align 8 207 208 %a16.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a16, i32 0, i32 0 209 %a16.data = load float*, float** %a16.data.ptr, align 8 210 %a16.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a16, i32 0, i32 2 211 %a16.cols = load i64, i64* %a16.cols.ptr, align 8 212 %a16.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a16, i32 0, i32 3 213 %a16.deps = load i64, i64* %a16.deps.ptr, align 8 214 215 %a17.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a17, i32 0, i32 0 216 %a17.data = load float*, float** %a17.data.ptr, align 8 217 %a17.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a17, i32 0, i32 2 218 %a17.cols = load i64, i64* %a17.cols.ptr, align 8 219 %a17.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a17, i32 0, i32 3 220 %a17.deps = load i64, i64* %a17.deps.ptr, align 8 221 222 %a18.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a18, i32 0, i32 0 223 %a18.data = load float*, float** %a18.data.ptr, align 8 224 %a18.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a18, i32 0, i32 2 225 %a18.cols = load i64, i64* %a18.cols.ptr, align 8 226 %a18.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a18, i32 0, i32 3 227 %a18.deps = load i64, i64* %a18.deps.ptr, align 8 228 229 %a19.data.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a19, i32 0, i32 0 230 %a19.data = load float*, float** %a19.data.ptr, align 8 231 %a19.cols.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a19, i32 0, i32 2 232 %a19.cols = load i64, i64* %a19.cols.ptr, align 8 233 %a19.deps.ptr = getelementptr inbounds %struct.Mat, %struct.Mat* %a19, i32 0, i32 3 234 %a19.deps = load i64, i64* %a19.deps.ptr, align 8 235 br label %for.n 236 237for.n: 238 %indvar.n = phi i64 [ 0, %entry.split ], [ %indvar.n.next, %for.inc.n ] 239 br label %for.i 240 241for.i: 242 %indvar.i = phi i64 [ 0, %for.n ], [ %indvar.i.next, %for.inc.i ] 243 br label %for.j 244 245for.j: 246 %indvar.j = phi i64 [ 0, %for.i ], [ %indvar.j.next, %for.inc.j ] 247 br label %for.body.k 248 249for.body.k: 250 %indvar.k = phi i64 [ 0, %for.j ], [ %indvar.k.next, %for.body.k ] 251 %a1.tmp1 = add i64 %a1.cols, 1 252 %a1.tmp2 = mul i64 %a1.deps, %a1.tmp1 253 %a1.tmp3 = add i64 %a1.tmp2, 1 254 %a1.tmp4 = mul i64 %a1.cols, %a1.deps 255 %a1.idx.i = mul i64 %a1.tmp4, %indvar.i 256 %a1.tmp5 = add i64 %a1.tmp3, %a1.idx.i 257 %a1.idx.j = mul i64 %a1.deps, %indvar.j 258 %a1.tmp6 = add i64 %a1.tmp5, %a1.idx.j 259 %a1.idx.k = add i64 %a1.tmp6, %indvar.k 260 %a1.ptr = getelementptr float, float* %a1.data, i64 %a1.idx.k 261 %sum = load float, float* %a1.ptr, align 4 262 263 %a2.tmp1 = add i64 %a2.cols, 1 264 %a2.tmp2 = mul i64 %a2.deps, %a2.tmp1 265 %a2.tmp3 = add i64 %a2.tmp2, 1 266 %a2.tmp4 = mul i64 %a2.cols, %a2.deps 267 %a2.idx.i = mul i64 %a2.tmp4, %indvar.i 268 %a2.tmp5 = add i64 %a2.tmp3, %a2.idx.i 269 %a2.idx.j = mul i64 %a2.deps, %indvar.j 270 %a2.tmp6 = add i64 %a2.tmp5, %a2.idx.j 271 %a2.idx.k = add i64 %a2.tmp6, %indvar.k 272 %a2.ptr = getelementptr float, float* %a2.data, i64 %a2.idx.k 273 %a2.val = load float, float* %a2.ptr, align 4 274 %sum.a2 = fadd float %sum, %a2.val 275 276 %a3.tmp1 = add i64 %a3.cols, 1 277 %a3.tmp2 = mul i64 %a3.deps, %a3.tmp1 278 %a3.tmp3 = add i64 %a3.tmp2, 1 279 %a3.tmp4 = mul i64 %a3.cols, %a3.deps 280 %a3.idx.i = mul i64 %a3.tmp4, %indvar.i 281 %a3.tmp5 = add i64 %a3.tmp3, %a3.idx.i 282 %a3.idx.j = mul i64 %a3.deps, %indvar.j 283 %a3.tmp6 = add i64 %a3.tmp5, %a3.idx.j 284 %a3.idx.k = add i64 %a3.tmp6, %indvar.k 285 %a3.ptr = getelementptr float, float* %a3.data, i64 %a3.idx.k 286 %a3.val = load float, float* %a3.ptr, align 4 287 %sum.a3 = fadd float %sum.a2, %a3.val 288 289 %a4.tmp1 = add i64 %a4.cols, 1 290 %a4.tmp2 = mul i64 %a4.deps, %a4.tmp1 291 %a4.tmp3 = add i64 %a4.tmp2, 1 292 %a4.tmp4 = mul i64 %a4.cols, %a4.deps 293 %a4.idx.i = mul i64 %a4.tmp4, %indvar.i 294 %a4.tmp5 = add i64 %a4.tmp3, %a4.idx.i 295 %a4.idx.j = mul i64 %a4.deps, %indvar.j 296 %a4.tmp6 = add i64 %a4.tmp5, %a4.idx.j 297 %a4.idx.k = add i64 %a4.tmp6, %indvar.k 298 %a4.ptr = getelementptr float, float* %a4.data, i64 %a4.idx.k 299 %a4.val = load float, float* %a4.ptr, align 4 300 %sum.a4 = fadd float %sum.a3, %a4.val 301 302 %a5.tmp1 = add i64 %a5.cols, 1 303 %a5.tmp2 = mul i64 %a5.deps, %a5.tmp1 304 %a5.tmp3 = add i64 %a5.tmp2, 1 305 %a5.tmp4 = mul i64 %a5.cols, %a5.deps 306 %a5.idx.i = mul i64 %a5.tmp4, %indvar.i 307 %a5.tmp5 = add i64 %a5.tmp3, %a5.idx.i 308 %a5.idx.j = mul i64 %a5.deps, %indvar.j 309 %a5.tmp6 = add i64 %a5.tmp5, %a5.idx.j 310 %a5.idx.k = add i64 %a5.tmp6, %indvar.k 311 %a5.ptr = getelementptr float, float* %a5.data, i64 %a5.idx.k 312 %a5.val = load float, float* %a5.ptr, align 4 313 %sum.a5 = fadd float %sum.a4, %a5.val 314 315 %a6.tmp1 = add i64 %a6.cols, 1 316 %a6.tmp2 = mul i64 %a6.deps, %a6.tmp1 317 %a6.tmp3 = add i64 %a6.tmp2, 1 318 %a6.tmp4 = mul i64 %a6.cols, %a6.deps 319 %a6.idx.i = mul i64 %a6.tmp4, %indvar.i 320 %a6.tmp5 = add i64 %a6.tmp3, %a6.idx.i 321 %a6.idx.j = mul i64 %a6.deps, %indvar.j 322 %a6.tmp6 = add i64 %a6.tmp5, %a6.idx.j 323 %a6.idx.k = add i64 %a6.tmp6, %indvar.k 324 %a6.ptr = getelementptr float, float* %a6.data, i64 %a6.idx.k 325 %a6.val = load float, float* %a6.ptr, align 4 326 %sum.a6 = fadd float %sum.a5, %a6.val 327 328 %a7.tmp1 = add i64 %a7.cols, 1 329 %a7.tmp2 = mul i64 %a7.deps, %a7.tmp1 330 %a7.tmp3 = add i64 %a7.tmp2, 1 331 %a7.tmp4 = mul i64 %a7.cols, %a7.deps 332 %a7.idx.i = mul i64 %a7.tmp4, %indvar.i 333 %a7.tmp5 = add i64 %a7.tmp3, %a7.idx.i 334 %a7.idx.j = mul i64 %a7.deps, %indvar.j 335 %a7.tmp6 = add i64 %a7.tmp5, %a7.idx.j 336 %a7.idx.k = add i64 %a7.tmp6, %indvar.k 337 %a7.ptr = getelementptr float, float* %a7.data, i64 %a7.idx.k 338 %a7.val = load float, float* %a7.ptr, align 4 339 %sum.a7 = fadd float %sum.a6, %a7.val 340 341 %a8.tmp1 = add i64 %a8.cols, 1 342 %a8.tmp2 = mul i64 %a8.deps, %a8.tmp1 343 %a8.tmp3 = add i64 %a8.tmp2, 1 344 %a8.tmp4 = mul i64 %a8.cols, %a8.deps 345 %a8.idx.i = mul i64 %a8.tmp4, %indvar.i 346 %a8.tmp5 = add i64 %a8.tmp3, %a8.idx.i 347 %a8.idx.j = mul i64 %a8.deps, %indvar.j 348 %a8.tmp6 = add i64 %a8.tmp5, %a8.idx.j 349 %a8.idx.k = add i64 %a8.tmp6, %indvar.k 350 %a8.ptr = getelementptr float, float* %a8.data, i64 %a8.idx.k 351 %a8.val = load float, float* %a8.ptr, align 4 352 %sum.a8 = fadd float %sum.a7, %a8.val 353 354 %a9.tmp1 = add i64 %a9.cols, 1 355 %a9.tmp2 = mul i64 %a9.deps, %a9.tmp1 356 %a9.tmp3 = add i64 %a9.tmp2, 1 357 %a9.tmp4 = mul i64 %a9.cols, %a9.deps 358 %a9.idx.i = mul i64 %a9.tmp4, %indvar.i 359 %a9.tmp5 = add i64 %a9.tmp3, %a9.idx.i 360 %a9.idx.j = mul i64 %a9.deps, %indvar.j 361 %a9.tmp6 = add i64 %a9.tmp5, %a9.idx.j 362 %a9.idx.k = add i64 %a9.tmp6, %indvar.k 363 %a9.ptr = getelementptr float, float* %a9.data, i64 %a9.idx.k 364 %a9.val = load float, float* %a9.ptr, align 4 365 %sum.a9 = fadd float %sum.a8, %a9.val 366 367 %a10.tmp1 = add i64 %a10.cols, 1 368 %a10.tmp2 = mul i64 %a10.deps, %a10.tmp1 369 %a10.tmp3 = add i64 %a10.tmp2, 1 370 %a10.tmp4 = mul i64 %a10.cols, %a10.deps 371 %a10.idx.i = mul i64 %a10.tmp4, %indvar.i 372 %a10.tmp5 = add i64 %a10.tmp3, %a10.idx.i 373 %a10.idx.j = mul i64 %a10.deps, %indvar.j 374 %a10.tmp6 = add i64 %a10.tmp5, %a10.idx.j 375 %a10.idx.k = add i64 %a10.tmp6, %indvar.k 376 %a10.ptr = getelementptr float, float* %a10.data, i64 %a10.idx.k 377 %a10.val = load float, float* %a10.ptr, align 4 378 %sum.a10 = fadd float %sum.a9, %a10.val 379 380 %a11.tmp1 = add i64 %a11.cols, 1 381 %a11.tmp2 = mul i64 %a11.deps, %a11.tmp1 382 %a11.tmp3 = add i64 %a11.tmp2, 1 383 %a11.tmp4 = mul i64 %a11.cols, %a11.deps 384 %a11.idx.i = mul i64 %a11.tmp4, %indvar.i 385 %a11.tmp5 = add i64 %a11.tmp3, %a11.idx.i 386 %a11.idx.j = mul i64 %a11.deps, %indvar.j 387 %a11.tmp6 = add i64 %a11.tmp5, %a11.idx.j 388 %a11.idx.k = add i64 %a11.tmp6, %indvar.k 389 %a11.ptr = getelementptr float, float* %a11.data, i64 %a11.idx.k 390 %a11.val = load float, float* %a11.ptr, align 4 391 %sum.a11 = fadd float %sum.a10, %a11.val 392 393 %a12.tmp1 = add i64 %a12.cols, 1 394 %a12.tmp2 = mul i64 %a12.deps, %a12.tmp1 395 %a12.tmp3 = add i64 %a12.tmp2, 1 396 %a12.tmp4 = mul i64 %a12.cols, %a12.deps 397 %a12.idx.i = mul i64 %a12.tmp4, %indvar.i 398 %a12.tmp5 = add i64 %a12.tmp3, %a12.idx.i 399 %a12.idx.j = mul i64 %a12.deps, %indvar.j 400 %a12.tmp6 = add i64 %a12.tmp5, %a12.idx.j 401 %a12.idx.k = add i64 %a12.tmp6, %indvar.k 402 %a12.ptr = getelementptr float, float* %a12.data, i64 %a12.idx.k 403 %a12.val = load float, float* %a12.ptr, align 4 404 %sum.a12 = fadd float %sum.a11, %a12.val 405 406 %a13.tmp1 = add i64 %a13.cols, 1 407 %a13.tmp2 = mul i64 %a13.deps, %a13.tmp1 408 %a13.tmp3 = add i64 %a13.tmp2, 1 409 %a13.tmp4 = mul i64 %a13.cols, %a13.deps 410 %a13.idx.i = mul i64 %a13.tmp4, %indvar.i 411 %a13.tmp5 = add i64 %a13.tmp3, %a13.idx.i 412 %a13.idx.j = mul i64 %a13.deps, %indvar.j 413 %a13.tmp6 = add i64 %a13.tmp5, %a13.idx.j 414 %a13.idx.k = add i64 %a13.tmp6, %indvar.k 415 %a13.ptr = getelementptr float, float* %a13.data, i64 %a13.idx.k 416 %a13.val = load float, float* %a13.ptr, align 4 417 %sum.a13 = fadd float %sum.a12, %a13.val 418 419 %a14.tmp1 = add i64 %a14.cols, 1 420 %a14.tmp2 = mul i64 %a14.deps, %a14.tmp1 421 %a14.tmp3 = add i64 %a14.tmp2, 1 422 %a14.tmp4 = mul i64 %a14.cols, %a14.deps 423 %a14.idx.i = mul i64 %a14.tmp4, %indvar.i 424 %a14.tmp5 = add i64 %a14.tmp3, %a14.idx.i 425 %a14.idx.j = mul i64 %a14.deps, %indvar.j 426 %a14.tmp6 = add i64 %a14.tmp5, %a14.idx.j 427 %a14.idx.k = add i64 %a14.tmp6, %indvar.k 428 %a14.ptr = getelementptr float, float* %a14.data, i64 %a14.idx.k 429 %a14.val = load float, float* %a14.ptr, align 4 430 %sum.a14 = fadd float %sum.a13, %a14.val 431 432 %a15.tmp1 = add i64 %a15.cols, 1 433 %a15.tmp2 = mul i64 %a15.deps, %a15.tmp1 434 %a15.tmp3 = add i64 %a15.tmp2, 1 435 %a15.tmp4 = mul i64 %a15.cols, %a15.deps 436 %a15.idx.i = mul i64 %a15.tmp4, %indvar.i 437 %a15.tmp5 = add i64 %a15.tmp3, %a15.idx.i 438 %a15.idx.j = mul i64 %a15.deps, %indvar.j 439 %a15.tmp6 = add i64 %a15.tmp5, %a15.idx.j 440 %a15.idx.k = add i64 %a15.tmp6, %indvar.k 441 %a15.ptr = getelementptr float, float* %a15.data, i64 %a15.idx.k 442 %a15.val = load float, float* %a15.ptr, align 4 443 %sum.a15 = fadd float %sum.a14, %a15.val 444 445 %a16.tmp1 = add i64 %a16.cols, 1 446 %a16.tmp2 = mul i64 %a16.deps, %a16.tmp1 447 %a16.tmp3 = add i64 %a16.tmp2, 1 448 %a16.tmp4 = mul i64 %a16.cols, %a16.deps 449 %a16.idx.i = mul i64 %a16.tmp4, %indvar.i 450 %a16.tmp5 = add i64 %a16.tmp3, %a16.idx.i 451 %a16.idx.j = mul i64 %a16.deps, %indvar.j 452 %a16.tmp6 = add i64 %a16.tmp5, %a16.idx.j 453 %a16.idx.k = add i64 %a16.tmp6, %indvar.k 454 %a16.ptr = getelementptr float, float* %a16.data, i64 %a16.idx.k 455 %a16.val = load float, float* %a16.ptr, align 4 456 %sum.a16 = fadd float %sum.a15, %a16.val 457 458 %a17.tmp1 = add i64 %a17.cols, 1 459 %a17.tmp2 = mul i64 %a17.deps, %a17.tmp1 460 %a17.tmp3 = add i64 %a17.tmp2, 1 461 %a17.tmp4 = mul i64 %a17.cols, %a17.deps 462 %a17.idx.i = mul i64 %a17.tmp4, %indvar.i 463 %a17.tmp5 = add i64 %a17.tmp3, %a17.idx.i 464 %a17.idx.j = mul i64 %a17.deps, %indvar.j 465 %a17.tmp6 = add i64 %a17.tmp5, %a17.idx.j 466 %a17.idx.k = add i64 %a17.tmp6, %indvar.k 467 %a17.ptr = getelementptr float, float* %a17.data, i64 %a17.idx.k 468 %a17.val = load float, float* %a17.ptr, align 4 469 %sum.a17 = fadd float %sum.a16, %a17.val 470 471 %a18.tmp1 = add i64 %a18.cols, 1 472 %a18.tmp2 = mul i64 %a18.deps, %a18.tmp1 473 %a18.tmp3 = add i64 %a18.tmp2, 1 474 %a18.tmp4 = mul i64 %a18.cols, %a18.deps 475 %a18.idx.i = mul i64 %a18.tmp4, %indvar.i 476 %a18.tmp5 = add i64 %a18.tmp3, %a18.idx.i 477 %a18.idx.j = mul i64 %a18.deps, %indvar.j 478 %a18.tmp6 = add i64 %a18.tmp5, %a18.idx.j 479 %a18.idx.k = add i64 %a18.tmp6, %indvar.k 480 %a18.ptr = getelementptr float, float* %a18.data, i64 %a18.idx.k 481 %a18.val = load float, float* %a18.ptr, align 4 482 %sum.a18 = fadd float %sum.a17, %a18.val 483 484 %a19.tmp1 = add i64 %a19.cols, 1 485 %a19.tmp2 = mul i64 %a19.deps, %a19.tmp1 486 %a19.tmp3 = add i64 %a19.tmp2, 1 487 %a19.tmp4 = mul i64 %a19.cols, %a19.deps 488 %a19.idx.i = mul i64 %a19.tmp4, %indvar.i 489 %a19.tmp5 = add i64 %a19.tmp3, %a19.idx.i 490 %a19.idx.j = mul i64 %a19.deps, %indvar.j 491 %a19.tmp6 = add i64 %a19.tmp5, %a19.idx.j 492 %a19.idx.k = add i64 %a19.tmp6, %indvar.k 493 %a19.ptr = getelementptr float, float* %a19.data, i64 %a19.idx.k 494 store float %sum.a18, float* %a19.ptr, align 4 495 496 %indvar.k.next = add i64 %indvar.k, 1 497 %a1.deps.sub = add i64 %a1.deps, -2 498 %exitcond = icmp ne i64 %indvar.k.next, %a1.deps.sub 499 br i1 %exitcond, label %for.body.k, label %for.inc.j 500 501for.inc.j: 502 %indvar.j.next = add i64 %indvar.j, 1 503 %a1.cols.sub = add i64 %a1.cols, -2 504 %exitcond.j = icmp ne i64 %indvar.j.next, %a1.cols.sub 505 br i1 %exitcond.j, label %for.j, label %for.inc.i 506 507for.inc.i: 508 %indvar.i.next = add i64 %indvar.i, 1 509 %a1.rows.sub = add i64 %a1.rows, -2 510 %exitcond.i = icmp ne i64 %indvar.i.next, %a1.rows.sub 511 br i1 %exitcond.i, label %for.i, label %for.inc.n 512 513for.inc.n: 514 %indvar.n.next = add nsw i64 %indvar.n, 1 515 %exitcond.n = icmp ne i64 %indvar.n.next, %nn 516 br i1 %exitcond.n, label %for.n, label %exit 517 518exit: 519 ret void 520} 521