[flang] Fix length handling in character kind implicit conversion (#74586)
[llvm-project.git] / polly / test / ScopInfo / multidim_many_references.ll
blobb0483b267260ef8787c4b8f2ea02c930b7afdfbe
1 ; RUN: opt %loadPolly -polly-print-scops -polly-ignore-aliasing -disable-output < %s | FileCheck %s
2 ; RUN: opt %loadPolly -polly-print-function-scops -polly-ignore-aliasing -disable-output < %s | FileCheck %s
4 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
6 ; typedef struct Mat {
7 ;   float* data;
8 ;   long rows;
9 ;   long cols;
10 ;   long deps;
11 ; } Matrix;
13 ; #define M(m,r,c,d)  m->data[(r) * m->cols * mt->mdeps + (c) * m->deps + (d)]
15 ; void jacobi(long nn, Matrix* a1, ..., Matrix* a19) {
16 ;   long i, j, k, n, imax, jmax, kmax;
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 ; }
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.
28 ; This test case verifies that the construction of the assumed context finishes
29 ; successfully. Depending on how constrained are accumulated 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.
35 %struct.Mat = type { ptr, i64, i64, i64 }
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
75 define void @jacobi(i64 %nn,
76   ptr %a1,
77   ptr %a2,
78   ptr %a3,
79   ptr %a4,
80   ptr %a5,
81   ptr %a6,
82   ptr %a7,
83   ptr %a8,
84   ptr %a9,
85   ptr %a10,
86   ptr %a11,
87   ptr %a12,
88   ptr %a13,
89   ptr %a14,
90   ptr %a15,
91   ptr %a16,
92   ptr %a17,
93   ptr %a18,
94   ptr %a19
95   )  {
97 entry:
98   br label %entry.split
100 entry.split:
101   %a1.data = load ptr, ptr %a1, align 8
102   %a1.rows.ptr = getelementptr inbounds %struct.Mat, ptr %a1, i32 0, i32 1
103   %a1.rows = load i64, ptr %a1.rows.ptr, align 8
104   %a1.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a1, i32 0, i32 2
105   %a1.cols = load i64, ptr %a1.cols.ptr, align 8
106   %a1.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a1, i32 0, i32 3
107   %a1.deps = load i64, ptr %a1.deps.ptr, align 8
109   %a2.data = load ptr, ptr %a2, align 8
110   %a2.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a2, i32 0, i32 2
111   %a2.cols = load i64, ptr %a2.cols.ptr, align 8
112   %a2.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a2, i32 0, i32 3
113   %a2.deps = load i64, ptr %a2.deps.ptr, align 8
115   %a3.data = load ptr, ptr %a3, align 8
116   %a3.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a3, i32 0, i32 2
117   %a3.cols = load i64, ptr %a3.cols.ptr, align 8
118   %a3.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a3, i32 0, i32 3
119   %a3.deps = load i64, ptr %a3.deps.ptr, align 8
121   %a4.data = load ptr, ptr %a4, align 8
122   %a4.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a4, i32 0, i32 2
123   %a4.cols = load i64, ptr %a4.cols.ptr, align 8
124   %a4.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a4, i32 0, i32 3
125   %a4.deps = load i64, ptr %a4.deps.ptr, align 8
127   %a5.data = load ptr, ptr %a5, align 8
128   %a5.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a5, i32 0, i32 2
129   %a5.cols = load i64, ptr %a5.cols.ptr, align 8
130   %a5.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a5, i32 0, i32 3
131   %a5.deps = load i64, ptr %a5.deps.ptr, align 8
133   %a6.data = load ptr, ptr %a6, align 8
134   %a6.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a6, i32 0, i32 2
135   %a6.cols = load i64, ptr %a6.cols.ptr, align 8
136   %a6.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a6, i32 0, i32 3
137   %a6.deps = load i64, ptr %a6.deps.ptr, align 8
139   %a7.data = load ptr, ptr %a7, align 8
140   %a7.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a7, i32 0, i32 2
141   %a7.cols = load i64, ptr %a7.cols.ptr, align 8
142   %a7.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a7, i32 0, i32 3
143   %a7.deps = load i64, ptr %a7.deps.ptr, align 8
145   %a8.data = load ptr, ptr %a8, align 8
146   %a8.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a8, i32 0, i32 2
147   %a8.cols = load i64, ptr %a8.cols.ptr, align 8
148   %a8.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a8, i32 0, i32 3
149   %a8.deps = load i64, ptr %a8.deps.ptr, align 8
151   %a9.data = load ptr, ptr %a9, align 8
152   %a9.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a9, i32 0, i32 2
153   %a9.cols = load i64, ptr %a9.cols.ptr, align 8
154   %a9.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a9, i32 0, i32 3
155   %a9.deps = load i64, ptr %a9.deps.ptr, align 8
157   %a10.data = load ptr, ptr %a10, align 8
158   %a10.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a10, i32 0, i32 2
159   %a10.cols = load i64, ptr %a10.cols.ptr, align 8
160   %a10.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a10, i32 0, i32 3
161   %a10.deps = load i64, ptr %a10.deps.ptr, align 8
163   %a11.data = load ptr, ptr %a11, align 8
164   %a11.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a11, i32 0, i32 2
165   %a11.cols = load i64, ptr %a11.cols.ptr, align 8
166   %a11.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a11, i32 0, i32 3
167   %a11.deps = load i64, ptr %a11.deps.ptr, align 8
169   %a12.data = load ptr, ptr %a12, align 8
170   %a12.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a12, i32 0, i32 2
171   %a12.cols = load i64, ptr %a12.cols.ptr, align 8
172   %a12.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a12, i32 0, i32 3
173   %a12.deps = load i64, ptr %a12.deps.ptr, align 8
175   %a13.data = load ptr, ptr %a13, align 8
176   %a13.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a13, i32 0, i32 2
177   %a13.cols = load i64, ptr %a13.cols.ptr, align 8
178   %a13.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a13, i32 0, i32 3
179   %a13.deps = load i64, ptr %a13.deps.ptr, align 8
181   %a14.data = load ptr, ptr %a14, align 8
182   %a14.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a14, i32 0, i32 2
183   %a14.cols = load i64, ptr %a14.cols.ptr, align 8
184   %a14.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a14, i32 0, i32 3
185   %a14.deps = load i64, ptr %a14.deps.ptr, align 8
187   %a15.data = load ptr, ptr %a15, align 8
188   %a15.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a15, i32 0, i32 2
189   %a15.cols = load i64, ptr %a15.cols.ptr, align 8
190   %a15.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a15, i32 0, i32 3
191   %a15.deps = load i64, ptr %a15.deps.ptr, align 8
193   %a16.data = load ptr, ptr %a16, align 8
194   %a16.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a16, i32 0, i32 2
195   %a16.cols = load i64, ptr %a16.cols.ptr, align 8
196   %a16.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a16, i32 0, i32 3
197   %a16.deps = load i64, ptr %a16.deps.ptr, align 8
199   %a17.data = load ptr, ptr %a17, align 8
200   %a17.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a17, i32 0, i32 2
201   %a17.cols = load i64, ptr %a17.cols.ptr, align 8
202   %a17.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a17, i32 0, i32 3
203   %a17.deps = load i64, ptr %a17.deps.ptr, align 8
205   %a18.data = load ptr, ptr %a18, align 8
206   %a18.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a18, i32 0, i32 2
207   %a18.cols = load i64, ptr %a18.cols.ptr, align 8
208   %a18.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a18, i32 0, i32 3
209   %a18.deps = load i64, ptr %a18.deps.ptr, align 8
211   %a19.data = load ptr, ptr %a19, align 8
212   %a19.cols.ptr = getelementptr inbounds %struct.Mat, ptr %a19, i32 0, i32 2
213   %a19.cols = load i64, ptr %a19.cols.ptr, align 8
214   %a19.deps.ptr = getelementptr inbounds %struct.Mat, ptr %a19, i32 0, i32 3
215   %a19.deps = load i64, ptr %a19.deps.ptr, align 8
216   br label %for.n
218 for.n:
219   %indvar.n = phi i64 [ 0, %entry.split ], [ %indvar.n.next, %for.inc.n ]
220   br label %for.i
222 for.i:
223   %indvar.i = phi i64 [ 0, %for.n ], [ %indvar.i.next, %for.inc.i ]
224   br label %for.j
226 for.j:
227   %indvar.j = phi i64 [ 0, %for.i ], [ %indvar.j.next, %for.inc.j ]
228   br label %for.body.k
230 for.body.k:
231   %indvar.k = phi i64 [ 0, %for.j ], [ %indvar.k.next, %for.body.k ]
232   %a1.tmp1 = add i64 %a1.cols, 1
233   %a1.tmp2 = mul i64 %a1.deps, %a1.tmp1
234   %a1.tmp3 = add i64 %a1.tmp2, 1
235   %a1.tmp4 = mul i64 %a1.cols, %a1.deps
236   %a1.idx.i = mul i64 %a1.tmp4, %indvar.i
237   %a1.tmp5 = add i64 %a1.tmp3, %a1.idx.i
238   %a1.idx.j = mul i64 %a1.deps, %indvar.j
239   %a1.tmp6 = add i64 %a1.tmp5, %a1.idx.j
240   %a1.idx.k = add i64 %a1.tmp6, %indvar.k
241   %a1.ptr = getelementptr float, ptr %a1.data, i64 %a1.idx.k
242   %sum = load float, ptr %a1.ptr, align 4
244   %a2.tmp1 = add i64 %a2.cols, 1
245   %a2.tmp2 = mul i64 %a2.deps, %a2.tmp1
246   %a2.tmp3 = add i64 %a2.tmp2, 1
247   %a2.tmp4 = mul i64 %a2.cols, %a2.deps
248   %a2.idx.i = mul i64 %a2.tmp4, %indvar.i
249   %a2.tmp5 = add i64 %a2.tmp3, %a2.idx.i
250   %a2.idx.j = mul i64 %a2.deps, %indvar.j
251   %a2.tmp6 = add i64 %a2.tmp5, %a2.idx.j
252   %a2.idx.k = add i64 %a2.tmp6, %indvar.k
253   %a2.ptr = getelementptr float, ptr %a2.data, i64 %a2.idx.k
254   %a2.val = load float, ptr %a2.ptr, align 4
255   %sum.a2 = fadd float %sum, %a2.val
257   %a3.tmp1 = add i64 %a3.cols, 1
258   %a3.tmp2 = mul i64 %a3.deps, %a3.tmp1
259   %a3.tmp3 = add i64 %a3.tmp2, 1
260   %a3.tmp4 = mul i64 %a3.cols, %a3.deps
261   %a3.idx.i = mul i64 %a3.tmp4, %indvar.i
262   %a3.tmp5 = add i64 %a3.tmp3, %a3.idx.i
263   %a3.idx.j = mul i64 %a3.deps, %indvar.j
264   %a3.tmp6 = add i64 %a3.tmp5, %a3.idx.j
265   %a3.idx.k = add i64 %a3.tmp6, %indvar.k
266   %a3.ptr = getelementptr float, ptr %a3.data, i64 %a3.idx.k
267   %a3.val = load float, ptr %a3.ptr, align 4
268   %sum.a3 = fadd float %sum.a2, %a3.val
270   %a4.tmp1 = add i64 %a4.cols, 1
271   %a4.tmp2 = mul i64 %a4.deps, %a4.tmp1
272   %a4.tmp3 = add i64 %a4.tmp2, 1
273   %a4.tmp4 = mul i64 %a4.cols, %a4.deps
274   %a4.idx.i = mul i64 %a4.tmp4, %indvar.i
275   %a4.tmp5 = add i64 %a4.tmp3, %a4.idx.i
276   %a4.idx.j = mul i64 %a4.deps, %indvar.j
277   %a4.tmp6 = add i64 %a4.tmp5, %a4.idx.j
278   %a4.idx.k = add i64 %a4.tmp6, %indvar.k
279   %a4.ptr = getelementptr float, ptr %a4.data, i64 %a4.idx.k
280   %a4.val = load float, ptr %a4.ptr, align 4
281   %sum.a4 = fadd float %sum.a3, %a4.val
283   %a5.tmp1 = add i64 %a5.cols, 1
284   %a5.tmp2 = mul i64 %a5.deps, %a5.tmp1
285   %a5.tmp3 = add i64 %a5.tmp2, 1
286   %a5.tmp4 = mul i64 %a5.cols, %a5.deps
287   %a5.idx.i = mul i64 %a5.tmp4, %indvar.i
288   %a5.tmp5 = add i64 %a5.tmp3, %a5.idx.i
289   %a5.idx.j = mul i64 %a5.deps, %indvar.j
290   %a5.tmp6 = add i64 %a5.tmp5, %a5.idx.j
291   %a5.idx.k = add i64 %a5.tmp6, %indvar.k
292   %a5.ptr = getelementptr float, ptr %a5.data, i64 %a5.idx.k
293   %a5.val = load float, ptr %a5.ptr, align 4
294   %sum.a5 = fadd float %sum.a4, %a5.val
296   %a6.tmp1 = add i64 %a6.cols, 1
297   %a6.tmp2 = mul i64 %a6.deps, %a6.tmp1
298   %a6.tmp3 = add i64 %a6.tmp2, 1
299   %a6.tmp4 = mul i64 %a6.cols, %a6.deps
300   %a6.idx.i = mul i64 %a6.tmp4, %indvar.i
301   %a6.tmp5 = add i64 %a6.tmp3, %a6.idx.i
302   %a6.idx.j = mul i64 %a6.deps, %indvar.j
303   %a6.tmp6 = add i64 %a6.tmp5, %a6.idx.j
304   %a6.idx.k = add i64 %a6.tmp6, %indvar.k
305   %a6.ptr = getelementptr float, ptr %a6.data, i64 %a6.idx.k
306   %a6.val = load float, ptr %a6.ptr, align 4
307   %sum.a6 = fadd float %sum.a5, %a6.val
309   %a7.tmp1 = add i64 %a7.cols, 1
310   %a7.tmp2 = mul i64 %a7.deps, %a7.tmp1
311   %a7.tmp3 = add i64 %a7.tmp2, 1
312   %a7.tmp4 = mul i64 %a7.cols, %a7.deps
313   %a7.idx.i = mul i64 %a7.tmp4, %indvar.i
314   %a7.tmp5 = add i64 %a7.tmp3, %a7.idx.i
315   %a7.idx.j = mul i64 %a7.deps, %indvar.j
316   %a7.tmp6 = add i64 %a7.tmp5, %a7.idx.j
317   %a7.idx.k = add i64 %a7.tmp6, %indvar.k
318   %a7.ptr = getelementptr float, ptr %a7.data, i64 %a7.idx.k
319   %a7.val = load float, ptr %a7.ptr, align 4
320   %sum.a7 = fadd float %sum.a6, %a7.val
322   %a8.tmp1 = add i64 %a8.cols, 1
323   %a8.tmp2 = mul i64 %a8.deps, %a8.tmp1
324   %a8.tmp3 = add i64 %a8.tmp2, 1
325   %a8.tmp4 = mul i64 %a8.cols, %a8.deps
326   %a8.idx.i = mul i64 %a8.tmp4, %indvar.i
327   %a8.tmp5 = add i64 %a8.tmp3, %a8.idx.i
328   %a8.idx.j = mul i64 %a8.deps, %indvar.j
329   %a8.tmp6 = add i64 %a8.tmp5, %a8.idx.j
330   %a8.idx.k = add i64 %a8.tmp6, %indvar.k
331   %a8.ptr = getelementptr float, ptr %a8.data, i64 %a8.idx.k
332   %a8.val = load float, ptr %a8.ptr, align 4
333   %sum.a8 = fadd float %sum.a7, %a8.val
335   %a9.tmp1 = add i64 %a9.cols, 1
336   %a9.tmp2 = mul i64 %a9.deps, %a9.tmp1
337   %a9.tmp3 = add i64 %a9.tmp2, 1
338   %a9.tmp4 = mul i64 %a9.cols, %a9.deps
339   %a9.idx.i = mul i64 %a9.tmp4, %indvar.i
340   %a9.tmp5 = add i64 %a9.tmp3, %a9.idx.i
341   %a9.idx.j = mul i64 %a9.deps, %indvar.j
342   %a9.tmp6  = add i64 %a9.tmp5, %a9.idx.j
343   %a9.idx.k = add i64 %a9.tmp6, %indvar.k
344   %a9.ptr = getelementptr float, ptr %a9.data, i64 %a9.idx.k
345   %a9.val = load float, ptr %a9.ptr, align 4
346   %sum.a9 = fadd float %sum.a8, %a9.val
348   %a10.tmp1 = add i64 %a10.cols, 1
349   %a10.tmp2 = mul i64 %a10.deps, %a10.tmp1
350   %a10.tmp3 = add i64 %a10.tmp2, 1
351   %a10.tmp4 = mul i64 %a10.cols, %a10.deps
352   %a10.idx.i = mul i64 %a10.tmp4, %indvar.i
353   %a10.tmp5 = add i64 %a10.tmp3, %a10.idx.i
354   %a10.idx.j = mul i64 %a10.deps, %indvar.j
355   %a10.tmp6 = add i64 %a10.tmp5, %a10.idx.j
356   %a10.idx.k = add i64 %a10.tmp6, %indvar.k
357   %a10.ptr = getelementptr float, ptr %a10.data, i64 %a10.idx.k
358   %a10.val = load float, ptr %a10.ptr, align 4
359   %sum.a10 = fadd float %sum.a9, %a10.val
361   %a11.tmp1 = add i64 %a11.cols, 1
362   %a11.tmp2 = mul i64 %a11.deps, %a11.tmp1
363   %a11.tmp3 = add i64 %a11.tmp2, 1
364   %a11.tmp4 = mul i64 %a11.cols, %a11.deps
365   %a11.idx.i = mul i64 %a11.tmp4, %indvar.i
366   %a11.tmp5 = add i64 %a11.tmp3, %a11.idx.i
367   %a11.idx.j = mul i64 %a11.deps, %indvar.j
368   %a11.tmp6 = add i64 %a11.tmp5, %a11.idx.j
369   %a11.idx.k = add i64 %a11.tmp6, %indvar.k
370   %a11.ptr = getelementptr float, ptr %a11.data, i64 %a11.idx.k
371   %a11.val = load float, ptr %a11.ptr, align 4
372   %sum.a11 = fadd float %sum.a10, %a11.val
374   %a12.tmp1 = add i64 %a12.cols, 1
375   %a12.tmp2 = mul i64 %a12.deps, %a12.tmp1
376   %a12.tmp3 = add i64 %a12.tmp2, 1
377   %a12.tmp4 = mul i64 %a12.cols, %a12.deps
378   %a12.idx.i = mul i64 %a12.tmp4, %indvar.i
379   %a12.tmp5 = add i64 %a12.tmp3, %a12.idx.i
380   %a12.idx.j = mul i64 %a12.deps, %indvar.j
381   %a12.tmp6 = add i64 %a12.tmp5, %a12.idx.j
382   %a12.idx.k = add i64 %a12.tmp6, %indvar.k
383   %a12.ptr = getelementptr float, ptr %a12.data, i64 %a12.idx.k
384   %a12.val = load float, ptr %a12.ptr, align 4
385   %sum.a12 = fadd float %sum.a11, %a12.val
387   %a13.tmp1 = add i64 %a13.cols, 1
388   %a13.tmp2 = mul i64 %a13.deps, %a13.tmp1
389   %a13.tmp3 = add i64 %a13.tmp2, 1
390   %a13.tmp4 = mul i64 %a13.cols, %a13.deps
391   %a13.idx.i = mul i64 %a13.tmp4, %indvar.i
392   %a13.tmp5 = add i64 %a13.tmp3, %a13.idx.i
393   %a13.idx.j = mul i64 %a13.deps, %indvar.j
394   %a13.tmp6 = add i64 %a13.tmp5, %a13.idx.j
395   %a13.idx.k = add i64 %a13.tmp6, %indvar.k
396   %a13.ptr = getelementptr float, ptr %a13.data, i64 %a13.idx.k
397   %a13.val = load float, ptr %a13.ptr, align 4
398   %sum.a13 = fadd float %sum.a12, %a13.val
400   %a14.tmp1 = add i64 %a14.cols, 1
401   %a14.tmp2 = mul i64 %a14.deps, %a14.tmp1
402   %a14.tmp3 = add i64 %a14.tmp2, 1
403   %a14.tmp4 = mul i64 %a14.cols, %a14.deps
404   %a14.idx.i = mul i64 %a14.tmp4, %indvar.i
405   %a14.tmp5 = add i64 %a14.tmp3, %a14.idx.i
406   %a14.idx.j = mul i64 %a14.deps, %indvar.j
407   %a14.tmp6 = add i64 %a14.tmp5, %a14.idx.j
408   %a14.idx.k = add i64 %a14.tmp6, %indvar.k
409   %a14.ptr = getelementptr float, ptr %a14.data, i64 %a14.idx.k
410   %a14.val = load float, ptr %a14.ptr, align 4
411   %sum.a14 = fadd float %sum.a13, %a14.val
413   %a15.tmp1 = add i64 %a15.cols, 1
414   %a15.tmp2 = mul i64 %a15.deps, %a15.tmp1
415   %a15.tmp3 = add i64 %a15.tmp2, 1
416   %a15.tmp4 = mul i64 %a15.cols, %a15.deps
417   %a15.idx.i = mul i64 %a15.tmp4, %indvar.i
418   %a15.tmp5 = add i64 %a15.tmp3, %a15.idx.i
419   %a15.idx.j = mul i64 %a15.deps, %indvar.j
420   %a15.tmp6 = add i64 %a15.tmp5, %a15.idx.j
421   %a15.idx.k = add i64 %a15.tmp6, %indvar.k
422   %a15.ptr = getelementptr float, ptr %a15.data, i64 %a15.idx.k
423   %a15.val = load float, ptr %a15.ptr, align 4
424   %sum.a15 = fadd float %sum.a14, %a15.val
426   %a16.tmp1 = add i64 %a16.cols, 1
427   %a16.tmp2 = mul i64 %a16.deps, %a16.tmp1
428   %a16.tmp3 = add i64 %a16.tmp2, 1
429   %a16.tmp4 = mul i64 %a16.cols, %a16.deps
430   %a16.idx.i = mul i64 %a16.tmp4, %indvar.i
431   %a16.tmp5 = add i64 %a16.tmp3, %a16.idx.i
432   %a16.idx.j = mul i64 %a16.deps, %indvar.j
433   %a16.tmp6 = add i64 %a16.tmp5, %a16.idx.j
434   %a16.idx.k = add i64 %a16.tmp6, %indvar.k
435   %a16.ptr = getelementptr float, ptr %a16.data, i64 %a16.idx.k
436   %a16.val = load float, ptr %a16.ptr, align 4
437   %sum.a16 = fadd float %sum.a15, %a16.val
439   %a17.tmp1 = add i64 %a17.cols, 1
440   %a17.tmp2 = mul i64 %a17.deps, %a17.tmp1
441   %a17.tmp3 = add i64 %a17.tmp2, 1
442   %a17.tmp4 = mul i64 %a17.cols, %a17.deps
443   %a17.idx.i = mul i64 %a17.tmp4, %indvar.i
444   %a17.tmp5 = add i64 %a17.tmp3, %a17.idx.i
445   %a17.idx.j = mul i64 %a17.deps, %indvar.j
446   %a17.tmp6 = add i64 %a17.tmp5, %a17.idx.j
447   %a17.idx.k = add i64 %a17.tmp6, %indvar.k
448   %a17.ptr = getelementptr float, ptr %a17.data, i64 %a17.idx.k
449   %a17.val = load float, ptr %a17.ptr, align 4
450   %sum.a17 = fadd float %sum.a16, %a17.val
452   %a18.tmp1 = add i64 %a18.cols, 1
453   %a18.tmp2 = mul i64 %a18.deps, %a18.tmp1
454   %a18.tmp3 = add i64 %a18.tmp2, 1
455   %a18.tmp4 = mul i64 %a18.cols, %a18.deps
456   %a18.idx.i = mul i64 %a18.tmp4, %indvar.i
457   %a18.tmp5 = add i64 %a18.tmp3, %a18.idx.i
458   %a18.idx.j = mul i64 %a18.deps, %indvar.j
459   %a18.tmp6 = add i64 %a18.tmp5, %a18.idx.j
460   %a18.idx.k = add i64 %a18.tmp6, %indvar.k
461   %a18.ptr = getelementptr float, ptr %a18.data, i64 %a18.idx.k
462   %a18.val = load float, ptr %a18.ptr, align 4
463   %sum.a18 = fadd float %sum.a17, %a18.val
465   %a19.tmp1 = add i64 %a19.cols, 1
466   %a19.tmp2 = mul i64 %a19.deps, %a19.tmp1
467   %a19.tmp3 = add i64 %a19.tmp2, 1
468   %a19.tmp4 = mul i64 %a19.cols, %a19.deps
469   %a19.idx.i = mul i64 %a19.tmp4, %indvar.i
470   %a19.tmp5 = add i64 %a19.tmp3, %a19.idx.i
471   %a19.idx.j = mul i64 %a19.deps, %indvar.j
472   %a19.tmp6  = add i64 %a19.tmp5, %a19.idx.j
473   %a19.idx.k = add i64 %a19.tmp6, %indvar.k
474   %a19.ptr = getelementptr float, ptr %a19.data, i64 %a19.idx.k
475   store float %sum.a18, ptr %a19.ptr, align 4
477   %indvar.k.next = add i64 %indvar.k, 1
478   %a1.deps.sub = add i64 %a1.deps, -2
479   %exitcond = icmp ne i64 %indvar.k.next, %a1.deps.sub
480   br i1 %exitcond, label %for.body.k, label %for.inc.j
482 for.inc.j:
483   %indvar.j.next = add i64 %indvar.j, 1
484   %a1.cols.sub = add i64 %a1.cols, -2
485   %exitcond.j = icmp ne i64 %indvar.j.next, %a1.cols.sub
486   br i1 %exitcond.j, label %for.j, label %for.inc.i
488 for.inc.i:
489   %indvar.i.next = add i64 %indvar.i, 1
490   %a1.rows.sub = add i64 %a1.rows, -2
491   %exitcond.i = icmp ne i64 %indvar.i.next, %a1.rows.sub
492   br i1 %exitcond.i, label %for.i, label %for.inc.n
494 for.inc.n:
495   %indvar.n.next = add nsw i64 %indvar.n, 1
496   %exitcond.n = icmp ne i64 %indvar.n.next, %nn
497   br i1 %exitcond.n, label %for.n, label %exit
499 exit:
500   ret void