Changeset 4178 in CLRX


Ignore:
Timestamp:
May 16, 2018, 9:01:43 PM (4 days ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: The first working testcase with '.rvlin' pseudo-ops.
Fixed segfaults caused by wrong ssaInfo collecting and filling (for reg user usage) and wrong getting linearDeps while creating livenesses.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r4177 r4178  
    13941394                        // collecting linear deps for instruction
    13951395                        std::vector<AsmRegVarLinearDep> instrLinDeps;
    1396                         AsmRegVarLinearDep linDep = { SIZE_MAX, nullptr, 0, 0 };
     1396                        AsmRegVarLinearDep linDep = { 0, nullptr, 0, 0 };
     1397                        bool haveLdep = false;
    13971398                        while (linDep.offset < oldOffset && linDepHandler.hasNext())
     1399                        {
    13981400                            linDep = linDepHandler.nextLinearDep();
     1401                            haveLdep = true;
     1402                        }
    13991403                        // if found
    1400                         while (linDep.offset == oldOffset)
    1401                         {
    1402                             // just put
    1403                             instrLinDeps.push_back(linDep);
    1404                             if (linDepHandler.hasNext())
    1405                                 linDep = linDepHandler.nextLinearDep();
    1406                             else // no data
    1407                                 break;
    1408                         }
     1404                        if (haveLdep)
     1405                            while (linDep.offset == oldOffset)
     1406                            {
     1407                                // just put
     1408                                instrLinDeps.push_back(linDep);
     1409                                if (linDepHandler.hasNext())
     1410                                    linDep = linDepHandler.nextLinearDep();
     1411                                else // no data
     1412                                    break;
     1413                            }
    14091414                        // get linear deps and equal to
    14101415                        cxbyte lDeps[16];
  • CLRadeonExtender/trunk/amdasm/AsmRegAllocSSAData.cpp

    r4172 r4178  
    14411441                sinfo.lastPos = rvu.offset;
    14421442               
    1443                 if ((rvu.rwFlags & ASMRVU_READ) != 0 && (sinfo.ssaIdChange == 0 ||
     1443                if ((rvu.rwFlags != ASMRVU_WRITE || rvu.regField==ASMFIELD_NONE) &&
     1444                    (sinfo.ssaIdChange == 0 ||
    14441445                    // if first write RVU instead read RVU
    14451446                    (sinfo.ssaIdChange == 1 && sinfo.firstPos==rvu.offset)))
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4177 r4178  
    28462846        true, ""
    28472847    },
    2848 #if 0
    28492848    {   // 43 - user define linear deps (by '.rvlin')
    28502849        R"ffDXD(.regvar sa:s:8, va:v:8
    28512850        .rvlin sa[2:7]
    28522851        .usereg sa[2:7]:r
    2853         s_mov_b32 sa[2], s4               # 0
    2854         s_cbranch_scc0 b1                       # 8
     2852        s_mov_b32 sa[2], s4     # 0
     2853        s_cbranch_scc0 b1       # 4
    28552854b0:     .rvlin sa[2:7]
    28562855        .usereg sa[2:7]:r
    2857         s_mov_b32 s1, s1
    2858         s_endpgm
     2856        s_mov_b32 s1, s1        # 8
     2857        s_endpgm                # 12
    28592858b1:     .rvlin va[3:6]
    28602859        .usereg va[3:6]:w
    2861         s_mov_b32 s1, s1
    2862         s_endpgm
    2863 )ffDXD",
    2864         {
    2865         },
    2866         { },
    2867         { },
    2868         { },
     2860        s_mov_b32 s1, s1        # 16
     2861        s_endpgm                # 20
     2862)ffDXD",
     2863        {   // livenesses
     2864            {   // for SGPRs
     2865                { { 0, 10 }, { 16, 18 } }, // 0: S1
     2866                { { 0, 1 } }, // 1: S4
     2867                { { 0, 1 } }, // 2: sa[2]'0
     2868                { { 1, 9 } }, // 3: sa[2]'1
     2869                { { 0, 9 } }, // 4: sa[3]'0
     2870                { { 0, 9 } }, // 5: sa[4]'0
     2871                { { 0, 9 } }, // 5: sa[5]'0
     2872                { { 0, 9 } }, // 6: sa[6]'0
     2873                { { 0, 9 } }  // 7: sa[7]'0
     2874            },
     2875            {   // for VGPRs
     2876                { { 0, 8 }, { 16, 17 } }, // 0: sa[3]'0
     2877                { { 0, 8 }, { 16, 17 } }, // 0: sa[4]'0
     2878                { { 0, 8 }, { 16, 17 } }, // 0: sa[5]'0
     2879                { { 0, 8 }, { 16, 17 } }  // 0: sa[6]'0
     2880            },
     2881            { },
     2882            { }
     2883        },
     2884        {   // linearDepMaps
     2885            {   // for SGPRs
     2886                { 3, { 0, { }, { 4 } } },
     2887                { 4, { 0, { 3 }, { 5 } } },
     2888                { 5, { 0, { 4 }, { 6 } } },
     2889                { 6, { 0, { 5 }, { 7 } } },
     2890                { 7, { 0, { 6 }, { 8 } } },
     2891                { 8, { 0, { 7 }, { } } }
     2892            },
     2893            {   // for VGPRs
     2894                { 0, { 0, { }, { 1 } } },
     2895                { 1, { 0, { 0 }, { 2 } } },
     2896                { 2, { 0, { 1 }, { 3 } } },
     2897                { 3, { 0, { 2 }, { } } }
     2898            },
     2899            { },
     2900            { }
     2901        },
     2902        { }, // vidxRoutineMap
     2903        { }, // vidxCallMap
    28692904        true, ""
    28702905    }
    2871 #endif
    28722906};
    28732907
Note: See TracChangeset for help on using the changeset viewer.