Changeset 3884 in CLRX


Ignore:
Timestamp:
Mar 8, 2018, 8:35:29 PM (7 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Store in prevRetSSAId entry prevSSAId before read in a calling block and use to revert entry in curSSAId.
Add new testcase to test retSSAIds.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3883 r3884  
    591591    std::vector<size_t> routines;
    592592    VectorSet<size_t> ssaIds;
     593    size_t prevSSAId; // for curSSAId
    593594};
    594595
     
    13111312}
    13121313
    1313 static void initializePrevRetSSAIds(const RetSSAIdMap& retSSAIdMap,
    1314             const RoutineData& rdata, FlowStackEntry& entry)
     1314static void initializePrevRetSSAIds(const CodeBlock& cblock,
     1315            const std::unordered_map<AsmSingleVReg, size_t>& curSSAIdMap,
     1316            const RetSSAIdMap& retSSAIdMap, const RoutineData& rdata,
     1317            FlowStackEntry& entry)
    13151318{
    13161319    for (const auto& v: rdata.lastSSAIdMap)
     
    13221325        if (rfit != retSSAIdMap.end())
    13231326            res.first->second = rfit->second;
    1324     }
    1325 }
    1326 
    1327 static void revertRetSSAIdMap(const std::unordered_map<AsmSingleVReg, size_t>& curSSAIdMap,
     1327       
     1328        auto cbsit = cblock.ssaInfoMap.find(v.first);
     1329        auto csit = curSSAIdMap.find(v.first);
     1330        res.first->second.prevSSAId = cbsit!=cblock.ssaInfoMap.end() ?
     1331                cbsit->second.ssaIdBefore : (csit!=curSSAIdMap.end() ? csit->second : 0);
     1332    }
     1333}
     1334
     1335static void revertRetSSAIdMap(std::unordered_map<AsmSingleVReg, size_t>& curSSAIdMap,
    13281336            RetSSAIdMap& retSSAIdMap, FlowStackEntry& entry, RoutineData* rdata)
    13291337{
     
    13671375            std::cout << std::endl;
    13681376        }
     1377        curSSAIdMap[v.first] = v.second.prevSSAId;
    13691378    }
    13701379}
     
    15331542                        //std::cout << "joincall:"<< next.block << std::endl;
    15341543                        auto it = routineMap.find(next.block); // must find
    1535                         initializePrevRetSSAIds(retSSAIdMap, it->second, entry);
     1544                        initializePrevRetSSAIds(cblock, curSSAIdMap, retSSAIdMap,
     1545                                    it->second, entry);
    15361546                        joinRetSSAIdMap(retSSAIdMap, it->second.lastSSAIdMap, next.block);
    15371547                    }
     
    18401850                        //std::cout << "joincall:"<< next.block << std::endl;
    18411851                        auto it = routineMap.find(next.block); // must find
    1842                         initializePrevRetSSAIds(retSSAIdMap, it->second, entry);
     1852                        initializePrevRetSSAIds(cblock, curSSAIdMap, retSSAIdMap,
     1853                                    it->second, entry);
    18431854                        joinRetSSAIdMap(retSSAIdMap, it->second.lastSSAIdMap, next.block);
    18441855                    }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3879 r3884  
    43674367        },
    43684368        true, ""
     4369    },
     4370    {   // 34 - retssa tests
     4371        R"ffDXD(.regvar sa:s:8, va:v:8
     4372        s_mov_b32 sa[2], s4
     4373        s_mov_b32 sa[3], s5
     4374        s_mov_b32 sa[4], s6
     4375        s_mov_b32 sa[5], s6
     4376        s_mov_b32 sa[6], s7
     4377        s_mov_b32 sa[7], s7
     4378       
     4379        .cf_call routine
     4380        s_swappc_b64 s[0:1], s[2:3]
     4381       
     4382        s_lshl_b32 sa[2], sa[2], 3
     4383        s_lshl_b32 sa[3], sa[1], 4
     4384        s_cbranch_scc1 aa1
     4385       
     4386aa0:    s_lshl_b32 sa[5], sa[1], 4
     4387        s_lshl_b32 sa[4], sa[1], 4
     4388        s_branch ca0
     4389       
     4390aa1:    s_lshl_b32 sa[6], sa[1], 4
     4391        s_lshl_b32 sa[3], sa[3], 4
     4392        s_lshl_b32 sa[5], sa[1], 4
     4393       
     4394ca0:    .cf_call routine
     4395        s_swappc_b64 s[0:1], s[2:3]
     4396
     4397        s_lshl_b32 sa[6], sa[3], 4
     4398        s_lshl_b32 sa[6], sa[4], 4
     4399        s_cbranch_execz aa3
     4400       
     4401aa2:    s_lshr_b32 sa[7], sa[1], 4
     4402        s_endpgm
     4403       
     4404aa3:    s_ashr_i32 sa[7], sa[7], 4
     4405        s_endpgm
     4406       
     4407routine:
     4408        s_xor_b32 sa[2], sa[2], sa[0]
     4409        s_xor_b32 sa[3], sa[3], sa[0]
     4410        .cf_cjump bb1, bb2
     4411        s_setpc_b64 s[0:1]
     4412       
     4413bb0:    s_min_u32 sa[2], sa[2], sa[0]
     4414        s_min_u32 sa[3], sa[3], sa[0]
     4415        s_max_u32 sa[4], sa[4], sa[0]
     4416        s_xor_b32 sa[5], sa[5], sa[0]
     4417        s_xor_b32 sa[6], sa[6], sa[0]
     4418        s_xor_b32 sa[7], sa[7], sa[0]
     4419        .cf_ret
     4420        s_setpc_b64 s[0:1]
     4421       
     4422bb1:    s_and_b32 sa[2], sa[2], sa[0]
     4423        s_and_b32 sa[3], sa[3], sa[0]
     4424        s_max_u32 sa[4], sa[4], sa[0]
     4425        s_xor_b32 sa[5], sa[5], sa[0]
     4426        s_xor_b32 sa[6], sa[6], sa[0]
     4427        s_xor_b32 sa[7], sa[7], sa[0]
     4428        .cf_ret
     4429        s_setpc_b64 s[0:1]
     4430
     4431bb2:    s_and_b32 sa[2], sa[2], sa[0]
     4432        s_and_b32 sa[3], sa[3], sa[0]
     4433        s_max_u32 sa[4], sa[4], sa[0]
     4434        s_xor_b32 sa[5], sa[5], sa[0]
     4435        s_xor_b32 sa[6], sa[6], sa[0]
     4436        s_xor_b32 sa[7], sa[7], sa[0]
     4437        .cf_ret
     4438        s_setpc_b64 s[0:1]
     4439)ffDXD",
     4440        {
     4441            {   // block 0 - start
     4442                0, 28,
     4443                { { 8, true } },
     4444                {
     4445                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4446                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4447                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4448                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4449                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4450                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4451                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4452                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4453                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4454                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4455                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4456                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4457                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4458                    { { "sa", 7 }, SSAInfo(0, 1, 1, 1, 1, false) }
     4459                }, true, false, false },
     4460            {   // block 1 - after call
     4461                28, 40,
     4462                { { 2, false }, { 3, false } },
     4463                {
     4464                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4465                    { { "sa", 2 }, SSAInfo(3, 6, 6, 6, 1, true) },
     4466                    { { "sa", 3 }, SSAInfo(1, 6, 6, 6, 1, false) }
     4467                }, false, false, false },
     4468            {   // block 2 - aa0
     4469                40, 52,
     4470                { { 4, false } },
     4471                {
     4472                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4473                    { { "sa", 4 }, SSAInfo(1, 5, 5, 5, 1, false) },
     4474                    { { "sa", 5 }, SSAInfo(1, 5, 5, 5, 1, false) }
     4475                }, false, false, true },
     4476            {   // block 3 - aa1
     4477                52, 64,
     4478                { },
     4479                {
     4480                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4481                    { { "sa", 3 }, SSAInfo(6, 7, 7, 7, 1, true) },
     4482                    { { "sa", 5 }, SSAInfo(1, 6, 6, 6, 1, false) },
     4483                    { { "sa", 6 }, SSAInfo(1, 7, 7, 7, 1, false) }
     4484                }, false, false, false },
     4485            {   // block 4 - ca0
     4486                64, 68,
     4487                { { 8, true } },
     4488                {
     4489                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4490                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4491                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4492                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) }
     4493                }, true, false, false },
     4494            {   // block 5 - last cond
     4495                68, 80,
     4496                { { 6, false }, { 7, false } },
     4497                {
     4498                    { { "sa", 3 }, SSAInfo(3, SIZE_MAX, 7, SIZE_MAX, 0, true) },
     4499                    { { "sa", 4 }, SSAInfo(2, SIZE_MAX, 6, SIZE_MAX, 0, true) },
     4500                    { { "sa", 6 }, SSAInfo(1, 5, 5, 6, 2, false) }
     4501                }, false, false, false },
     4502            {   // block 6 - end1
     4503                80, 88,
     4504                { },
     4505                {
     4506                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4507                    { { "sa", 7 }, SSAInfo(1, 5, 5, 5, 1, false) }
     4508                }, false, false, true },
     4509            {   // block 7 - end2
     4510                88, 96,
     4511                { },
     4512                {
     4513                    { { "sa", 7 }, SSAInfo(2, 6, 6, 6, 1, true) }
     4514                }, false, false, true },
     4515            {   // block 8 - routine
     4516                96, 108,
     4517                { { 9, false }, { 10, false }, { 11, false } },
     4518                {
     4519                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4520                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4521                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4522                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4523                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
     4524                }, false, false, false },
     4525            {   // block 9 - bb0
     4526                108, 136,
     4527                { },
     4528                {
     4529                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4530                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4531                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4532                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) },
     4533                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) },
     4534                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4535                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4536                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4537                    { { "sa", 7 }, SSAInfo(1, 2, 2, 2, 1, true) }
     4538                }, false, true, true },
     4539            {   // block 10 - bb1
     4540                136, 164,
     4541                { },
     4542                {
     4543                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4544                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4545                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4546                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
     4547                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) },
     4548                    { { "sa", 4 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4549                    { { "sa", 5 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4550                    { { "sa", 6 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4551                    { { "sa", 7 }, SSAInfo(1, 3, 3, 3, 1, true) }
     4552                }, false, true, true },
     4553            {   // block 11 - bb2
     4554                164, 192,
     4555                { },
     4556                {
     4557                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4558                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4559                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4560                    { { "sa", 2 }, SSAInfo(2, 5, 5, 5, 1, true) },
     4561                    { { "sa", 3 }, SSAInfo(2, 5, 5, 5, 1, true) },
     4562                    { { "sa", 4 }, SSAInfo(1, 4, 4, 4, 1, true) },
     4563                    { { "sa", 5 }, SSAInfo(1, 4, 4, 4, 1, true) },
     4564                    { { "sa", 6 }, SSAInfo(1, 4, 4, 4, 1, true) },
     4565                    { { "sa", 7 }, SSAInfo(1, 4, 4, 4, 1, true) }
     4566                }, false, true, true }
     4567        },
     4568        {   // SSA replaces
     4569            { { "sa", 2 }, { { 4, 3 }, { 5, 3 }, { 6, 1 }, { 6, 1 } } },
     4570            { { "sa", 3 }, { { 4, 3 }, { 5, 3 }, { 6, 1 }, { 7, 1 } } },
     4571            { { "sa", 4 }, { { 3, 2 }, { 4, 2 }, { 5, 1 }, { 5, 1 }, { 5, 1 }, { 2, 1 },
     4572                    { 2, 1 }, { 2, 1 } } },
     4573            { { "sa", 5 }, { { 5, 1 }, { 5, 1 }, { 5, 1 },
     4574                    { 6, 1 }, { 6, 1 }, { 6, 1 } } },
     4575            { { "sa", 6 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 2, 1 }, { 3, 1 }, { 4, 1 },
     4576                    { 2, 1 }, { 3, 1 }, { 4, 1 }, { 7, 1 }, { 7, 1 }, { 7, 1 } } },
     4577            { { "sa", 7 }, { { 3, 2 }, { 4, 2 }, { 2, 1 }, { 2, 1 }, { 2, 1 },
     4578                    { 2, 1 }, { 2, 1 }, { 2, 1 } } }
     4579        },
     4580        true, ""
    43694581    }
    43704582};
Note: See TracChangeset for help on using the changeset viewer.