pet 0.11.8
[pet.git] / tests / matmul.scop
blobf8ede8ff258bcf3e07bd0004012a399189fb7aeb
1 start: 95
2 end: 277
3 indent: "\t"
4 context: '[N, K, M] -> {  : 0 <= N <= 2147483647 and 0 <= K <= 2147483647 and -2147483648
5   <= M <= 2147483647 }'
6 schedule: '{ domain: "[N, K, M] -> { S_1[i] : 0 <= i < M; S_6[i, j] : 0 <= i < M and
7   0 <= j < N; S_4[i, j, k] : 0 <= i < M and 0 <= j < N and 0 <= k < K; S_9[]; S_0[];
8   S_10[]; S_2[i, j] : 0 <= i < M and 0 <= j < N; S_7[i] : 0 <= i < M; S_8[]; S_5[i,
9   j, k] : 0 <= i < M and 0 <= j < N and 0 <= k < K; S_3[i, j] : 0 <= i < M and 0 <=
10   j < N }", child: { sequence: [ { filter: "[M, N, K] -> { S_0[] }" }, { filter: "[M,
11   N, K] -> { S_4[i, j, k]; S_5[i, j, k]; S_2[i, j]; S_6[i, j]; S_3[i, j]; S_1[i];
12   S_7[i] }", child: { schedule: "[M, N, K] -> L_0[{ S_4[i, j, k] -> [(i)]; S_5[i,
13   j, k] -> [(i)]; S_2[i, j] -> [(i)]; S_6[i, j] -> [(i)]; S_3[i, j] -> [(i)]; S_1[i]
14   -> [(i)]; S_7[i] -> [(i)] }]", child: { sequence: [ { filter: "[M, N, K] -> { S_1[i]
15   }" }, { filter: "[M, N, K] -> { S_5[i, j, k]; S_4[i, j, k]; S_2[i, j]; S_6[i, j];
16   S_3[i, j] }", child: { schedule: "[M, N, K] -> L_1[{ S_5[i, j, k] -> [(j)]; S_4[i,
17   j, k] -> [(j)]; S_2[i, j] -> [(j)]; S_6[i, j] -> [(j)]; S_3[i, j] -> [(j)] }]",
18   child: { sequence: [ { filter: "[M, N, K] -> { S_2[i, j] }" }, { filter: "[M, N,
19   K] -> { S_3[i, j] }" }, { filter: "[M, N, K] -> { S_4[i, j, k]; S_5[i, j, k] }",
20   child: { schedule: "[M, N, K] -> L_2[{ S_4[i, j, k] -> [(k)]; S_5[i, j, k] -> [(k)]
21   }]", child: { sequence: [ { filter: "[M, N, K] -> { S_4[i, j, k] }" }, { filter:
22   "[M, N, K] -> { S_5[i, j, k] }" } ] } } }, { filter: "[M, N, K] -> { S_6[i, j] }"
23   } ] } } }, { filter: "[M, N, K] -> { S_7[i] }" } ] } } }, { filter: "[M, N, K] ->
24   { S_10[]; S_9[]; S_8[] }", child: { set: [ { filter: "{ S_8[] }" }, { filter: "{
25   S_9[] }" }, { filter: "{ S_10[] }" } ] } } ] } }'
26 arrays:
27 - context: '[K] -> {  : K >= 0 }'
28   extent: '[N, K, M] -> { A[i0, i1] : i0 >= 0 and 0 <= i1 < K }'
29   element_type: float
30   element_size: 4
31 - context: '[N] -> {  : N >= 0 }'
32   extent: '[N, K, M] -> { B[i0, i1] : i0 >= 0 and 0 <= i1 < N }'
33   element_type: float
34   element_size: 4
35 - context: '[N] -> {  : N >= 0 }'
36   extent: '[N, K, M] -> { C[i0, i1] : i0 >= 0 and 0 <= i1 < N }'
37   element_type: float
38   element_size: 4
39   live_out: 1
40 - context: '{  :  }'
41   extent: '[N, K, M] -> { i[] }'
42   element_type: int
43   element_size: 4
44 - context: '{  :  }'
45   extent: '[N, K, M] -> { j[] }'
46   element_type: int
47   element_size: 4
48 - context: '{  :  }'
49   extent: '[N, K, M] -> { k[] }'
50   element_type: int
51   element_size: 4
52 statements:
53 - line: 7
54   domain: '[N, K, M] -> { S_0[] }'
55   body:
56     type: expression
57     expr:
58       type: op
59       operation: =
60       arguments:
61       - type: access
62         index: '[N, K, M] -> { S_0[] -> i[] }'
63         reference: __pet_ref_0
64         read: 0
65         write: 1
66       - type: int
67         value: 0
68 - line: 8
69   domain: '[N, K, M] -> { S_1[i] : 0 <= i < M }'
70   body:
71     type: expression
72     expr:
73       type: op
74       operation: =
75       arguments:
76       - type: access
77         index: '[N, K, M] -> { S_1[i] -> j[] }'
78         reference: __pet_ref_1
79         read: 0
80         write: 1
81       - type: int
82         value: 0
83 - line: 9
84   domain: '[N, K, M] -> { S_2[i, j] : 0 <= i < M and 0 <= j < N }'
85   body:
86     type: expression
87     expr:
88       type: op
89       operation: =
90       arguments:
91       - type: access
92         index: '[N, K, M] -> { S_2[i, j] -> C[(i), (j)] }'
93         reference: __pet_ref_2
94         read: 0
95         write: 1
96       - type: int
97         value: 0
98 - line: 10
99   domain: '[N, K, M] -> { S_3[i, j] : 0 <= i < M and 0 <= j < N }'
100   body:
101     type: expression
102     expr:
103       type: op
104       operation: =
105       arguments:
106       - type: access
107         index: '[N, K, M] -> { S_3[i, j] -> k[] }'
108         reference: __pet_ref_3
109         read: 0
110         write: 1
111       - type: int
112         value: 0
113 - line: 11
114   domain: '[N, K, M] -> { S_4[i, j, k] : 0 <= i < M and 0 <= j < N and 0 <= k < K
115     }'
116   body:
117     type: expression
118     expr:
119       type: op
120       operation: +=
121       arguments:
122       - type: access
123         index: '[N, K, M] -> { S_4[i, j, k] -> C[(i), (j)] }'
124         reference: __pet_ref_4
125         read: 1
126         write: 1
127       - type: op
128         operation: '*'
129         arguments:
130         - type: access
131           index: '[N, K, M] -> { S_4[i, j, k] -> A[(i), (k)] }'
132           reference: __pet_ref_5
133           read: 1
134           write: 0
135         - type: access
136           index: '[N, K, M] -> { S_4[i, j, k] -> B[(k), (j)] }'
137           reference: __pet_ref_6
138           read: 1
139           write: 0
140 - line: 10
141   domain: '[N, K, M] -> { S_5[i, j, k] : 0 <= i < M and 0 <= j < N and 0 <= k < K
142     }'
143   body:
144     type: expression
145     expr:
146       type: op
147       operation: =
148       arguments:
149       - type: access
150         index: '[N, K, M] -> { S_5[i, j, k] -> k[] }'
151         reference: __pet_ref_7
152         read: 0
153         write: 1
154       - type: access
155         index: '[N, K, M] -> { S_5[i, j, k] -> [(1 + k)] }'
156         reference: __pet_ref_8
157         read: 1
158         write: 0
159 - line: 8
160   domain: '[N, K, M] -> { S_6[i, j] : 0 <= i < M and 0 <= j < N }'
161   body:
162     type: expression
163     expr:
164       type: op
165       operation: =
166       arguments:
167       - type: access
168         index: '[N, K, M] -> { S_6[i, j] -> j[] }'
169         reference: __pet_ref_9
170         read: 0
171         write: 1
172       - type: access
173         index: '[N, K, M] -> { S_6[i, j] -> [(1 + j)] }'
174         reference: __pet_ref_10
175         read: 1
176         write: 0
177 - line: 7
178   domain: '[N, K, M] -> { S_7[i] : 0 <= i < M }'
179   body:
180     type: expression
181     expr:
182       type: op
183       operation: =
184       arguments:
185       - type: access
186         index: '[N, K, M] -> { S_7[i] -> i[] }'
187         reference: __pet_ref_11
188         read: 0
189         write: 1
190       - type: access
191         index: '[N, K, M] -> { S_7[i] -> [(1 + i)] }'
192         reference: __pet_ref_12
193         read: 1
194         write: 0
195 - line: -1
196   domain: '[N, K, M] -> { S_8[] }'
197   body:
198     type: expression
199     expr:
200       type: op
201       operation: kill
202       arguments:
203       - type: access
204         killed: '[N, K, M] -> { S_8[] -> i[] }'
205         index: '[N, K, M] -> { S_8[] -> i[] }'
206         reference: __pet_ref_13
207         kill: 1
208 - line: -1
209   domain: '[N, K, M] -> { S_9[] }'
210   body:
211     type: expression
212     expr:
213       type: op
214       operation: kill
215       arguments:
216       - type: access
217         killed: '[N, K, M] -> { S_9[] -> j[] }'
218         index: '[N, K, M] -> { S_9[] -> j[] }'
219         reference: __pet_ref_14
220         kill: 1
221 - line: -1
222   domain: '[N, K, M] -> { S_10[] }'
223   body:
224     type: expression
225     expr:
226       type: op
227       operation: kill
228       arguments:
229       - type: access
230         killed: '[N, K, M] -> { S_10[] -> k[] }'
231         index: '[N, K, M] -> { S_10[] -> k[] }'
232         reference: __pet_ref_15
233         kill: 1