source: CLRX/CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase3.cpp @ 3922

Last change on this file since 3922 was 3922, checked in by matszpk, 13 months ago

CLRadeonExtender: AsmRegAlloc?: Add new testcase.

File size: 32.1 KB
Line 
1/*
2 *  CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3 *  Copyright (C) 2014-2018 Mateusz Szpakowski
4 *
5 *  This library is free software; you can redistribute it and/or
6 *  modify it under the terms of the GNU Lesser General Public
7 *  License as published by the Free Software Foundation; either
8 *  version 2.1 of the License, or (at your option) any later version.
9 *
10 *  This library is distributed in the hope that it will be useful,
11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 *  Lesser General Public License for more details.
14 *
15 *  You should have received a copy of the GNU Lesser General Public
16 *  License along with this library; if not, write to the Free Software
17 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18 */
19
20#include <CLRX/Config.h>
21#include <CLRX/utils/Utilities.h>
22#include <CLRX/amdasm/Assembler.h>
23#include <CLRX/utils/Containers.h>
24#include "../TestUtils.h"
25#include "AsmRegAlloc.h"
26
27const AsmSSADataCase ssaDataTestCases3Tbl[] =
28{
29    {   // 0 - routine calls inside routine
30        R"ffDXD(.regvar sa:s:10, va:v:8
31        s_mov_b32 sa[2], s4
32        s_mov_b32 sa[3], s5
33        s_mov_b32 sa[4], s6
34        s_mov_b32 sa[5], s7
35        s_mov_b32 sa[6], s8
36        .cf_call routine
37        s_swappc_b64 s[0:1], s[2:3]
38       
39        s_add_u32 sa[2], sa[2], sa[0]
40        s_add_u32 sa[3], sa[3], sa[0]
41        s_add_u32 sa[4], sa[4], sa[0]
42        s_add_u32 sa[5], sa[5], sa[0]
43        s_add_u32 sa[6], sa[6], sa[0]
44        s_endpgm
45       
46routine:
47        s_add_u32 sa[6], sa[6], sa[0]
48        .cf_call routine1,routine2
49        s_swappc_b64 s[0:1], s[2:3]
50       
51        .cf_jump a1, a2, a3
52        s_setpc_b64 s[0:1]
53       
54a1:     s_add_u32 sa[4], sa[4], sa[0]
55        .cf_call routine1,routine3
56        s_swappc_b64 s[0:1], s[2:3]
57        .cf_ret
58        s_setpc_b64 s[0:1]
59       
60a2:     s_add_u32 sa[4], sa[4], sa[0]
61        .cf_call routine2,routine3
62        s_swappc_b64 s[0:1], s[2:3]
63       
64e0:     s_add_u32 sa[7], sa[4], sa[0]
65        s_add_u32 sa[7], sa[4], sa[0]
66       
67        .cf_call routine5
68        s_swappc_b64 s[0:1], s[2:3]
69        .cf_ret
70        s_setpc_b64 s[0:1]
71       
72a3:     s_add_u32 sa[5], sa[5], sa[0]
73        .cf_call routine3, routine4
74        s_swappc_b64 s[0:1], s[2:3]
75        s_branch e0
76
77        # subroutines
78routine1:
79        s_add_u32 sa[2], sa[2], sa[0]
80        s_cbranch_vccz r1a1
81       
82        s_add_u32 sa[2], sa[2], sa[0]
83        .cf_ret
84        s_setpc_b64 s[0:1]
85r1a1:
86        s_add_u32 sa[4], sa[2], sa[0]
87        .cf_ret
88        s_setpc_b64 s[0:1]
89
90routine2:
91        s_add_u32 sa[2], sa[2], sa[0]
92        s_cbranch_vccz r2a1
93       
94        s_add_u32 sa[2], sa[2], sa[0]
95        .cf_ret
96        s_setpc_b64 s[0:1]
97r2a1:
98        s_add_u32 sa[3], sa[3], sa[0]
99        .cf_ret
100        s_setpc_b64 s[0:1]
101
102routine3:
103        s_add_u32 sa[3], sa[3], sa[0]
104        s_cbranch_vccz r3a1
105       
106        s_add_u32 sa[3], sa[3], sa[0]
107        s_add_u32 sa[4], sa[3], sa[0]
108        .cf_ret
109        s_setpc_b64 s[0:1]
110r3a1:
111        s_add_u32 sa[3], sa[5], sa[0]
112        .cf_ret
113        s_setpc_b64 s[0:1]
114       
115routine4:
116        s_add_u32 sa[4], sa[4], sa[0]
117        s_cbranch_vccz r4a1
118       
119        s_add_u32 sa[4], sa[4], sa[0]
120        s_add_u32 sa[5], sa[5], sa[0]
121        .cf_ret
122        s_setpc_b64 s[0:1]
123r4a1:
124        s_add_u32 sa[5], sa[5], sa[0]
125        .cf_ret
126        s_setpc_b64 s[0:1]
127       
128routine5:
129        s_add_u32 sa[4], sa[4], sa[0]
130        s_cbranch_vccz r5a1
131       
132        s_add_u32 sa[3], sa[3], sa[0]
133        .cf_ret
134        s_setpc_b64 s[0:1]
135r5a1:
136        s_add_u32 sa[5], sa[5], sa[0]
137        .cf_ret
138        s_setpc_b64 s[0:1]
139)ffDXD",
140        {
141            {   // block 0 - start
142                0, 24,
143                { { 2, true } },
144                {
145                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
146                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
147                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
148                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
149                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
150                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
151                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
152                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
153                    { { "", 8 }, SSAInfo(0, 0, 0, 0, 0, true) },
154                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
155                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
156                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
157                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
158                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) }
159                }, true, false, false },
160            {   // block 1 - end
161                24, 48,
162                { },
163                {
164                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
165                    { { "sa", 2 }, SSAInfo(1, 6, 6, 6, 1, true) },
166                    { { "sa", 3 }, SSAInfo(1, 7, 7, 7, 1, true) },
167                    { { "sa", 4 }, SSAInfo(1, 9, 9, 9, 1, true) },
168                    { { "sa", 5 }, SSAInfo(1, 6, 6, 6, 1, true) },
169                    { { "sa", 6 }, SSAInfo(2, 3, 3, 3, 1, true) }
170                }, false, false, true },
171            {   // block 2 - routine
172                48, 56,
173                { { 11, true }, { 14, true } },
174                {
175                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
176                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
177                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
178                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
179                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
180                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) }
181                }, true, false, false },
182            {   // block 3 - jump a1,a2,a3
183                56, 60,
184                { { 4, false }, { 6, false }, { 9, false } },
185                {
186                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
187                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) }
188                }, false, false, true },
189            {   // block 4 - a1
190                60, 68,
191                { { 11, true }, { 17, true } },
192                {
193                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
194                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
195                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
196                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
197                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
198                    { { "sa", 4 }, SSAInfo(1, 3, 3, 3, 1, true) }
199                }, true, false, false },
200            {   // block 5 - a1 end
201                68, 72,
202                { },
203                {
204                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
205                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) }
206                }, false, true, true },
207            {   // block 6 - a2
208                72, 80,
209                { { 14, true }, { 17, true } },
210                {
211                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
212                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
213                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
214                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
215                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
216                    { { "sa", 4 }, SSAInfo(1, 5, 5, 5, 1, true) }
217                }, true, false, false },
218            {   // block 7 - e0
219                80, 92,
220                { { 23, true } },
221                {
222                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
223                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
224                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
225                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
226                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
227                    { { "sa", 4 }, SSAInfo(3, SIZE_MAX, 6, SIZE_MAX, 0, true) },
228                    { { "sa", 7 }, SSAInfo(0, 1, 1, 2, 2, false) }
229                }, true, false, false },
230            {   // block 8 - a2 end
231                92, 96,
232                { },
233                {
234                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
235                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) }
236                }, false, true, true },
237            {   // block 9 - a3
238                96, 104,
239                { { 17, true }, { 20, true } },
240                {
241                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
242                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
243                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
244                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
245                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
246                    { { "sa", 5 }, SSAInfo(1, 3, 3, 3, 1, true) }
247                }, true, false, false },
248            {   // block 10 - a3 end
249                104, 108,
250                { { 7, false } },
251                { },
252                false, false, true },
253            {   // block 11 - routine1
254                108, 116,
255                { { 12, false }, { 13, false } },
256                {
257                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
258                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) }
259                }, false, false, false },
260            {   // block 12 - ret1
261                116, 124,
262                { },
263                {
264                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
265                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
266                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
267                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
268                }, false, true, true },
269            {   // block 13 - ret2
270                124, 132,
271                { },
272                {
273                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
274                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
275                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
276                    { { "sa", 2 }, SSAInfo(2, SIZE_MAX, 4, SIZE_MAX, 0, true) },
277                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, false) }
278                }, false, true, true },
279            {   // block 14 - routine2
280                132, 140,
281                { { 15, false }, { 16, false } },
282                {
283                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
284                    { { "sa", 2 }, SSAInfo(1, 4, 4, 4, 1, true) }
285                }, false, false, false },
286            {   // block 15 - ret1
287                140, 148,
288                { },
289                {
290                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
291                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
292                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
293                    { { "sa", 2 }, SSAInfo(4, 5, 5, 5, 1, true) }
294                }, false, true, true },
295            {   // block 16 - ret2
296                148, 156,
297                { },
298                {
299                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
300                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
301                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
302                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
303                }, false, true, true },
304            {   // block 17 - routine3
305                156, 164,
306                { { 18, false }, { 19, false } },
307                {
308                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
309                    { { "sa", 3 }, SSAInfo(1, 3, 3, 3, 1, true) }
310                }, false, false, false },
311            {   // block 18 - ret1
312                164, 176,
313                { },
314                {
315                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
316                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
317                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
318                    { { "sa", 3 }, SSAInfo(3, 4, 4, 4, 1, true) },
319                    { { "sa", 4 }, SSAInfo(3, 4, 4, 4, 1, false) }
320                }, false, true, true },
321            {   // block 19 - ret2
322                176, 184,
323                { },
324                {
325                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
326                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
327                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
328                    { { "sa", 3 }, SSAInfo(3, 5, 5, 5, 1, false) },
329                    { { "sa", 5 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) }
330                }, false, true, true },
331            {   // block 20 - routine4
332                184, 192,
333                { { 21, false }, { 22, false } },
334                {
335                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
336                    { { "sa", 4 }, SSAInfo(1, 7, 7, 7, 1, true) }
337                }, false, false, false },
338            {   // block 21 - ret1
339                192, 204,
340                { },
341                {
342                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
343                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
344                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
345                    { { "sa", 4 }, SSAInfo(7, 8, 8, 8, 1, true) },
346                    { { "sa", 5 }, SSAInfo(3, 4, 4, 4, 1, true) }
347                }, false, true, true },
348            {   // block 22 - ret2
349                204, 212,
350                { },
351                {
352                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
353                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
354                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
355                    { { "sa", 5 }, SSAInfo(3, 5, 5, 5, 1, true) }
356                }, false, true, true },
357            {   // block 23 - routine5
358                212, 220,
359                { { 24, false }, { 25, false } },
360                {
361                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
362                    { { "sa", 4 }, SSAInfo(3, 6, 6, 6, 1, true) }
363                }, false, false, false },
364            {   // block 24 - ret1
365                220, 228,
366                { },
367                {
368                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
369                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
370                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
371                    { { "sa", 3 }, SSAInfo(1, 6, 6, 6, 1, true) }
372                }, false, true, true },
373            {   // block 25 - ret2
374                228, 236,
375                { },
376                {
377                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
378                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
379                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
380                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
381                }, false, true, true }
382        },
383        {   // SSA replaces
384            { { "sa", 2 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 } } },
385            { { "sa", 3 }, { { 2, 1 }, { 4, 1 }, { 5, 1 }, { 6, 1 } } },
386            { { "sa", 4 }, { { 2, 1 }, { 4, 3 }, { 3, 1 }, { 4, 1 },
387                        { 5, 1 }, { 6, 1 }, { 8, 3 }, { 7, 3 } } },
388            { { "sa", 5 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 } } }
389        },
390        true, ""
391    },
392    {   // 1 - retssa tests 2
393        R"ffDXD(.regvar sa:s:8, va:v:8
394        s_mov_b32 sa[2], s4
395        s_mov_b32 sa[3], s5
396        s_mov_b32 sa[4], s6
397        s_mov_b32 sa[6], s7
398        s_mov_b32 sa[7], s7
399       
400        .cf_call routine
401        s_swappc_b64 s[0:1], s[2:3]
402       
403        s_lshl_b32 sa[6], sa[3], 4
404        s_lshl_b32 sa[6], sa[4], 4
405        s_cbranch_execz aa3
406       
407aa2:    s_lshr_b32 sa[7], sa[1], 4
408        s_endpgm
409       
410aa3:    s_ashr_i32 sa[7], sa[7], 4
411        s_endpgm
412       
413routine:
414        s_xor_b32 sa[2], sa[2], sa[0]
415        s_xor_b32 sa[3], sa[3], sa[0]
416        .cf_cjump bb1, bb2
417        s_setpc_b64 s[0:1]
418       
419bb0:    s_min_u32 sa[3], sa[3], sa[0]
420        s_max_u32 sa[4], sa[4], sa[0]
421        s_xor_b32 sa[6], sa[6], sa[0]
422        s_xor_b32 sa[7], sa[7], sa[0]
423        .cf_ret
424        s_setpc_b64 s[0:1]
425       
426bb1:    s_and_b32 sa[3], sa[3], sa[0]
427        s_max_u32 sa[4], sa[4], sa[0]
428        s_xor_b32 sa[6], sa[6], sa[0]
429        s_xor_b32 sa[7], sa[7], sa[0]
430        .cf_ret
431        s_setpc_b64 s[0:1]
432
433bb2:    s_and_b32 sa[3], sa[3], sa[0]
434        s_max_u32 sa[4], sa[4], sa[0]
435        s_xor_b32 sa[6], sa[6], sa[0]
436        s_xor_b32 sa[7], sa[7], sa[0]
437        .cf_ret
438        s_setpc_b64 s[0:1]
439)ffDXD",
440        {
441            {   // block 0 - start
442                0, 24,
443                { { 4, true } },
444                {
445                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
446                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
447                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
448                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
449                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
450                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
451                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
452                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
453                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
454                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
455                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
456                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) },
457                    { { "sa", 7 }, SSAInfo(0, 1, 1, 1, 1, false) }
458                }, true, false, false },
459            {   // block 1 - after call
460                24, 36,
461                { { 2, false }, { 3, false } },
462                {
463                    { { "sa", 3 }, SSAInfo(3, SIZE_MAX, 6, SIZE_MAX, 0, true) },
464                    { { "sa", 4 }, SSAInfo(2, SIZE_MAX, 5, SIZE_MAX, 0, true) },
465                    { { "sa", 6 }, SSAInfo(1, 5, 5, 6, 2, false) }
466                }, false, false, false },
467            {   // block 2 - aa2
468                36, 44,
469                { },
470                {
471                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
472                    { { "sa", 7 }, SSAInfo(1, 5, 5, 5, 1, false) }
473                }, false, false, true },
474            {   // block 3 - aa3
475                44, 52,
476                { },
477                {
478                    { { "sa", 7 }, SSAInfo(2, 6, 6, 6, 1, true) }
479                }, false, false, true
480            },
481            {   // block 4 - routine
482                52, 64,
483                { { 5, false }, { 6, false }, { 7, false } },
484                {
485                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
486                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
487                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
488                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
489                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
490                }, false, false, false },
491            {   // block 5 - bb0
492                64, 84,
493                { },
494                {
495                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
496                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
497                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
498                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) },
499                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) },
500                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) },
501                    { { "sa", 7 }, SSAInfo(1, 2, 2, 2, 1, true) }
502                }, false, true, true },
503            {   // block 6 - bb1
504                84, 104,
505                { },
506                {
507                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
508                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
509                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
510                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) },
511                    { { "sa", 4 }, SSAInfo(1, 3, 3, 3, 1, true) },
512                    { { "sa", 6 }, SSAInfo(1, 3, 3, 3, 1, true) },
513                    { { "sa", 7 }, SSAInfo(1, 3, 3, 3, 1, true) }
514                }, false, true, true },
515            {   // block 7 - bb2
516                104, 124,
517                { },
518                {
519                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
520                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
521                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
522                    { { "sa", 3 }, SSAInfo(2, 5, 5, 5, 1, true) },
523                    { { "sa", 4 }, SSAInfo(1, 4, 4, 4, 1, true) },
524                    { { "sa", 6 }, SSAInfo(1, 4, 4, 4, 1, true) },
525                    { { "sa", 7 }, SSAInfo(1, 4, 4, 4, 1, true) }
526                }, false, true, true }
527        },
528        {   // SSA replaces
529            { { "sa", 3 }, { { 4, 3 }, { 5, 3 } } },
530            { { "sa", 4 }, { { 3, 2 }, { 4, 2 } } },
531            { { "sa", 7 }, { { 3, 2 }, { 4, 2 } } }
532        },
533        true, ""
534    },
535    {   // 2 - routine with loop and jumps to mid in loop
536        R"ffDXD(.regvar sa:s:8, va:v:8
537        s_mov_b32 sa[2], s4
538        s_mov_b32 sa[3], s5
539        s_mov_b32 sa[4], s6
540        s_mov_b32 sa[5], s6
541        s_mov_b32 sa[6], s7
542       
543        .cf_call routine
544        s_swappc_b64 s[0:1], s[2:3]
545       
546        s_add_u32 sa[2], sa[2], sa[0]
547        s_add_u32 sa[3], sa[3], sa[0]
548        s_add_u32 sa[4], sa[4], sa[0]
549        s_add_u32 sa[5], sa[5], sa[0]
550        s_add_u32 sa[6], sa[6], sa[0]
551        s_endpgm
552       
553routine:
554        s_xor_b32 sa[2], sa[2], sa[0]
555        s_xor_b32 sa[3], sa[3], sa[1]
556        s_cbranch_execnz b0
557       
558loop:   s_xor_b32 sa[3], sa[3], sa[1]
559l0:     s_xor_b32 sa[4], sa[4], sa[0]
560l1:     s_xor_b32 sa[2], sa[2], sa[0]
561        s_cbranch_vccz loop
562       
563        .cf_ret
564        s_setpc_b64 s[0:1]
565
566b0:     s_xor_b32 sa[5], sa[5], sa[0]
567        s_cbranch_vccz l0
568        s_xor_b32 sa[6], sa[6], sa[1]
569        s_branch l1
570)ffDXD",
571        {
572            {   // block 0 - start
573                0, 24,
574                { { 2, true } },
575                {
576                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
577                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
578                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
579                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
580                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
581                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
582                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
583                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
584                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
585                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
586                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
587                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
588                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) }
589                }, true, false, false },
590            {   // block 1 - end
591                24, 48,
592                { },
593                {
594                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
595                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
596                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) },
597                    { { "sa", 4 }, SSAInfo(1, 3, 3, 3, 1, true) },
598                    { { "sa", 5 }, SSAInfo(1, 3, 3, 3, 1, true) },
599                    { { "sa", 6 }, SSAInfo(1, 3, 3, 3, 1, true) }
600                }, false, false, true },
601            {   // block 2 - routine
602                48, 60,
603                { { 3, false }, { 7, false } },
604                {
605                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
606                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
607                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
608                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
609                }, false, false, false },
610            {   // block 3 - loop
611                60, 64,
612                { },
613                {
614                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
615                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
616                }, false, false, false },
617            {   // block 4 - l0
618                64, 68,
619                { },
620                {
621                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
622                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
623                }, false, false, false },
624            {   // block 5 - l1
625                68, 76,
626                { { 3, false }, { 6, false } },
627                {
628                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
629                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
630                }, false, false, false },
631            {   // block 6 - ret
632                76, 80,
633                { },
634                {
635                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
636                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) }
637                },
638                false, true, true },
639            {   // block 7 - b0, to l0
640                80, 88,
641                { { 4, false }, { 8, false } },
642                {
643                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
644                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
645                }, false, false, false },
646            {   // block 8 - jump to l1
647                88, 96,
648                { { 5, false } },
649                {
650                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
651                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) }
652                }, false, false, true }
653        },
654        {   // SSA replaces
655            { { "sa", 2 }, { { 3, 2 } } },
656            { { "sa", 3 }, { { 3, 2 } } },
657            { { "sa", 4 }, { { 2, 1 } } },
658            { { "sa", 5 }, { { 2, 1 } } },
659            { { "sa", 6 }, { { 2, 1 } } }
660        },
661        true, ""
662    },
663    // TODO: incorrect retSSA ids for sa[6]
664    {   // 3 - routine with loop and jumps to mid in loop
665        R"ffDXD(.regvar sa:s:8, va:v:8
666        s_mov_b32 sa[2], s4
667        s_mov_b32 sa[3], s5
668        s_mov_b32 sa[4], s6
669        s_mov_b32 sa[5], s6
670        s_mov_b32 sa[6], s7
671       
672        .cf_call routine
673        s_swappc_b64 s[0:1], s[2:3]
674       
675        s_add_u32 sa[2], sa[2], sa[0]
676        s_add_u32 sa[3], sa[3], sa[0]
677        s_add_u32 sa[4], sa[4], sa[0]
678        s_add_u32 sa[5], sa[5], sa[0]
679        s_add_u32 sa[6], sa[6], sa[0]
680        s_endpgm
681       
682routine:
683        s_xor_b32 sa[2], sa[2], sa[0]
684        s_xor_b32 sa[3], sa[3], sa[1]
685        s_cbranch_execnz b0
686       
687loop:   s_xor_b32 sa[3], sa[3], sa[1]
688       
689l0:     s_xor_b32 sa[4], sa[4], sa[0]
690        s_cbranch_scc0 end1
691       
692l1:     s_xor_b32 sa[2], sa[2], sa[0]
693        s_cbranch_scc0 end2
694       
695        s_branch loop
696       
697end1:   s_xor_b32 sa[5], sa[5], sa[1]
698        .cf_ret
699        s_setpc_b64 s[0:1]
700       
701end2:   s_xor_b32 sa[6], sa[6], sa[1]
702        .cf_ret
703        s_setpc_b64 s[0:1]
704
705b0:     s_xor_b32 sa[5], sa[5], sa[0]
706        s_cbranch_vccz l0
707        s_xor_b32 sa[6], sa[6], sa[1]
708        s_branch l1
709)ffDXD",
710        {
711            {   // block 0 - start
712                0, 24,
713                { { 2, true } },
714                {
715                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
716                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
717                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
718                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
719                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
720                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
721                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
722                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
723                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
724                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
725                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
726                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
727                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) }
728                }, true, false, false },
729            {   // block 1 - end
730                24, 48,
731                { },
732                {
733                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
734                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
735                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) },
736                    { { "sa", 4 }, SSAInfo(1, 3, 3, 3, 1, true) },
737                    { { "sa", 5 }, SSAInfo(1, 4, 4, 4, 1, true) },
738                    { { "sa", 6 }, SSAInfo(1, 4, 4, 4, 1, true) }
739                }, false, false, true },
740            {   // block 2 - routine
741                48, 60,
742                { { 3, false }, { 9, false } },
743                {
744                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
745                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
746                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
747                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
748                }, false, false, false },
749            {   // block 3 - loop
750                60, 64,
751                { },
752                {
753                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
754                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
755                }, false, false, false },
756            {   // block 4 - l0
757                64, 72,
758                { { 5, false }, { 7, false } },
759                {
760                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
761                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
762                }, false, false, false },
763            {   // block 5 - l1
764                72, 80,
765                { { 6, false }, { 8, false } },
766                {
767                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
768                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
769                }, false, false, false },
770            {   // block 6 - loop end
771                80, 84,
772                { { 3, false } },
773                { },
774                false, false, true },
775            {   // block 7 - end1
776                84, 92,
777                { },
778                {
779                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
780                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
781                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
782                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
783                }, false, true, true },
784            {   // block 8 - end2
785                92, 100,
786                { },
787                {
788                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
789                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
790                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
791                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) }
792                }, false, true, true },
793            {   // block 9 - b0
794                100, 108,
795                { { 4, false }, { 10, false } },
796                {
797                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
798                    { { "sa", 5 }, SSAInfo(1, 3, 3, 3, 1, true) }
799                }, false, false, false },
800            {   // block 10 - to l1
801                108, 116,
802                { { 5, false } },
803                {
804                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
805                    { { "sa", 6 }, SSAInfo(1, 3, 3, 3, 1, true) }
806                }, false, false, true }
807        },
808        {   // SSA replaces
809            { { "sa", 2 }, { { 3, 2 } } },
810            { { "sa", 3 }, { { 3, 2 } } },
811            { { "sa", 4 }, { { 2, 1 } } },
812            { { "sa", 5 }, { { 2, 1 }, { 3, 1 } } },
813            { { "sa", 6 }, { { 2, 1 }, { 3, 1 } } }
814        },
815        true, ""
816    },
817    { nullptr }
818};
Note: See TracBrowser for help on using the repository browser.