Changeset 3930 in CLRX


Ignore:
Timestamp:
Mar 23, 2018, 3:12:43 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Add not known curSSAIds from cachedRdata to routine data lastSSAIds if not first return.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3929 r3930  
    17271727                    {
    17281728                        auto cit = curSSAIdMap.find(entry.first);
    1729                         rdata.curSSAIdMap.insert({ entry.first,
    1730                             { (cit!=curSSAIdMap.end() ? cit->second : 1)-1 } });
     1729                        size_t prevSSAId = (cit!=curSSAIdMap.end() ? cit->second : 1)-1;
     1730                        rdata.curSSAIdMap.insert({ entry.first, { prevSSAId } });
     1731                       
     1732                        if (rdata.notFirstReturn)
     1733                        {
     1734                            rdata.lastSSAIdMap.insertSSAId(entry.first, prevSSAId);
     1735                            for (auto& loopEnd: rdata.loopEnds)
     1736                                loopEnd.second.ssaIdMap.
     1737                                        insertSSAId(entry.first, prevSSAId);
     1738                        }
    17311739                    }
    17321740               
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase3.cpp

    r3928 r3930  
    815815        true, ""
    816816    },
     817    {   // 4 - routine with loop and jumps to mid in loop
     818        R"ffDXD(.regvar sa:s:8, va:v:8
     819        s_mov_b32 sa[2], s4
     820        s_mov_b32 sa[3], s5
     821        s_mov_b32 sa[4], s6
     822        s_mov_b32 sa[5], s6
     823        s_mov_b32 sa[6], s7
     824       
     825        .cf_call routine
     826        s_swappc_b64 s[0:1], s[2:3]
     827       
     828        s_add_u32 sa[2], sa[2], sa[0]
     829        s_add_u32 sa[3], sa[3], sa[0]
     830        s_add_u32 sa[4], sa[4], sa[0]
     831        s_add_u32 sa[5], sa[5], sa[0]
     832        s_add_u32 sa[6], sa[6], sa[0]
     833        s_endpgm
     834       
     835end1:   s_xor_b32 sa[5], sa[5], sa[1]
     836        .cf_ret
     837        s_setpc_b64 s[0:1]
     838       
     839end2:   s_xor_b32 sa[6], sa[0], sa[1]
     840        .cf_ret
     841        s_setpc_b64 s[0:1]
     842       
     843routine:
     844        s_xor_b32 sa[2], sa[2], sa[0]
     845        s_xor_b32 sa[3], sa[3], sa[1]
     846        s_cbranch_execnz b0
     847       
     848loop:   s_xor_b32 sa[3], sa[3], sa[1]
     849       
     850l0:     s_xor_b32 sa[4], sa[4], sa[0]
     851        s_cbranch_scc0 end1
     852       
     853l1:     s_xor_b32 sa[2], sa[2], sa[0]
     854        s_cbranch_scc0 end2
     855       
     856        s_branch loop
     857       
     858b0:     s_xor_b32 sa[5], sa[5], sa[0]
     859        s_cbranch_vccz l0
     860        s_xor_b32 sa[6], sa[6], sa[1]
     861        s_branch l1
     862)ffDXD",
     863        {
     864            {   // block 0 - start
     865                0, 24,
     866                { { 4, true } },
     867                {
     868                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     869                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     870                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     871                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     872                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     873                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     874                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     875                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
     876                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     877                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     878                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     879                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
     880                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) }
     881                }, true, false, false },
     882            {   // block 1 - end
     883                24, 48,
     884                { },
     885                {
     886                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     887                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
     888                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) },
     889                    { { "sa", 4 }, SSAInfo(1, 3, 3, 3, 1, true) },
     890                    { { "sa", 5 }, SSAInfo(1, 4, 4, 4, 1, true) },
     891                    { { "sa", 6 }, SSAInfo(1, 4, 4, 4, 1, true) }
     892                }, false, false, true },
     893            {   // block 2 - end1
     894                48, 56,
     895                { },
     896                {
     897                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     898                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     899                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     900                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
     901                }, false, true, true },
     902            {   // block 3 - end2
     903                56, 64,
     904                { },
     905                {
     906                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     907                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     908                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     909                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     910                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, false) }
     911                }, false, true, true },
     912            {   // block 4 - routine
     913                64, 76,
     914                { { 5, false }, { 9, false } },
     915                {
     916                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     917                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     918                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     919                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
     920                }, false, false, false },
     921            {   // block 5 - loop
     922                76, 80,
     923                { },
     924                {
     925                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     926                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
     927                }, false, false, false },
     928            {   // block 6 - l0
     929                80, 88,
     930                { { 2, false }, { 7, false } },
     931                {
     932                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     933                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
     934                }, false, false, false },
     935            {   // block 7 - l1
     936                88, 96,
     937                { { 3, false }, { 8, false } },
     938                {
     939                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     940                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
     941                }, false, false, false },
     942            {   // block 8 - loop end
     943                96, 100,
     944                { { 5, false } },
     945                { },
     946                false, false, true },
     947            {   // block 9 - b0
     948                100, 108,
     949                { { 6, false }, { 10, false } },
     950                {
     951                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     952                    { { "sa", 5 }, SSAInfo(1, 3, 3, 3, 1, true) }
     953                }, false, false, false },
     954            {   // block 10 - to l1
     955                108, 116,
     956                { { 7, false } },
     957                {
     958                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     959                    { { "sa", 6 }, SSAInfo(1, 3, 3, 3, 1, true) }
     960                }, false, false, true }
     961        },
     962        {   // SSA replaces
     963            { { "sa", 2 }, { { 3, 2 } } },
     964            { { "sa", 3 }, { { 3, 2 } } },
     965            { { "sa", 4 }, { { 2, 1 } } },
     966            { { "sa", 5 }, { { 2, 1 }, { 3, 1 } } },
     967            { { "sa", 6 }, { { 2, 1 }, { 3, 1 } } }
     968        },
     969        true, ""
     970    },
    817971    { nullptr }
    818972};
Note: See TracChangeset for help on using the changeset viewer.