• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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