Changeset 3607 in CLRX


Ignore:
Timestamp:
Jan 10, 2018, 8:10:30 PM (11 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: resolveSSAConflict: Mark regvar handled only if conflict found and inserted to ssaReplaces.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3605 r3607  
    1919
    2020#include <CLRX/Config.h>
     21//#include <iostream>
    2122#include <stack>
    2223#include <deque>
     
    531532            {
    532533                visited[entry.blockIndex] = true;
     534                //std::cout << "  resolv: " << entry.blockIndex << std::endl;
    533535                for (auto& sentry: cblock.ssaInfoMap)
    534536                {
     
    537539                        { entry.blockIndex, false } });
    538540                   
    539                     if (res.second && sinfo.readBeforeWrite)
     541                    if (res.second && !res.first->second.handled && sinfo.readBeforeWrite)
    540542                    {
    541543                        // resolve conflict for this variable ssaId>.
     
    548550                            for (size_t ssaId: it->second)
    549551                                if (ssaId > sinfo.ssaIdBefore)
     552                                {
     553                                    //std::cout << "  insertreplace" << std::endl;
    550554                                    insertReplace(replacesMap, sentry.first, ssaId,
    551555                                                sinfo.ssaIdBefore);
    552                         res.first->second.handled = true;
     556                                    res.first->second.handled = true;
     557                                }
     558                                /*else
     559                                    std::cout << "  noinsertreplace: " <<
     560                                        ssaId << "," << sinfo.ssaIdBefore << std::endl;*/
    553561                    }
    554562                }
     
    595603                    toResolveMap.erase(it);
    596604            }
     605            //std::cout << "  popresolv" << std::endl;
    597606            flowStack.pop_back();
    598607        }
     
    760769            if (!visited[entry.blockIndex])
    761770            {
     771                //std::cout << "proc: " << entry.blockIndex << std::endl;
    762772                visited[entry.blockIndex] = true;
    763773               
     
    933943                    curSSAIdMap[ssaEntry.first] = it->second;
    934944            }
     945            //std::cout << "pop" << std::endl;
    935946            flowStack.pop_back();
    936947        }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3606 r3607  
    17891789            { { "sa", 2 }, { { 5, 1 } } },
    17901790            { { "sa", 3 }, { { 6, 1 } } }
     1791        },
     1792        true, ""
     1793    },
     1794    {   // 11 - with trap: first branch have unhandled SSA replace
     1795        R"ffDXD(.regvar sa:s:8, va:v:8
     1796        # block 0
     1797        s_mov_b32 sa[0], s2
     1798        s_mov_b32 sa[1], s3
     1799        s_mov_b32 sa[2], s4
     1800        s_mov_b32 sa[3], s5
     1801        s_cmp_lt_u32 s0, s1
     1802        s_cbranch_scc1 bb1
     1803       
     1804        # bb0
     1805bb0:    s_add_u32 sa[3], sa[3], s1      # SSAID replace
     1806        s_add_u32 sa[3], sa[3], s2
     1807        s_endpgm
     1808       
     1809bb3:    s_add_u32 sa[3], sa[3], s2      # no SSAID replace (this same SSAID)
     1810        s_endpgm
     1811       
     1812bb1:    s_add_u32 sa[3], sa[3], s2
     1813bb1x:   .cf_jump bb3, bb2, bb4
     1814        s_setpc_b64 s[0:1]
     1815
     1816bb2:    s_branch bb0
     1817       
     1818bb4:    s_branch bb1x       # jump to point to resolve conflict (bb1x)
     1819)ffDXD",
     1820        {
     1821            // block 0
     1822            { 0, 24,
     1823                { { 1, false }, { 3, false } },
     1824                {
     1825                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1826                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1827                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1828                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1829                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1830                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1831                    { { "sa", 0 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1832                    { { "sa", 1 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1833                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1834                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) }
     1835                }, false, false, false },
     1836            // block 1
     1837            { 24, 36,
     1838                { },
     1839                {
     1840                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1841                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1842                    { { "sa", 3 }, SSAInfo(1, 2, 2, 3, 2, true) }
     1843                }, false, false, true },
     1844            // block 2
     1845            { 36, 44,
     1846                { },
     1847                {
     1848                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1849                    { { "sa", 3 }, SSAInfo(4, 5, 5, 5, 1, true) }
     1850                }, false, false, true },
     1851            // block 3 - bb1 - main part
     1852            { 44, 48,
     1853                { },
     1854                {
     1855                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1856                    { { "sa", 3 }, SSAInfo(1, 4, 4, 4, 1, true) }
     1857                }, false, false, false },
     1858            // block 4 - bb1x - jmp part
     1859            { 48, 52,
     1860                { { 2, false }, { 5, false }, { 6, false } },
     1861                {
     1862                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1863                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) }
     1864                }, false, false, true },
     1865            // block 5
     1866            { 52, 56,
     1867                { { 1, false } },
     1868                { }, false, false, true },
     1869            // block 6
     1870            { 56, 60,
     1871                { { 4, false } },
     1872                { }, false, false, true }
     1873        },
     1874        {
     1875            { { "sa", 3 }, { { 4, 1 }, { 4, 1 } } }
    17911876        },
    17921877        true, ""
Note: See TracChangeset for help on using the changeset viewer.