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