Changeset 3886 in CLRX


Ignore:
Timestamp:
Mar 9, 2018, 7:55:01 PM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: keep reduced SSAId from retSSAIds for further way if regvar was not changed. Add new testcase.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3884 r3886  
    12221222}
    12231223
    1224 static void reduceSSAIds(std::unordered_map<AsmSingleVReg, size_t>& curSSAIdMap,
     1224static bool reduceSSAIds(std::unordered_map<AsmSingleVReg, size_t>& curSSAIdMap,
    12251225            RetSSAIdMap& retSSAIdMap, std::unordered_map<size_t, RoutineData>& routineMap,
    12261226            SSAReplacesMap& ssaReplacesMap, FlowStackEntry& entry, SSAEntry& ssaEntry)
     
    12561256        // finally remove from container (because obsolete)
    12571257        retSSAIdMap.erase(ssaIdsIt);
     1258        return true;
    12581259    }
    12591260    else if (ssaIdsIt != retSSAIdMap.end() && sinfo.ssaIdChange!=0)
     
    12661267        retSSAIdMap.erase(ssaIdsIt);
    12671268    }
     1269    return false;
    12681270}
    12691271
     
    17241726                    }
    17251727                   
    1726                     reduceSSAIds(curSSAIdMap, retSSAIdMap, routineMap, ssaReplacesMap,
    1727                                 entry, ssaEntry);
     1728                    bool reducedSSAId = reduceSSAIds(curSSAIdMap, retSSAIdMap,
     1729                                routineMap, ssaReplacesMap, entry, ssaEntry);
    17281730                   
    17291731                    size_t& ssaId = curSSAIdMap[ssaEntry.first];
     
    17441746                    sinfo.ssaIdLast = sinfo.ssaIdChange!=0 ? totalSSACount-1 : SIZE_MAX;
    17451747                    //totalSSACount = std::max(totalSSACount, ssaId);
    1746                     ssaId = totalSSACount;
     1748                    if (!reducedSSAId || sinfo.ssaIdChange!=0)
     1749                        ssaId = totalSSACount;
    17471750                   
    17481751                    /*if (!callStack.empty())
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3885 r3886  
    47394739        },
    47404740        true, ""
     4741    },
     4742    {   // 35 - retssa tests
     4743        R"ffDXD(.regvar sa:s:10, va:v:8
     4744        s_mov_b32 sa[2], s4
     4745        s_mov_b32 sa[3], s5
     4746        s_mov_b32 sa[4], s6
     4747        s_mov_b32 sa[5], s5
     4748        v_mov_b32 va[1], v0
     4749        v_mov_b32 va[2], v1
     4750       
     4751        .cf_call routine
     4752        s_swappc_b64 s[0:1], s[2:3]
     4753        s_cbranch_vccnz aa1
     4754aa0:    s_xor_b32 sa[2], sa[1], sa[0]
     4755        s_xor_b32 sa[3], sa[3], sa[0]
     4756       
     4757        .cf_call routine2
     4758        s_swappc_b64 s[0:1], s[2:3]
     4759       
     4760        s_cbranch_vccnz aa3
     4761aa2:    s_xor_b32 sa[6], sa[1], sa[0]
     4762        s_xor_b32 sa[7], sa[7], sa[0]
     4763        v_xor_b32 va[1], va[0], va[0]
     4764        v_xor_b32 va[2], va[0], va[0]
     4765        s_endpgm
     4766       
     4767aa3:    s_xor_b32 sa[6], sa[6], sa[0]
     4768        s_xor_b32 sa[7], sa[7], sa[0]
     4769        s_xor_b32 sa[8], sa[8], sa[0]
     4770        s_xor_b32 sa[5], sa[5], sa[0]
     4771        v_xor_b32 va[1], va[1], va[0]
     4772        v_xor_b32 va[0], va[2], va[0]
     4773        s_endpgm
     4774       
     4775aa1:    s_xor_b32 sa[2], sa[2], sa[0]
     4776        s_xor_b32 sa[3], sa[3], sa[0]
     4777        s_xor_b32 sa[2], sa[4], sa[0]
     4778        s_xor_b32 sa[5], sa[5], sa[0]
     4779        s_cbranch_execz aa5
     4780       
     4781aa4:    s_xor_b32 sa[4], sa[4], sa[0]
     4782        v_xor_b32 va[1], va[1], va[0]
     4783        s_endpgm
     4784       
     4785aa5:    s_xor_b32 sa[4], sa[4], sa[0]
     4786        s_endpgm
     4787       
     4788routine:
     4789        s_xor_b32 sa[2], sa[2], sa[0]
     4790        s_xor_b32 sa[3], sa[3], sa[0]
     4791        s_cbranch_vccz bb1
     4792       
     4793bb0:    s_min_u32 sa[2], sa[2], sa[0]
     4794        s_min_u32 sa[3], sa[3], sa[0]
     4795        s_max_u32 sa[4], sa[4], sa[0]
     4796        s_xor_b32 sa[5], sa[5], sa[0]
     4797        v_xor_b32 va[1], va[1], va[0]
     4798        v_xor_b32 va[2], va[2], va[0]
     4799        .cf_ret
     4800        s_setpc_b64 s[0:1]
     4801       
     4802bb1:    s_and_b32 sa[2], sa[2], sa[0]
     4803        s_and_b32 sa[3], sa[3], sa[0]
     4804        s_max_u32 sa[4], sa[4], sa[0]
     4805        s_xor_b32 sa[5], sa[5], sa[0]
     4806        v_xor_b32 va[1], va[1], va[0]
     4807        v_xor_b32 va[2], va[2], va[0]
     4808        .cf_ret
     4809        s_setpc_b64 s[0:1]
     4810
     4811routine2:
     4812        s_xor_b32 sa[6], sa[6], sa[1]
     4813        s_xor_b32 sa[7], sa[7], sa[1]
     4814        s_cbranch_vccz bb3
     4815       
     4816bb2:    s_min_u32 sa[6], sa[6], sa[1]
     4817        s_min_u32 sa[7], sa[7], sa[1]
     4818        s_max_u32 sa[8], sa[8], sa[1]
     4819        s_xor_b32 sa[5], sa[5], sa[1]
     4820        .cf_ret
     4821        s_setpc_b64 s[0:1]
     4822       
     4823bb3:    s_and_b32 sa[6], sa[6], sa[1]
     4824        s_and_b32 sa[7], sa[7], sa[1]
     4825        s_max_u32 sa[8], sa[8], sa[1]
     4826        s_xor_b32 sa[5], sa[5], sa[1]
     4827        .cf_ret
     4828        s_setpc_b64 s[0:1]
     4829)ffDXD",
     4830        {
     4831            {   // block 0 - start
     4832                0, 28,
     4833                { { 9, true } },
     4834                {
     4835                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4836                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4837                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4838                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4839                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4840                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4841                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4842                    { { "", 256 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4843                    { { "", 256+1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4844                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4845                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4846                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4847                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4848                    { { "va", 1 }, SSAInfo(0, 1, 1, 1, 1, false) },
     4849                    { { "va", 2 }, SSAInfo(0, 1, 1, 1, 1, false) }
     4850                }, true, false, false },
     4851            {   // block 1 - branch aa0-aa1
     4852                28, 32,
     4853                { { 2, false }, { 6, false } },
     4854                {
     4855                }, false, false, false },
     4856            {   // block 2 - aa0
     4857                32, 44,
     4858                { { 12, true } },
     4859                {
     4860                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4861                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     4862                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4863                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4864                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4865                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4866                    { { "sa", 2 }, SSAInfo(1, 5, 5, 5, 1, false) },
     4867                    { { "sa", 3 }, SSAInfo(3, 5, 5, 5, 1, true) }
     4868                }, true, false, false },
     4869            {   // block 3 - branch aa2-aa3
     4870                44, 48,
     4871                { { 4, false }, { 5, false } },
     4872                {
     4873                }, false, false, false },
     4874            {   // block 4 - aa2
     4875                48, 68,
     4876                { },
     4877                {
     4878                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4879                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4880                    { { "sa", 6 }, SSAInfo(0, 4, 4, 4, 1, false) },
     4881                    { { "sa", 7 }, SSAInfo(2, 4, 4, 4, 1, true) },
     4882                    { { "va", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4883                    { { "va", 1 }, SSAInfo(1, 4, 4, 4, 1, false) },
     4884                    { { "va", 2 }, SSAInfo(1, 4, 4, 4, 1, false) }
     4885                }, false, false, true },
     4886            {   // block 5 - aa3
     4887                68, 96,
     4888                { },
     4889                {
     4890                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4891                    { { "sa", 5 }, SSAInfo(4, 6, 6, 6, 1, true) },
     4892                    { { "sa", 6 }, SSAInfo(2, 5, 5, 5, 1, true) },
     4893                    { { "sa", 7 }, SSAInfo(2, 5, 5, 5, 1, true) },
     4894                    { { "sa", 8 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4895                    { { "va", 0 }, SSAInfo(0, 1, 1, 1, 1, true) },
     4896                    { { "va", 1 }, SSAInfo(2, 5, 5, 5, 1, true) },
     4897                    { { "va", 2 }, SSAInfo(2, SIZE_MAX, 5, SIZE_MAX, 0, true) }
     4898                }, false, false, true },
     4899            {   // block 6 - aa1
     4900                96, 116,
     4901                { { 7, false }, { 8, false } },
     4902                {
     4903                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4904                    { { "sa", 2 }, SSAInfo(3, 6, 6, 7, 2, true) },
     4905                    { { "sa", 3 }, SSAInfo(3, 6, 6, 6, 1, true) },
     4906                    { { "sa", 4 }, SSAInfo(2, SIZE_MAX, 4, SIZE_MAX, 0, true) },
     4907                    { { "sa", 5 }, SSAInfo(2, 7, 7, 7, 1, true) }
     4908                }, false, false, false },
     4909            {   // block 7 - aa4
     4910                116, 128,
     4911                { },
     4912                {
     4913                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4914                    { { "sa", 4 }, SSAInfo(2, 4, 4, 4, 1, true) },
     4915                    { { "va", 0 }, SSAInfo(0, SIZE_MAX, 2, SIZE_MAX, 0, true) },
     4916                    { { "va", 1 }, SSAInfo(2, 6, 6, 6, 1, true) }
     4917                }, false, false, true },
     4918            {   // block 8 - aa5
     4919                128, 136,
     4920                { },
     4921                {
     4922                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4923                    { { "sa", 4 }, SSAInfo(2, 5, 5, 5, 1, true) }
     4924                }, false, false, true },
     4925            {   // block 9 - routine
     4926                136, 148,
     4927                { { 10, false }, { 11, false } },
     4928                {
     4929                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4930                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4931                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
     4932                }, false, false, false },
     4933            {   // block 10 - bb0
     4934                148, 176,
     4935                { },
     4936                {
     4937                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4938                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4939                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4940                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) },
     4941                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) },
     4942                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4943                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4944                    { { "va", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4945                    { { "va", 1 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4946                    { { "va", 2 }, SSAInfo(1, 2, 2, 2, 1, true) }
     4947                }, false, true, true },
     4948            {   // block 11 - bb1
     4949                176, 204,
     4950                { },
     4951                {
     4952                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4953                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4954                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4955                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
     4956                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) },
     4957                    { { "sa", 4 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4958                    { { "sa", 5 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4959                    { { "va", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4960                    { { "va", 1 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4961                    { { "va", 2 }, SSAInfo(1, 3, 3, 3, 1, true) }
     4962                }, false, true, true },
     4963            {   // block 12 - routine2
     4964                204, 216,
     4965                { { 13, false }, { 14, false } },
     4966                {
     4967                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4968                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, true) },
     4969                    { { "sa", 7 }, SSAInfo(0, 1, 1, 1, 1, true) }
     4970                }, false, false, false },
     4971            {   // block 13 - bb2
     4972                216, 236,
     4973                { },
     4974                {
     4975                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4976                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4977                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4978                    { { "sa", 5 }, SSAInfo(2, 4, 4, 4, 1, true) },
     4979                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4980                    { { "sa", 7 }, SSAInfo(1, 2, 2, 2, 1, true) },
     4981                    { { "sa", 8 }, SSAInfo(0, 1, 1, 1, 1, true) }
     4982                }, false, true, true },
     4983            {   // block 14 - bb3
     4984                236, 256,
     4985                { },
     4986                {
     4987                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4988                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     4989                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     4990                    { { "sa", 5 }, SSAInfo(2, 5, 5, 5, 1, true) },
     4991                    { { "sa", 6 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4992                    { { "sa", 7 }, SSAInfo(1, 3, 3, 3, 1, true) },
     4993                    { { "sa", 8 }, SSAInfo(0, 2, 2, 2, 1, true) }
     4994                }, false, true, true }
     4995        },
     4996        {   // SSA replaces
     4997            { { "sa", 2 }, { { 4, 3 } } },
     4998            { { "sa", 3 }, { { 4, 3 } } },
     4999            { { "sa", 4 }, { { 3, 2 } } },
     5000            { { "sa", 5 }, { { 3, 2 }, { 5, 4 } } },
     5001            { { "sa", 6 }, { { 3, 2 } } },
     5002            { { "sa", 7 }, { { 3, 2 } } },
     5003            { { "sa", 8 }, { { 2, 1 } } },
     5004            { { "va", 1 }, { { 3, 2 } } },
     5005            { { "va", 2 }, { { 3, 2 } } }
     5006        },
     5007        true, ""
    47415008    }
    47425009};
Note: See TracChangeset for help on using the changeset viewer.