Changeset 3912 in CLRX


Ignore:
Timestamp:
Mar 20, 2018, 1:06:19 PM (5 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Adding subroutine for loop at start of the routine and register loopSSAIds to routine lastSSAIds.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3911 r3912  
    14811481        const CodeBlock& cblock = codeBlocks[entry.blockIndex];
    14821482       
    1483         auto addSubroutine = [&](bool applyToMainRoutine)
     1483        auto addSubroutine = [&](
     1484            std::unordered_map<size_t, LoopSSAIdMap>::const_iterator loopsit2,
     1485            bool applyToMainRoutine)
    14841486        {
    14851487            RoutineData subrData;
     
    14931495            {   // leave from loop point
    14941496                std::cout << "   loopfound " << entry.blockIndex << std::endl;
    1495                 auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
    14961497                if (loopsit2 != rdata.loopEnds.end())
    14971498                {
     
    15411542                    subroutToCache.count(entry.blockIndex)!=0)
    15421543                {
     1544                    auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
    15431545                    std::cout << "-- subrcache2 for " << entry.blockIndex << std::endl;
    1544                     addSubroutine(false);
     1546                    addSubroutine(loopsit2, false);
    15451547                    cachedRdata = subroutinesCache.use(entry.blockIndex);
    15461548                }
     
    16591661           
    16601662            auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
    1661             if (flowStack.size() > 1 && subroutToCache.count(entry.blockIndex)!=0)
     1663            if ((!noMainLoop || flowStack.size() > 1) &&
     1664                subroutToCache.count(entry.blockIndex)!=0)
    16621665            { //put to cache
    16631666                std::cout << "-- subrcache for " << entry.blockIndex << std::endl;
    1664                 addSubroutine(true);
     1667                addSubroutine(loopsit2, true);
    16651668            }
    16661669            if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase2.cpp

    r3902 r3912  
    25222522            { { "sa", 2 }, { { 4, 3 }, { 7, 3 }, { 3, 2 }, { 3, 1 }, { 5, 1 }, { 6, 2 } } },
    25232523            { { "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 } } },
     2524            { { "sa", 4 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 }, { 6, 1 } } },
    25252525            { { "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", 6 }, { { 4, 1 }, { 5, 1 }, { 2, 1 }, { 3, 1 } } },
     2526            { { "sa", 6 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 } } },
    25282527            { { "sa", 7 }, { { 3, 1 }, { 4, 1 }, { 2, 1 } } }
    25292528        },
     
    27752774        true, ""
    27762775    },
     2776    {   // 16 - routine with complex loop at start
     2777        R"ffDXD(.regvar sa:s:10, va:v:8
     2778        s_mov_b32 sa[2], s4
     2779        s_mov_b32 sa[3], s5
     2780        s_mov_b32 sa[4], s6
     2781        s_mov_b32 sa[5], s7
     2782        s_mov_b32 sa[6], s8
     2783        .cf_call routine
     2784        s_swappc_b64 s[0:1], s[2:3]
     2785       
     2786        s_xor_b32 sa[2], sa[2], sa[0]
     2787        s_xor_b32 sa[3], sa[3], sa[0]
     2788        s_xor_b32 sa[4], sa[4], sa[1]
     2789        s_xor_b32 sa[5], sa[5], sa[1]
     2790        s_xor_b32 sa[6], sa[6], sa[0]
     2791        s_endpgm
     2792       
     2793routine:
     2794loop0:  s_xor_b32 sa[2], sa[2], sa[0]
     2795        s_cbranch_scc0 end1
     2796       
     2797        s_xor_b32 sa[3], sa[3], sa[0]
     2798        s_cbranch_scc0 end2
     2799       
     2800        s_xor_b32 sa[4], sa[4], sa[1]
     2801        s_cbranch_scc0 end3
     2802       
     2803        s_xor_b32 sa[5], sa[5], sa[1]
     2804        s_branch loop0
     2805       
     2806end1:   s_xor_b32 sa[2], sa[2], sa[0]
     2807        .cf_ret
     2808        s_setpc_b64 s[0:1]
     2809
     2810end2:   s_xor_b32 sa[3], sa[3], sa[0]
     2811        .cf_ret
     2812        s_setpc_b64 s[0:1]
     2813
     2814end3:   s_xor_b32 sa[4], sa[4], sa[0]
     2815        .cf_ret
     2816        s_setpc_b64 s[0:1]
     2817)ffDXD",
     2818        {
     2819            {   // block 0 - start
     2820                0, 24,
     2821                { { 2, true } },
     2822                {
     2823                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2824                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2825                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2826                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2827                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2828                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2829                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2830                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2831                    { { "", 8 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2832                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2833                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2834                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2835                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2836                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) }
     2837                }, true, false, false },
     2838            {   // block 1 - end
     2839                24, 48,
     2840                { },
     2841                {
     2842                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2843                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2844                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
     2845                    { { "sa", 3 }, SSAInfo(1, 4, 4, 4, 1, true) },
     2846                    { { "sa", 4 }, SSAInfo(1, 4, 4, 4, 1, true) },
     2847                    { { "sa", 5 }, SSAInfo(1, 3, 3, 3, 1, true) },
     2848                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2849                }, false, false, true },
     2850            {   // block 2 - routine, loop
     2851                48, 56,
     2852                { { 3, false }, { 6, false } },
     2853                {
     2854                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2855                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2856                }, false, false, false },
     2857            {   // block 3 - to end2
     2858                56, 64,
     2859                { { 4, false }, { 7, false } },
     2860                {
     2861                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2862                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2863                }, false, false, false },
     2864            {   // block 4 - to end3
     2865                64, 72,
     2866                { { 5, false }, { 8, false } },
     2867                {
     2868                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2869                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2870                }, false, false, false },
     2871            {   // block 5 - loop end
     2872                72, 80,
     2873                { { 2, false } },
     2874                {
     2875                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2876                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2877                }, false, false, true },
     2878            {   // block 6 - end1
     2879                80, 88,
     2880                { },
     2881                {
     2882                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2883                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2884                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2885                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2886                }, false, true, true },
     2887            {   // block 7 - end2
     2888                88, 96,
     2889                { },
     2890                {
     2891                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2892                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2893                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2894                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2895                }, false, true, true },
     2896            {   // block 8 - end3
     2897                96, 104,
     2898                { },
     2899                {
     2900                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2901                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2902                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2903                    { { "sa", 4 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2904                }, false, true, true }
     2905        },
     2906        {   // SSA replaces
     2907            { { "sa", 2 }, { { 3, 2 }, { 2, 1 } } },
     2908            { { "sa", 3 }, { { 2, 1 }, { 3, 1 } } },
     2909            { { "sa", 4 }, { { 2, 1 }, { 3, 1 } } },
     2910            { { "sa", 5 }, { { 2, 1 } } }
     2911        },
     2912        true, ""
     2913    },
    27772914    { nullptr }
    27782915};
Note: See TracChangeset for help on using the changeset viewer.