Changeset 4150 in CLRX


Ignore:
Timestamp:
May 12, 2018, 8:19:54 AM (4 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Next working testcase with routine with end (s_endpgm) (createLivenesses).
Fixed registering svregs to vregsNotInAllRets (add only if last block have return).

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r4149 r4150  
    977977                        // fill up vregs for first return
    978978                        vregsInFirstReturn.insert(entry.first);
    979                 if (notFirstReturn)
     979                if (notFirstReturn && cblock.haveReturn)
    980980                    for (const AsmSingleVReg& vreg: vregsInFirstReturn)
    981981                        if (curSVRegMap.find(vreg) == curSVRegMap.end())
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4148 r4150  
    19921992        true, ""
    19931993    },
    1994     {   // 31 - routine with ends (s_endpgm, no return)
     1994    {   // 31 - routine with ends (s_endpgm, no return) 1
    19951995        R"ffDXD(.regvar sa:s:8, va:v:8
    19961996        s_mov_b32 sa[2], s4             # 0
     
    20352035                { { 5, 41 }, { 48, 61 }, { 68, 76 } }, // 11: sa[3]'0
    20362036                { { 61, 62 } }, // 12: sa[3]'1
     2037                { { 41, 42 } }, // 13: sa[3]'2
     2038                { { 0, 36 }, { 48, 61 }, { 68, 69 } }, // 14: sa[4]'0
     2039                { { 9, 41 } }  // 15: sa[5]'0
     2040            },
     2041            { },
     2042            { },
     2043            { }
     2044        },
     2045        { }, // linearDepMaps
     2046        {   // vidxRoutineMap
     2047            { 2, { { { 0, 1, 6, 7, 8, 9, 11, 12, 14 }, { }, { }, { } } } }
     2048        },
     2049        {   // vidxCallMap
     2050            { 0, { { { 15 }, { }, { }, { } } } }
     2051        },
     2052        true, ""
     2053    },
     2054    {   // 32 - routine with ends (s_endpgm, no return) 2
     2055        R"ffDXD(.regvar sa:s:8, va:v:8
     2056        s_mov_b32 sa[2], s4             # 0
     2057        s_mov_b32 sa[3], s5             # 4
     2058        s_mov_b32 sa[5], s5             # 8
     2059       
     2060        s_getpc_b64 s[2:3]              # 12
     2061        s_add_u32 s2, s2, routine-.     # 16
     2062        s_add_u32 s3, s3, routine-.+4   # 24
     2063        .cf_call routine
     2064        s_swappc_b64 s[0:1], s[2:3]     # 32
     2065       
     2066        s_lshl_b32 sa[2], sa[2], 3      # 36
     2067        s_lshl_b32 sa[3], sa[3], sa[5]  # 40
     2068        s_endpgm                        # 44
     2069       
     2070routine:
     2071        s_xor_b32 sa[2], sa[2], sa[4]   # 48
     2072        s_cbranch_scc1 bb1              # 52
     2073       
     2074        s_min_u32 sa[2], sa[2], sa[4]   # 56
     2075        s_xor_b32 sa[3], sa[3], sa[4]   # 60
     2076        .cf_ret
     2077        s_setpc_b64 s[0:1]              # 64
     2078       
     2079bb1:    s_and_b32 sa[2], sa[2], sa[4]   # 68
     2080        s_endpgm                        # 72
     2081)ffDXD",
     2082        {   // livenesses
     2083            {   // for SGPRs
     2084                { { 33, 36 }, { 48, 65 } }, // 0: S0
     2085                { { 33, 36 }, { 48, 65 } }, // 1: S1
     2086                { { 13, 33 } }, // 2: S2
     2087                { { 13, 33 } }, // 3: S3
     2088                { { 0, 1 } }, // 4: S4
     2089                { { 0, 9 } }, // 5: S5
     2090                { { 1, 36 }, { 48, 49 } }, // 6: sa[2]'0
     2091                { { 49, 57 }, { 68, 69 } }, // 7: sa[2]'1
     2092                { { 36, 37 }, { 57, 68 } }, // 8: sa[2]'2
     2093                { { 69, 70 } }, // 9: sa[2]'3
     2094                { { 37, 38 } }, // 10: sa[2]'4
     2095                { { 5, 36 }, { 48, 61 } }, // 11: sa[3]'0
     2096                { { 36, 41 }, { 61, 68 } }, // 12: sa[3]'1
    20372097                { { 41, 42 } }, // 13: sa[3]'2
    20382098                { { 0, 36 }, { 48, 61 }, { 68, 69 } }, // 14: sa[4]'0
Note: See TracChangeset for help on using the changeset viewer.