Changeset 3901 in CLRX


Ignore:
Timestamp:
Mar 15, 2018, 6:14:26 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: apply next pass of loop to lastSSAIdMap in main routine. Add new testcase.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.cpp

    r3899 r3901  
    14791479                        if (loopsit != loopSSAIdMap.end())
    14801480                        {
    1481                             std::cout << "   loopssaIdMap: " <<
     1481                            std::cout << "   loopssaId2Map: " <<
    14821482                                    entry.blockIndex << std::endl;
    14831483                            joinLastSSAIdMap(subrData.lastSSAIdMap,
    14841484                                    loopsit->second.ssaIdMap, subrData, true);
     1485                            std::cout << "   loopssaIdMap2End: " << std::endl;
    14851486                        }
    14861487                    }
     
    16241625                        joinLastSSAIdMap(subrData.lastSSAIdMap, loopsit->second.ssaIdMap,
    16251626                                         subrData, true);
     1627                        std::cout << "   loopssaIdMapEnd: " << std::endl;
     1628                        // for main routine now
     1629                        joinLastSSAIdMap(rdata.lastSSAIdMap, loopsit->second.ssaIdMap,
     1630                                        subrData, true);
    16261631                    }
    16271632                }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase2.cpp

    r3899 r3901  
    528528        true, ""
    529529    },
     530    // TODO: incorrect passing: wrong behaviour:
     531    // no loop marking and generating inside routine
    530532    {   // 3 - routine with loop
    531533        R"ffDXD(.regvar sa:s:8, va:v:8, xa:s:8
     
    19371939        true, ""
    19381940    },
    1939     {
     1941    {   // 12
    19401942        R"ffDXD(.regvar sa:s:10, va:v:8
    19411943        s_mov_b32 sa[2], s4
     
    20932095        true, ""
    20942096    },
    2095     {   // 11 - routine with complex loop used twice
     2097    {   // 13 - routine with complex loop used twice
    20962098        R"ffDXD(.regvar sa:s:10, va:v:8
    20972099        s_mov_b32 sa[2], s4
     
    21482150        s_cbranch_execnz loop0
    21492151
    2150 swubr2:
     2152subr2:
    21512153        s_xor_b32 sa[2], sa[2], sa[0]
    21522154        s_xor_b32 sa[3], sa[3], sa[0]
     
    22892291        true, ""
    22902292    },
     2293    {   // 14 - routine with double complex loop used four times
     2294        R"ffDXD(.regvar sa:s:10, va:v:8
     2295        s_mov_b32 sa[2], s4
     2296        s_mov_b32 sa[3], s5
     2297        s_mov_b32 sa[4], s6
     2298        s_mov_b32 sa[5], s7
     2299        s_mov_b32 sa[6], s8
     2300        s_mov_b32 sa[7], s8
     2301        .cf_call routine
     2302        s_swappc_b64 s[0:1], s[2:3]
     2303       
     2304        s_xor_b32 sa[2], sa[2], sa[0]
     2305        s_xor_b32 sa[3], sa[3], sa[0]
     2306        s_xor_b32 sa[4], sa[4], sa[1]
     2307        s_xor_b32 sa[5], sa[5], sa[1]
     2308        s_xor_b32 sa[6], sa[6], sa[0]
     2309        s_xor_b32 sa[7], sa[7], sa[0]
     2310        s_endpgm
     2311       
     2312routine:
     2313loop0:
     2314        s_xor_b32 sa[2], sa[2], sa[0]
     2315        s_xor_b32 sa[3], sa[3], sa[0]
     2316        s_xor_b32 sa[5], sa[5], sa[0]
     2317        s_cbranch_vccz  subr1
     2318       
     2319loop1:  s_xor_b32 sa[2], sa[2], sa[0]
     2320        s_cbranch_scc0 end1
     2321       
     2322        s_xor_b32 sa[3], sa[3], sa[0]
     2323        s_cbranch_scc0 end2
     2324       
     2325        s_xor_b32 sa[4], sa[4], sa[1]
     2326        s_cbranch_scc0 end3
     2327       
     2328        s_xor_b32 sa[5], sa[5], sa[1]
     2329        s_cbranch_vccnz loop1
     2330       
     2331        s_xor_b32 sa[6], sa[6], sa[1]
     2332        s_branch loop0
     2333       
     2334end1:   s_xor_b32 sa[2], sa[2], sa[0]
     2335        .cf_ret
     2336        s_setpc_b64 s[0:1]
     2337       
     2338end2:   s_xor_b32 sa[3], sa[3], sa[0]
     2339        .cf_ret
     2340        s_setpc_b64 s[0:1]
     2341       
     2342end3:   s_xor_b32 sa[4], sa[4], sa[0]
     2343        .cf_ret
     2344        s_setpc_b64 s[0:1]
     2345       
     2346subr1:
     2347        s_xor_b32 sa[2], sa[2], sa[0]
     2348        s_xor_b32 sa[3], sa[3], sa[0]
     2349        s_xor_b32 sa[4], sa[4], sa[0]
     2350        s_xor_b32 sa[5], sa[5], sa[1]
     2351        s_xor_b32 sa[6], sa[6], sa[0]
     2352        s_xor_b32 sa[7], sa[7], sa[0]
     2353        s_cbranch_execnz loop0
     2354       
     2355subr2:
     2356        s_xor_b32 sa[2], sa[2], sa[0]
     2357        s_xor_b32 sa[3], sa[3], sa[0]
     2358        s_xor_b32 sa[4], sa[4], sa[1]
     2359        s_xor_b32 sa[5], sa[5], sa[1]
     2360        s_xor_b32 sa[6], sa[6], sa[0]
     2361        s_xor_b32 sa[7], sa[7], sa[0]
     2362        s_cbranch_execnz loop1
     2363       
     2364subr3:
     2365        s_xor_b32 sa[2], sa[2], sa[0]
     2366        s_xor_b32 sa[3], sa[3], sa[0]
     2367        s_xor_b32 sa[4], sa[4], sa[1]
     2368        s_xor_b32 sa[5], sa[5], sa[1]
     2369        s_xor_b32 sa[6], sa[6], sa[0]
     2370        s_xor_b32 sa[7], sa[7], sa[0]
     2371        .cf_ret
     2372        s_setpc_b64 s[0:1]
     2373)ffDXD",
     2374        {
     2375            {   // block 0 - start
     2376                0, 28,
     2377                { { 2, true } },
     2378                {
     2379                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2380                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2381                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2382                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2383                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2384                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2385                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2386                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2387                    { { "", 8 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2388                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2389                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2390                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2391                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2392                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2393                    { { "sa", 7 }, SSAInfo(0, 1, 1, 1, 1, false) }
     2394                }, true, false, false },
     2395            {   // block 1 - end
     2396                28, 56,
     2397                { },
     2398                {
     2399                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2400                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2401                    { { "sa", 2 }, SSAInfo(3, 8, 8, 8, 1, true) },
     2402                    { { "sa", 3 }, SSAInfo(2, 8, 8, 8, 1, true) },
     2403                    { { "sa", 4 }, SSAInfo(1, 7, 7, 7, 1, true) },
     2404                    { { "sa", 5 }, SSAInfo(2, 7, 7, 7, 1, true) },
     2405                    { { "sa", 6 }, SSAInfo(1, 6, 6, 6, 1, true) },
     2406                    { { "sa", 7 }, SSAInfo(1, 5, 5, 5, 1, true) }
     2407                }, false, false, true },
     2408            {   // block 2 - routine/loop0
     2409                56, 72,
     2410                { { 3, false }, { 11, false } },
     2411                {
     2412                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2413                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     2414                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) },
     2415                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2416                }, false, false, false },
     2417            {   // block 3 - routine loop1
     2418                72, 80,
     2419                { { 4, false }, { 8, false } },
     2420                {
     2421                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2422                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2423                }, false, false, false },
     2424            {   // block 4 - to end2
     2425                80, 88,
     2426                { { 5, false }, { 9, false } },
     2427                {
     2428                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2429                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2430                }, false, false, false },
     2431            {   // block 5 - to end3
     2432                88, 96,
     2433                { { 6, false }, { 10, false } },
     2434                {
     2435                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2436                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2437                }, false, false, false },
     2438            {   // block 6 - loop1 end
     2439                96, 104,
     2440                { { 3, false }, { 7, false } },
     2441                {
     2442                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2443                    { { "sa", 5 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2444                }, false, false, false },
     2445            {   // block 7 - loop0 end
     2446                104, 112,
     2447                { { 2, false } },
     2448                {
     2449                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2450                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2451                }, false, false, true },
     2452            {   // block 8 - end1
     2453                112, 120,
     2454                { },
     2455                {
     2456                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2457                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2458                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2459                    { { "sa", 2 }, SSAInfo(3, 4, 4, 4, 1, true) }
     2460                }, false, true, true },
     2461            {   // block 9 - end2
     2462                120, 128,
     2463                { },
     2464                {
     2465                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2466                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2467                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2468                    { { "sa", 3 }, SSAInfo(3, 4, 4, 4, 1, true) }
     2469                }, false, true, true },
     2470            {   // block 10 - end3
     2471                128, 136,
     2472                { },
     2473                {
     2474                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2475                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2476                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2477                    { { "sa", 4 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2478                }, false, true, true },
     2479            {   // block 11 - subr1
     2480                136, 164,
     2481                { { 2, false }, { 12, false } },
     2482                {
     2483                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2484                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2485                    { { "sa", 2 }, SSAInfo(2, 5, 5, 5, 1, true) },
     2486                    { { "sa", 3 }, SSAInfo(2, 5, 5, 5, 1, true) },
     2487                    { { "sa", 4 }, SSAInfo(1, 4, 4, 4, 1, true) },
     2488                    { { "sa", 5 }, SSAInfo(2, 4, 4, 4, 1, true) },
     2489                    { { "sa", 6 }, SSAInfo(1, 3, 3, 3, 1, true) },
     2490                    { { "sa", 7 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2491                }, false, false, false },
     2492            {   // block 12 - subr2
     2493                164, 192,
     2494                { { 3, false }, { 13, false } },
     2495                {
     2496                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2497                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2498                    { { "sa", 2 }, SSAInfo(5, 6, 6, 6, 1, true) },
     2499                    { { "sa", 3 }, SSAInfo(5, 6, 6, 6, 1, true) },
     2500                    { { "sa", 4 }, SSAInfo(4, 5, 5, 5, 1, true) },
     2501                    { { "sa", 5 }, SSAInfo(4, 5, 5, 5, 1, true) },
     2502                    { { "sa", 6 }, SSAInfo(3, 4, 4, 4, 1, true) },
     2503                    { { "sa", 7 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2504                }, false, false, false },
     2505            {   // block 13 - subr3
     2506                192, 220,
     2507                { },
     2508                {
     2509                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2510                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2511                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2512                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2513                    { { "sa", 2 }, SSAInfo(6, 7, 7, 7, 1, true) },
     2514                    { { "sa", 3 }, SSAInfo(6, 7, 7, 7, 1, true) },
     2515                    { { "sa", 4 }, SSAInfo(5, 6, 6, 6, 1, true) },
     2516                    { { "sa", 5 }, SSAInfo(5, 6, 6, 6, 1, true) },
     2517                    { { "sa", 6 }, SSAInfo(4, 5, 5, 5, 1, true) },
     2518                    { { "sa", 7 }, SSAInfo(3, 4, 4, 4, 1, true) }
     2519                }, false, true, true }
     2520        },
     2521        {   // SSA replaces
     2522            { { "sa", 2 }, { { 4, 3 }, { 7, 3 }, { 3, 2 }, { 3, 1 }, { 5, 1 }, { 6, 2 } } },
     2523            { { "sa", 3 }, { { 3, 2 }, { 4, 2 }, { 6, 2 }, { 7, 2 }, { 3, 1 }, { 5, 1 } } },
     2524            { { "sa", 4 }, { { 2, 1 }, { 3, 1 }, { 5, 1 }, { 6, 1 }, { 4, 1 } } },
     2525            { { "sa", 5 }, { { 3, 2 }, { 5, 2 }, { 6, 2 }, { 3, 1 }, { 4, 1 } } },
     2526            { { "sa", 6 }, { { 2, 1 }, { 4, 1 }, { 5, 1 }, { 3, 1 } } },
     2527            { { "sa", 7 }, { { 3, 1 }, { 4, 1 }, { 2, 1 } } }
     2528        },
     2529        true, ""
     2530    },
    22912531    { nullptr }
    22922532};
Note: See TracChangeset for help on using the changeset viewer.