Changeset 3896 in CLRX


Ignore:
Timestamp:
Mar 12, 2018, 8:49:31 PM (4 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Stupid segfault in while passing by loop inside routines. Add new testcase (loop inside routines).

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3886 r3896  
    14621462                    if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
    14631463                    {   // leave from loop point
     1464                        std::cout << "   loopfound " << entry.blockIndex << std::endl;
    14641465                        auto loopsit = loopSSAIdMap.find(entry.blockIndex);
    14651466                        if (loopsit != loopSSAIdMap.end())
     1467                        {
     1468                            std::cout << "   loopssaIdMap: " <<
     1469                                    entry.blockIndex << std::endl;
    14661470                            joinLastSSAIdMap(subrData.lastSSAIdMap,
    14671471                                    loopsit->second.ssaIdMap, subrData, true);
     1472                        }
    14681473                    }
    14691474                    subroutinesCache.put(entry.blockIndex, subrData);
     
    15911596                if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
    15921597                {   // leave from loop point
     1598                    std::cout << "   loopfound: " << entry.blockIndex << std::endl;
    15931599                    if (loopsit != loopSSAIdMap.end())
     1600                    {
     1601                        std::cout << "   loopssaIdMap: " << entry.blockIndex << std::endl;
    15941602                        joinLastSSAIdMap(subrData.lastSSAIdMap, loopsit->second.ssaIdMap,
    15951603                                         subrData, true);
     1604                    }
    15961605                }
    15971606                subroutinesCache.put(entry.blockIndex, subrData);
    15981607            }
    1599             if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
     1608            if (loopBlocks.find(entry.blockIndex) != loopBlocks.end() &&
     1609                    loopsit != loopSSAIdMap.end())
    16001610                // mark that loop has passed fully
    16011611                loopsit->second.passed = true;
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase2.cpp

    r3895 r3896  
    18321832        true, ""
    18331833    },
     1834    {   // 11 - simple routine with loop
     1835        R"ffDXD(.regvar sa:s:10, va:v:8
     1836        s_mov_b32 sa[2], s4
     1837        s_mov_b32 sa[3], s5
     1838        s_mov_b32 sa[4], s6
     1839        .cf_call routine
     1840        s_swappc_b64 s[0:1], s[2:3]
     1841       
     1842        s_xor_b32 sa[2], sa[2], sa[0]
     1843        s_xor_b32 sa[3], sa[3], sa[0]
     1844        s_xor_b32 sa[4], sa[4], sa[1]
     1845       
     1846        .cf_call routine
     1847        s_swappc_b64 s[0:1], s[2:3]
     1848       
     1849        s_xor_b32 sa[2], sa[2], sa[0]
     1850        s_xor_b32 sa[3], sa[3], sa[0]
     1851        s_xor_b32 sa[4], sa[4], sa[1]
     1852        s_endpgm
     1853       
     1854routine:
     1855        s_xor_b32 sa[2], sa[2], sa[0]
     1856        s_xor_b32 sa[3], sa[3], sa[0]
     1857       
     1858loop0:  s_xor_b32 sa[2], sa[2], sa[0]
     1859        s_xor_b32 sa[3], sa[3], sa[0]
     1860        s_xor_b32 sa[4], sa[4], sa[1]
     1861        s_cbranch_scc0 loop0
     1862       
     1863        s_xor_b32 sa[4], sa[4], sa[1]
     1864        s_xor_b32 sa[2], sa[2], sa[0]
     1865        .cf_ret
     1866        s_setpc_b64 s[0:1]
     1867)ffDXD",
     1868        {
     1869            {   // block 0 - start
     1870                0, 16,
     1871                { { 3, true } },
     1872                {
     1873                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     1874                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     1875                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1876                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1877                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1878                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1879                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1880                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1881                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1882                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) }
     1883                }, true, false, false },
     1884            {   // block 1 - after routine call
     1885                16, 32,
     1886                { { 3, true } },
     1887                {
     1888                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     1889                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     1890                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1891                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1892                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1893                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1894                    { { "sa", 2 }, SSAInfo(4, 5, 5, 5, 1, true) },
     1895                    { { "sa", 3 }, SSAInfo(3, 4, 4, 4, 1, true) },
     1896                    { { "sa", 4 }, SSAInfo(3, 4, 4, 4, 1, true) }
     1897                }, true, false, false },
     1898            {   // block 2 - end
     1899                32, 48,
     1900                { },
     1901                {
     1902                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1903                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1904                    { { "sa", 2 }, SSAInfo(4, 6, 6, 6, 1, true) },
     1905                    { { "sa", 3 }, SSAInfo(3, 5, 5, 5, 1, true) },
     1906                    { { "sa", 4 }, SSAInfo(3, 5, 5, 5, 1, true) }
     1907                }, false, false, true },
     1908            {   // block 3 - routine
     1909                48, 56,
     1910                { },
     1911                {
     1912                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1913                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     1914                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) }
     1915                }, false, false, false },
     1916            {   // block 4 - loop0
     1917                56, 72,
     1918                { { 4, false }, { 5, false } },
     1919                {
     1920                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1921                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1922                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) },
     1923                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) },
     1924                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
     1925                }, false, false, false },
     1926            {   // block 5 - routine end
     1927                72, 84,
     1928                { },
     1929                {
     1930                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1931                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1932                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1933                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     1934                    { { "sa", 2 }, SSAInfo(3, 4, 4, 4, 1, true) },
     1935                    { { "sa", 4 }, SSAInfo(2, 3, 3, 3, 1, true) }
     1936                }, false, true, true }
     1937        },
     1938        {   // SSA replaces
     1939            { { "sa", 2 }, { { 3, 2 }, { 5, 1 } } },
     1940            { { "sa", 3 }, { { 3, 2 }, { 4, 1 } } },
     1941            { { "sa", 4 }, { { 2, 1 }, { 4, 1 } } }
     1942        },
     1943        true, ""
     1944    },
    18341945    { nullptr }
    18351946};
Note: See TracChangeset for help on using the changeset viewer.