Changeset 3625 in CLRX


Ignore:
Timestamp:
Jan 17, 2018, 9:12:42 PM (3 years ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: The first working testcase with multiple calls.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3624 r3625  
    509509            if (next.isCall)
    510510            {
     511                if (next.block == nextBlock)
     512                    break; // if call to this next routine (stop)
    511513                const LastSSAIdMap& regVarMap =
    512514                        routineMap.find(next.block)->second.lastSSAIdMap;
     
    557559                                {
    558560                                    /*std::cout << "  insertreplace: " <<
     561                                        sentry.first.regVar << ":" <<
     562                                        sentry.first.index  << ": " <<
    559563                                        ssaId << ", " << sinfo.ssaIdBefore << std::endl;*/
    560564                                    insertReplace(replacesMap, sentry.first, ssaId,
     
    563567                                else if (ssaId < sinfo.ssaIdBefore)
    564568                                {
    565                                     /*std::cout << "  insertreplace: " <<
     569                                    /*std::cout << "  insertreplace2: " <<
     570                                        sentry.first.regVar << ":" <<
     571                                        sentry.first.index  << ": " <<
    566572                                        ssaId << ", " << sinfo.ssaIdBefore << std::endl;*/
    567573                                    insertReplace(replacesMap, sentry.first,
     
    10101016            else
    10111017            {
     1018                resolveSSAConflicts(flowStack, callStack, visited, routineMap, codeBlocks,
     1019                                    ssaReplacesMap);
     1020               
    10121021                // join routine data
    1013                 auto rit = routineMap.find(entry.blockIndex);
     1022                /*auto rit = routineMap.find(entry.blockIndex);
    10141023                if (rit != routineMap.end())
    10151024                    // just join with current routine data
    10161025                    joinRoutineData(routineMap.find(
    1017                             callStack.back().routineBlock)->second, rit->second);
    1018                
    1019                 resolveSSAConflicts(flowStack, callStack, visited, routineMap, codeBlocks,
    1020                                     ssaReplacesMap);
    1021                 if (!callStack.empty())
     1026                            callStack.back().routineBlock)->second, rit->second);*/
     1027                /*if (!callStack.empty())
    10221028                    collectSSAIdsForCall(flowStack, callStack, visited,
    1023                             routineMap, codeBlocks);
     1029                            routineMap, codeBlocks);*/
    10241030                // back, already visited
    10251031                flowStack.pop_back();
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3624 r3625  
    20572057        true, ""
    20582058    },
    2059     {
     2059    {   // 14 -
    20602060        R"ffDXD(.regvar sa:s:8, va:v:8
    20612061        s_mov_b32 sa[2], s4
     
    26002600            { { "sa", 4 }, { { 1, 0 }, { 2, 0 } } },
    26012601            { { "sa", 5 }, { { 1, 0 } } }
     2602        },
     2603        true, ""
     2604    },
     2605    {   // 20 - multiple call of routine
     2606        R"ffDXD(.regvar sa:s:8, va:v:8
     2607        s_mov_b32 sa[2], s4
     2608        s_mov_b32 sa[3], s5
     2609       
     2610        s_getpc_b64 s[2:3]
     2611        s_add_u32 s2, s2, routine-.
     2612        s_add_u32 s3, s3, routine-.+4
     2613        .cf_call routine
     2614        s_swappc_b64 s[0:1], s[2:3]
     2615       
     2616        s_lshl_b32 sa[2], sa[2], 3
     2617        s_lshl_b32 sa[3], sa[3], 4
     2618       
     2619        s_getpc_b64 s[2:3]
     2620        s_add_u32 s2, s2, routine-.
     2621        s_add_u32 s3, s3, routine-.+4
     2622        .cf_call routine
     2623        s_swappc_b64 s[0:1], s[2:3]
     2624       
     2625        s_ashr_i32 sa[2], sa[2], 3
     2626        s_ashr_i32 sa[3], sa[3], 4
     2627        s_endpgm
     2628       
     2629routine:
     2630        s_xor_b32 sa[2], sa[2], sa[4]
     2631        s_xor_b32 sa[3], sa[3], sa[4]
     2632        s_cbranch_scc1 bb1
     2633       
     2634        s_min_u32 sa[2], sa[2], sa[4]
     2635        .cf_ret
     2636        s_setpc_b64 s[0:1]
     2637       
     2638bb1:    s_and_b32 sa[2], sa[2], sa[4]
     2639        .cf_ret
     2640        s_setpc_b64 s[0:1]
     2641)ffDXD",
     2642        {
     2643            // block 0
     2644            { 0, 32,
     2645                { { 3, true } },
     2646                {
     2647                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2648                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2649                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2650                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2651                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2652                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2653                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2654                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) }
     2655                }, true, false, false },
     2656            // block 1
     2657            { 32, 64,
     2658                { { 3, true } },
     2659                {
     2660                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2661                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2662                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2663                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2664                    { { "sa", 2 }, SSAInfo(3, 5, 5, 5, 1, true) },
     2665                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2666                }, true, false, false },
     2667            // block 2
     2668            { 64, 76,
     2669                { },
     2670                {
     2671                    { { "sa", 2 }, SSAInfo(3, 6, 6, 6, 1, true) },
     2672                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) }
     2673                }, false, false, true},
     2674            // block 3 - routine
     2675            { 76, 88,
     2676                { { 4, false }, { 5, false } },
     2677                {
     2678                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     2679                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) },
     2680                    { { "sa", 4 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) }
     2681                }, false, false, false },
     2682            // block 4
     2683            { 88, 96,
     2684                { },
     2685                {
     2686                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2687                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2688                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) },
     2689                    { { "sa", 4 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) }
     2690                }, false, true, true },
     2691            // block 5
     2692            { 96, 104,
     2693                { },
     2694                {
     2695                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2696                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2697                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
     2698                    { { "sa", 4 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) }
     2699                }, false, true, true }
     2700        },
     2701        {   // SSA replaces
     2702            // BUG
     2703            { { "sa", 2 }, { { 4, 3 }, { 5, 1 }, { 4, 3 } } },
     2704            { { "sa", 3 }, { { 3, 1 } } }
    26022705        },
    26032706        true, ""
Note: See TracChangeset for help on using the changeset viewer.