Changeset 3898 in CLRX


Ignore:
Timestamp:
Mar 13, 2018, 8:19:37 PM (7 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Add new testcases: second to test using loops inside routine.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase2.cpp

    r3897 r3898  
    19391939        true, ""
    19401940    },
     1941    {
     1942        R"ffDXD(.regvar sa:s:10, va:v:8
     1943        s_mov_b32 sa[2], s4
     1944        s_mov_b32 sa[3], s5
     1945        .cf_call routine
     1946        s_swappc_b64 s[0:1], s[2:3]
     1947       
     1948        s_xor_b32 sa[2], sa[2], sa[0]
     1949        s_xor_b32 sa[3], sa[3], sa[1]
     1950        .cf_call routine2
     1951        s_swappc_b64 s[0:1], s[2:3]
     1952       
     1953        .cf_call routine
     1954        s_swappc_b64 s[0:1], s[2:3]
     1955        s_endpgm
     1956       
     1957routine:
     1958        s_xor_b32 sa[2], sa[2], sa[0]
     1959        s_xor_b32 sa[3], sa[3], sa[1]
     1960        s_cbranch_scc1 aa0
     1961       
     1962        s_xor_b32 sa[2], sa[2], sa[0]
     1963        s_xor_b32 sa[3], sa[3], sa[1]
     1964        .cf_ret
     1965        s_setpc_b64 s[0:1]
     1966       
     1967aa0:    s_xor_b32 sa[2], sa[2], sa[0]
     1968        s_xor_b32 sa[3], sa[3], sa[1]
     1969        .cf_ret
     1970        s_setpc_b64 s[0:1]
     1971       
     1972routine2:
     1973        s_and_b32 sa[2], sa[2], sa[0]
     1974        s_xor_b32 sa[3], sa[3], sa[1]
     1975        s_cbranch_scc1 aa1
     1976       
     1977        s_xor_b32 sa[2], sa[2], sa[0]
     1978        s_and_b32 sa[3], sa[3], sa[1]
     1979        .cf_ret
     1980        s_setpc_b64 s[0:1]
     1981       
     1982aa1:    s_and_b32 sa[2], sa[2], sa[0]
     1983        s_xor_b32 sa[3], sa[3], sa[1]
     1984        .cf_ret
     1985        s_setpc_b64 s[0:1]
     1986)ffDXD",
     1987        {
     1988            {   // block 0 - start
     1989                0, 12,
     1990                { { 4, true } },
     1991                {
     1992                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     1993                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     1994                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1995                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1996                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1997                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1998                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1999                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) }
     2000                }, true, false, false },
     2001            {   // block 1 - after routine call
     2002                12, 24,
     2003                { { 7, true } },
     2004                {
     2005                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2006                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2007                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2008                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2009                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2010                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2011                    { { "sa", 2 }, SSAInfo(3, 5, 5, 5, 1, true) },
     2012                    { { "sa", 3 }, SSAInfo(3, 5, 5, 5, 1, true) }
     2013                }, true, false, false },
     2014            {   // block 2 - after routine2 call
     2015                24, 28,
     2016                { { 4, true } },
     2017                {
     2018                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2019                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2020                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2021                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) }
     2022                }, true, false, false },
     2023            {   // block 3 - end
     2024                28, 32,
     2025                { },
     2026                { },
     2027                false, false, true },
     2028            {   // block 4 - routine
     2029                32, 44,
     2030                { { 5, false }, { 6, false } },
     2031                {
     2032                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2033                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2034                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     2035                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2036                }, false, false, false },
     2037            {   // block 5 - first fork
     2038                44, 56,
     2039                { },
     2040                {
     2041                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2042                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2043                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2044                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2045                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) },
     2046                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2047                }, false, true, true },
     2048            {   // block 6 - aa0 - second fork
     2049                56, 68,
     2050                { },
     2051                {
     2052                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2053                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2054                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2055                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2056                    { { "sa", 2 }, SSAInfo(2, 4, 4, 4, 1, true) },
     2057                    { { "sa", 3 }, SSAInfo(2, 4, 4, 4, 1, true) }
     2058                }, false, true, true },
     2059            {   // block 7 - routine2
     2060                68, 80,
     2061                { { 8, false }, { 9, false } },
     2062                {
     2063                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2064                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2065                    { { "sa", 2 }, SSAInfo(5, 6, 6, 6, 1, true) },
     2066                    { { "sa", 3 }, SSAInfo(5, 6, 6, 6, 1, true) }
     2067                }, false, false, false },
     2068            {   // block 8 - first fork
     2069                80, 92,
     2070                { },
     2071                {
     2072                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2073                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2074                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2075                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2076                    { { "sa", 2 }, SSAInfo(6, 7, 7, 7, 1, true) },
     2077                    { { "sa", 3 }, SSAInfo(6, 7, 7, 7, 1, true) }
     2078                }, false, true, true },
     2079            {   // block 9 - aa1 - second fork
     2080                92, 104,
     2081                { },
     2082                {
     2083                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2084                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2085                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2086                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2087                    { { "sa", 2 }, SSAInfo(6, 8, 8, 8, 1, true) },
     2088                    { { "sa", 3 }, SSAInfo(6, 8, 8, 8, 1, true) }
     2089                }, false, true, true }
     2090        },
     2091        {   // SSA replaces
     2092            { { "sa", 2 }, { { 4, 3 }, { 7, 1 }, { 8, 1 } } },
     2093            { { "sa", 3 }, { { 4, 3 }, { 7, 1 }, { 8, 1 } } }
     2094        },
     2095        true, ""
     2096    },
     2097    {   // 11 - routine with complex loop used twice
     2098        R"ffDXD(.regvar sa:s:10, va:v:8
     2099        s_mov_b32 sa[2], s4
     2100        s_mov_b32 sa[3], s5
     2101        s_mov_b32 sa[4], s6
     2102        s_mov_b32 sa[5], s7
     2103        s_mov_b32 sa[6], s8
     2104        .cf_call routine
     2105        s_swappc_b64 s[0:1], s[2:3]
     2106       
     2107        s_xor_b32 sa[2], sa[2], sa[0]
     2108        s_xor_b32 sa[3], sa[3], sa[0]
     2109        s_xor_b32 sa[4], sa[4], sa[1]
     2110        s_xor_b32 sa[5], sa[5], sa[1]
     2111        s_xor_b32 sa[6], sa[6], sa[0]
     2112        s_endpgm
     2113       
     2114routine:
     2115        s_xor_b32 sa[2], sa[2], sa[0]
     2116        s_xor_b32 sa[3], sa[3], sa[0]
     2117        s_xor_b32 sa[5], sa[5], sa[0]
     2118        s_cbranch_vccz  subr1
     2119       
     2120loop0:  s_xor_b32 sa[2], sa[2], sa[0]
     2121        s_cbranch_scc0 end1
     2122       
     2123        s_xor_b32 sa[3], sa[3], sa[0]
     2124        s_cbranch_scc0 end2
     2125       
     2126        s_xor_b32 sa[4], sa[4], sa[1]
     2127        s_cbranch_scc0 end3
     2128       
     2129        s_xor_b32 sa[5], sa[5], sa[1]
     2130        s_branch loop0
     2131       
     2132end1:   s_xor_b32 sa[2], sa[2], sa[0]
     2133        .cf_ret
     2134        s_setpc_b64 s[0:1]
     2135
     2136end2:   s_xor_b32 sa[3], sa[3], sa[0]
     2137        .cf_ret
     2138        s_setpc_b64 s[0:1]
     2139
     2140end3:   s_xor_b32 sa[4], sa[4], sa[0]
     2141        .cf_ret
     2142        s_setpc_b64 s[0:1]
     2143
     2144subr1:
     2145        s_xor_b32 sa[2], sa[2], sa[0]
     2146        s_xor_b32 sa[3], sa[3], sa[0]
     2147        s_xor_b32 sa[4], sa[4], sa[0]
     2148        s_xor_b32 sa[5], sa[5], sa[1]
     2149        s_xor_b32 sa[6], sa[6], sa[0]
     2150        s_cbranch_execnz loop0
     2151
     2152swubr2:
     2153        s_xor_b32 sa[2], sa[2], sa[0]
     2154        s_xor_b32 sa[3], sa[3], sa[0]
     2155        s_xor_b32 sa[4], sa[4], sa[1]
     2156        s_xor_b32 sa[5], sa[5], sa[1]
     2157        s_xor_b32 sa[6], sa[6], sa[0]
     2158        .cf_ret
     2159        s_setpc_b64 s[0:1]
     2160)ffDXD",
     2161        {
     2162            {   // block 0 - start
     2163                0, 24,
     2164                { { 2, true } },
     2165                {
     2166                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2167                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     2168                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2169                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2170                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2171                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2172                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2173                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2174                    { { "", 8 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2175                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2176                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2177                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2178                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
     2179                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) }
     2180                }, true, false, false },
     2181            {   // block 1 - end
     2182                24, 48,
     2183                { },
     2184                {
     2185                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2186                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2187                    { { "sa", 2 }, SSAInfo(3, 7, 7, 7, 1, true) },
     2188                    { { "sa", 3 }, SSAInfo(2, 7, 7, 7, 1, true) },
     2189                    { { "sa", 4 }, SSAInfo(1, 6, 6, 6, 1, true) },
     2190                    { { "sa", 5 }, SSAInfo(2, 6, 6, 6, 1, true) },
     2191                    { { "sa", 6 }, SSAInfo(1, 4, 4, 4, 1, true) }
     2192                }, false, false, true },
     2193            {   // block 2 - routine
     2194                48, 64,
     2195                { { 3, false }, { 10, false } },
     2196                {
     2197                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2198                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     2199                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) },
     2200                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2201                }, false, false, false },
     2202            {   // block 3 - loop0
     2203                64, 72,
     2204                { { 4, false }, { 7, false } },
     2205                {
     2206                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2207                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2208                }, false, false, false },
     2209            {   // block 4 - to end2
     2210                72, 80,
     2211                { { 5, false }, { 8, false } },
     2212                {
     2213                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2214                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2215                }, false, false, false },
     2216            {   // block 5 - to end3
     2217                80, 88,
     2218                { { 6, false }, { 9, false } },
     2219                {
     2220                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2221                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2222                }, false, false, false },
     2223            {   // block 6 - loop end
     2224                88, 96,
     2225                { { 3, false } },
     2226                {
     2227                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2228                    { { "sa", 5 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2229                }, false, false, true },
     2230            {   // block 7 - end1
     2231                96, 104,
     2232                { },
     2233                {
     2234                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2235                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2236                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2237                    { { "sa", 2 }, SSAInfo(3, 4, 4, 4, 1, true) }
     2238                }, false, true, true },
     2239            {   // block 8 - end2
     2240                104, 112,
     2241                { },
     2242                {
     2243                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2244                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2245                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2246                    { { "sa", 3 }, SSAInfo(3, 4, 4, 4, 1, true) }
     2247                }, false, true, true },
     2248            {   // block 9 - end3
     2249                112, 120,
     2250                { },
     2251                {
     2252                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2253                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2254                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2255                    { { "sa", 4 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2256                }, false, true, true },
     2257            {   // block 10 - subr1
     2258                120, 144,
     2259                { { 3, false }, { 11, false } },
     2260                {
     2261                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2262                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2263                    { { "sa", 2 }, SSAInfo(2, 5, 5, 5, 1, true) },
     2264                    { { "sa", 3 }, SSAInfo(2, 5, 5, 5, 1, true) },
     2265                    { { "sa", 4 }, SSAInfo(1, 4, 4, 4, 1, true) },
     2266                    { { "sa", 5 }, SSAInfo(2, 4, 4, 4, 1, true) },
     2267                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) }
     2268                }, false, false, false },
     2269            {   // block 11 - subr2
     2270                144, 168,
     2271                { },
     2272                {
     2273                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2274                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     2275                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2276                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     2277                    { { "sa", 2 }, SSAInfo(5, 6, 6, 6, 1, true) },
     2278                    { { "sa", 3 }, SSAInfo(5, 6, 6, 6, 1, true) },
     2279                    { { "sa", 4 }, SSAInfo(4, 5, 5, 5, 1, true) },
     2280                    { { "sa", 5 }, SSAInfo(4, 5, 5, 5, 1, true) },
     2281                    { { "sa", 6 }, SSAInfo(2, 3, 3, 3, 1, true) }
     2282                }, false, true, true }
     2283        },
     2284        {   // SSA replaces
     2285            { { "sa", 2 }, { { 4, 3 }, { 6, 3 }, { 3, 2 }, { 5, 2 } } },
     2286            { { "sa", 3 }, { { 3, 2 }, { 4, 2 }, { 5, 2 }, { 6, 2 } } },
     2287            { { "sa", 4 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 } } },
     2288            { { "sa", 5 }, { { 3, 2 }, { 4, 2 }, { 5, 2 } } },
     2289            { { "sa", 6 }, { { 2, 1 }, { 3, 1 } } }
     2290        },
     2291        true, ""
     2292    },
    19412293    { nullptr }
    19422294};
Note: See TracChangeset for help on using the changeset viewer.