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

Last change on this file since 3916 was 3916, checked in by matszpk, 15 months ago

CLRadeonExtender: AsmRegAlloc?: Add new testsuite. Do not put already cached subroutine.

File size: 15.5 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(2, 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 }, { { 3, 2 }, { 4, 2 }, { 5, 2 }, { 5, 1 }, { 4, 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 } } },
388            { { "sa", 5 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 } } }*/
389        },
390        true, ""
391    },
392    { nullptr }
393};
Note: See TracBrowser for help on using the repository browser.