Changeset 3599 in CLRX


Ignore:
Timestamp:
Jan 9, 2018, 5:14:39 PM (8 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: First working testcase with loop. Fixed registering SSA replaces if no read before write in the start of the loop.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3597 r3599  
    543543                        { entry.blockIndex, false } });
    544544                   
    545                     if (res.second && sinfo.readBeforeWrite)
     545                    if (res.second)
    546546                    {
    547547                        // resolve conflict for this variable ssaId>
     
    551551                            // found, resolve by set ssaIdLast
    552552                            for (size_t ssaId: it->second)
    553                                 if (ssaId > sinfo.ssaIdBefore)
     553                            {
     554                                if (sinfo.readBeforeWrite && ssaId > sinfo.ssaIdBefore)
    554555                                    insertReplace(replacesMap, sentry.first, ssaId,
    555556                                                sinfo.ssaIdBefore);
     557                                else if (ssaId > sinfo.ssaIdFirst)
     558                                    insertReplace(replacesMap, sentry.first, ssaId,
     559                                                sinfo.ssaIdFirst);
     560                            }
    556561                        res.first->second.handled = true;
    557562                    }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3598 r3599  
    12371237        { },
    12381238        true, ""
     1239    },
     1240    {   // 6: simple loop
     1241        R"ffDXD(.regvar sa:s:8, va:v:8
     1242        s_mov_b32 sa[0], 0
     1243        s_mov_b32 sa[1], s10
     1244        v_mov_b32 va[0], v0
     1245        v_mov_b32 va[1], v1
     1246        v_mov_b32 va[3], 0
     1247loop:
     1248        ds_read_b32 va[2], va[3]
     1249        v_xor_b32 va[0], va[1], va[2]
     1250        v_not_b32 va[0], va[0]
     1251        v_xor_b32 va[0], 0xfff, va[0]
     1252        v_add_u32 va[1], vcc, 1001, va[1]
     1253       
     1254        s_add_u32 sa[0], sa[0], 1
     1255        s_cmp_lt_u32 sa[0], sa[1]
     1256        s_cbranch_scc1 loop
     1257       
     1258        s_endpgm
     1259)ffDXD",
     1260        {
     1261            { 0, 20,
     1262                { },
     1263                {
     1264                    { { "", 10 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1265                    { { "", 256 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1266                    { { "", 256+1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1267                    { { "sa", 0 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1268                    { { "sa", 1 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1269                    { { "va", 0 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1270                    { { "va", 1 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1271                    { { "va", 3 }, SSAInfo(0, 1, 1, 1, 1, false) }
     1272                }, false, false, false },
     1273            { 20, 64,
     1274                { { 1, false }, { 2, false } },
     1275                {
     1276                    { { "sa", 0 }, SSAInfo(1, 2, 2, 2, 1, true) },
     1277                    { { "sa", 1 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) },
     1278                    { { "va", 0 }, SSAInfo(1, 2, 2, 4, 3, false) },
     1279                    { { "va", 1 }, SSAInfo(1, 2, 2, 2, 1, true) },
     1280                    { { "va", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1281                    { { "va", 3 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) }
     1282                }, false, false, false },
     1283            { 64, 68,
     1284                { },
     1285                { }, false, false, true, }
     1286        },
     1287        {   // SSA replaces
     1288            { { "sa", 0 }, { { 2, 1 } } },
     1289            { { "va", 0 }, { { 4, 2 } } },
     1290            { { "va", 1 }, { { 2, 1 } } }
     1291        },
     1292        true, ""
    12391293    }
    12401294};
     
    13671421    assertValue("testAsmSSAData", testCaseName + "ssaReplacesSize",
    13681422                    testCase.ssaReplaces.size(), ssaReplacesMap.size());
    1369     Array<std::pair<TestSingleVReg, Array<SSAReplace> > > resSSAReplaces;
     1423    Array<std::pair<TestSingleVReg, Array<SSAReplace> > >
     1424                        resSSAReplaces(ssaReplacesMap.size());
    13701425    std::transform(ssaReplacesMap.begin(), ssaReplacesMap.end(),
    13711426            resSSAReplaces.begin(),
Note: See TracChangeset for help on using the changeset viewer.