Changeset 3863 in CLRX


Ignore:
Timestamp:
Mar 1, 2018, 4:56:57 PM (17 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Tentative version with loop and conditionals handling inside routines (but not crossing between routines and main routine).

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3861 r3863  
    607607    size_t blockIndex;
    608608    size_t nextIndex;
     609    bool isCall;
    609610    std::unordered_map<AsmSingleVReg, size_t> prevSSAIds;
    610611    RetSSAIdMap prevRetSSAIdSets;
     
    14601461            else
    14611462            {
     1463                RoutineData* rdata = nullptr;
     1464                if (!callStack.empty())
     1465                    rdata = &(routineMap.find(callStack.back().routineBlock)->second);
     1466               
     1467                if (!entry.isCall && rdata != nullptr)
     1468                {
     1469                    std::cout << "procret2: " << entry.blockIndex << std::endl;
     1470                    joinLastSSAIdMap(rdata->lastSSAIdMap, rdata->curSSAIdMap);
     1471                    std::cout << "procretend2" << std::endl;
     1472                }
     1473               
     1474                // handle caching for res second point
    14621475                cblocksToCache.increase(entry.blockIndex);
    14631476                std::cout << "cblockToCache: " << entry.blockIndex << "=" <<
     
    14981511        if (entry.nextIndex < cblock.nexts.size())
    14991512        {
     1513            bool isCall = false;
    15001514            if (cblock.nexts[entry.nextIndex].isCall)
    15011515            {
     
    15041518                            cblock.nexts[entry.nextIndex].block });
    15051519                routineMap.insert({ cblock.nexts[entry.nextIndex].block, { } });
    1506             }
    1507            
    1508             flowStack.push_back({ cblock.nexts[entry.nextIndex].block, 0 });
     1520                isCall = true;
     1521            }
     1522           
     1523            flowStack.push_back({ cblock.nexts[entry.nextIndex].block, 0, isCall });
    15091524            entry.nextIndex++;
    15101525        }
     
    15251540                    }
    15261541            }
    1527             flowStack.push_back({ entry.blockIndex+1, 0 });
     1542            flowStack.push_back({ entry.blockIndex+1, 0, false });
    15281543            entry.nextIndex++;
    15291544        }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3862 r3863  
    38483848                    { { "xa", 0 }, SSAInfo(1, 9, 9, 9, 1, true) },
    38493849                    { { "xa", 7 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) }
    3850                 }, false, false, true },
     3850                }, false, false, true }
    38513851        },
    38523852        {   // SSA replaces
     
    38563856            { { "sa", 5 }, { { 2, 1 }, { 3, 1 } } },
    38573857            { { "xa", 0 }, { { 5, 1 }, { 6, 1 }, { 7, 2 }, { 8, 3 }, { 9, 4 } } }
     3858        },
     3859        true, ""
     3860    },
     3861    {   // 30 - routine with loop
     3862        R"ffDXD(.regvar sa:s:8, va:v:8, xa:s:8
     3863        s_mov_b32 sa[2], s4
     3864        s_mov_b32 sa[3], s5
     3865        s_mov_b32 sa[4], s6
     3866        s_mov_b32 sa[5], s7
     3867       
     3868        .cf_call routine
     3869        s_swappc_b64 s[0:1], s[2:3]
     3870       
     3871        s_xor_b32 sa[5], sa[5], sa[0]
     3872        s_xor_b32 sa[2], sa[2], sa[0]
     3873       
     3874        .cf_call routine
     3875        s_swappc_b64 s[0:1], s[2:3]
     3876       
     3877        s_endpgm
     3878       
     3879routine:
     3880        s_add_u32 sa[2], sa[2], sa[0]
     3881        s_add_u32 sa[3], sa[3], sa[1]
     3882       
     3883loop0:
     3884        s_add_u32 sa[4], sa[3], sa[0]
     3885        s_add_u32 sa[5], sa[3], sa[5]
     3886        s_cbranch_scc1 j1
     3887       
     3888j0:     s_add_u32 sa[2], sa[3], sa[0]
     3889        s_branch loopend
     3890
     3891j1:     s_add_u32 sa[5], sa[2], sa[0]
     3892
     3893loopend:
     3894        s_add_u32 sa[5], sa[5], sa[1]
     3895        s_cbranch_scc0 loop0
     3896       
     3897        s_add_u32 sa[5], sa[5], sa[0]
     3898        s_add_u32 sa[3], sa[3], sa[1]
     3899        .cf_ret
     3900        s_setpc_b64 s[0:1]
     3901)ffDXD",
     3902        {
     3903            {   // block 0 - start
     3904                0, 20,
     3905                { { 3, true } },
     3906                {
     3907                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     3908                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     3909                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3910                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3911                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3912                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3913                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3914                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3915                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     3916                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     3917                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     3918                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) }
     3919                }, true, false, false },
     3920            {   // block 1 - before second call
     3921                20, 32,
     3922                { { 3, true } },
     3923                {
     3924                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     3925                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     3926                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3927                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3928                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3929                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
     3930                    { { "sa", 5 }, SSAInfo(2, 6, 6, 6, 1, true) }
     3931                }, true, false, false },
     3932            {   // block 2 - end
     3933                32, 36,
     3934                { },
     3935                { }, false, false, true },
     3936            {   // block 3 - routine
     3937                36, 44,
     3938                { },
     3939                {
     3940                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3941                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3942                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     3943                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
     3944                }, false, false, false },
     3945            {   // block 4 - loop
     3946                44, 56,
     3947                { { 5, false }, { 6, false } },
     3948                {
     3949                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3950                    { { "sa", 3 }, SSAInfo(2, SIZE_MAX, 3, SIZE_MAX, 0, true) },
     3951                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, false) },
     3952                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
     3953                },
     3954                false, false, false },
     3955            {   // block 5 - j0
     3956                56, 64,
     3957                { { 7, false } },
     3958                {
     3959                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3960                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, false) },
     3961                    { { "sa", 3 }, SSAInfo(2, SIZE_MAX, 3, SIZE_MAX, 0, true) }
     3962                }, false, false, true },
     3963            {   // block 6 - j1
     3964                64, 68,
     3965                { },
     3966                {
     3967                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3968                    { { "sa", 2 }, SSAInfo(2, SIZE_MAX, 4, SIZE_MAX, 0, true) },
     3969                    { { "sa", 5 }, SSAInfo(2, 5, 5, 5, 1, false) }
     3970                }, false, false, false },
     3971            {   // block 7 - loopend
     3972                68, 76,
     3973                { { 4, false }, { 8, false } },
     3974                {
     3975                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3976                    { { "sa", 5 }, SSAInfo(2, 3, 3, 3, 1, true) }
     3977                }, false, false, false },
     3978            {   // block 8 - routine end
     3979                76, 88,
     3980                { },
     3981                {
     3982                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3983                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3984                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3985                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3986                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) },
     3987                    { { "sa", 5 }, SSAInfo(3, 4, 4, 4, 1, true) }
     3988                }, false, true, true }
     3989        },
     3990        {   // SSA replaces
     3991            { { "sa", 2 }, { { 3, 2 }, { 3, 2 }, { 4, 1 } } },
     3992            { { "sa", 5 }, { { 3, 2 }, { 4, 2 }, { 5, 2 }, { 3, 1 }, { 5, 2 }, { 6, 1 } } }
    38583993        },
    38593994        true, ""
Note: See TracChangeset for help on using the changeset viewer.