Changeset 3604 in CLRX


Ignore:
Timestamp:
Jan 9, 2018, 11:01:59 PM (5 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Add more complex testcase with nested loop and conditions.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3602 r3604  
    545545                    if (res.second && sinfo.readBeforeWrite)
    546546                    {
    547                         // resolve conflict for this variable ssaId>
     547                        // resolve conflict for this variable ssaId>.
     548                        // only if in previous block previous SSAID is
     549                        // read before all writes
    548550                        auto it = stackVarMap.find(sentry.first);
    549551                       
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3603 r3604  
    12381238        true, ""
    12391239    },
    1240     {   // 6: simple loop
     1240    {   // 6 - simple loop
    12411241        R"ffDXD(.regvar sa:s:8, va:v:8
    12421242        s_mov_b32 sa[0], 0
     
    14311431            { { "sa", 1 }, { { 7, 1 }, { 8, 1 } } },
    14321432            { { "sa", 4 }, { { 4, 1 } } }
     1433        },
     1434        true, ""
     1435    },
     1436    {   // 8 - two loops, one nested
     1437        R"ffDXD(.regvar sa:s:8, va:v:8
     1438        s_mov_b64 sa[0:1], 0
     1439        v_mov_b32 va[0], v1
     1440        v_mov_b32 va[1], v2
     1441        v_mov_b32 va[2], v3
     1442       
     1443loop0:  v_lshrrev_b32 va[0], va[2], va[0]
     1444        v_xor_b32 va[0], va[1], va[0]
     1445       
     1446        s_xor_b32 sa[3], sa[0], 0x5
     1447        s_cmp_eq_u32 sa[3], 9
     1448        s_cbranch_scc1 bb0
     1449       
     1450        v_and_b32 va[0], -15, va[0]
     1451        v_sub_u32 va[0], vcc, -13, va[0]
     1452        s_branch loop1start
     1453       
     1454bb0:    v_xor_b32 va[0], 15, va[0]
     1455        v_add_u32 va[0], vcc, 17, va[0]
     1456loop1start:
     1457        s_mov_b32 sa[1], sa[0]
     1458       
     1459loop1:  v_add_u32 va[2], vcc, va[2], va[1]
     1460        v_xor_b32 va[2], 0xffaaaa, va[0]
     1461       
     1462        s_xor_b32 sa[2], sa[1], 0x5
     1463        s_cmp_eq_u32 sa[2], 7
     1464        s_cbranch_scc1 bb1
     1465       
     1466        v_sub_u32 va[1], vcc, 5, va[1]
     1467        v_sub_u32 va[2], vcc, 7, va[2]
     1468        s_branch loop1end
     1469       
     1470bb1:    v_xor_b32 va[1], 15, va[1]
     1471        v_xor_b32 va[2], 17, va[2]
     1472loop1end:
     1473       
     1474        s_add_u32 sa[1], sa[1], 1
     1475        s_cmp_lt_u32 sa[1], 52
     1476        s_cbranch_scc1 loop1
     1477       
     1478        v_xor_b32 va[0], va[1], va[0]
     1479        v_xor_b32 va[0], va[2], va[0]
     1480        v_xor_b32 va[0], sa[0], va[0]
     1481       
     1482        s_add_u32 sa[0], sa[0], 1
     1483        s_cmp_lt_u32 sa[0], 33
     1484        s_cbranch_scc1 loop0
     1485       
     1486        s_endpgm
     1487)ffDXD",
     1488        {
     1489            // block 0
     1490            { 0, 16,
     1491                { },
     1492                {
     1493                    { { "", 256+1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1494                    { { "", 256+2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1495                    { { "", 256+3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     1496                    { { "sa", 0 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1497                    { { "sa", 1 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1498                    { { "va", 0 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1499                    { { "va", 1 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1500                    { { "va", 2 }, SSAInfo(0, 1, 1, 1, 1, false) }
     1501                }, false, false, false },
     1502            // block 1 (loop0)
     1503            { 16, 36,
     1504                { { 2, false }, { 3, false } },
     1505                {
     1506                    { { "sa", 0 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) },
     1507                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1508                    { { "va", 0 }, SSAInfo(1, 2, 2, 3, 2, true) },
     1509                    { { "va", 1 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) },
     1510                    { { "va", 2 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) }
     1511                }, false, false, false },
     1512            // block 2 (to bb0)
     1513            { 36, 48,
     1514                { { 4, false } },
     1515                {
     1516                    { { "va", 0 }, SSAInfo(3, 4, 4, 5, 2, true) }
     1517                }, false, false, true },
     1518            // block 3 (bb0)
     1519            { 48, 56,
     1520                { },
     1521                {
     1522                    { { "va", 0 }, SSAInfo(3, 9, 9, 10, 2, true) }
     1523                }, false, false, false },
     1524            // block 4 (loop1start)
     1525            { 56, 60,
     1526                { },
     1527                {
     1528                    { { "sa", 0 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) },
     1529                    { { "sa", 1 }, SSAInfo(1, 2, 2, 2, 1, false) }
     1530                }, false, false, false },
     1531            // block 5 (loop1)
     1532            { 60, 84,
     1533                { { 6, false }, { 7, false } },
     1534                {
     1535                    { { "sa", 1 }, SSAInfo(2, SIZE_MAX, 3, SIZE_MAX, 0, true) },
     1536                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     1537                    { { "va", 0 }, SSAInfo(5, SIZE_MAX, 6, SIZE_MAX, 0, true) },
     1538                    { { "va", 1 }, SSAInfo(1, SIZE_MAX, 2, SIZE_MAX, 0, true) },
     1539                    { { "va", 2 }, SSAInfo(1, 2, 2, 3, 2, true) }
     1540                }, false, false, false },
     1541            // block 6 (to bb1)
     1542            { 84, 96,
     1543                { { 8, false } },
     1544                {
     1545                    { { "va", 1 }, SSAInfo(1, 2, 2, 2, 1, true) },
     1546                    { { "va", 2 }, SSAInfo(3, 4, 4, 4, 1, true) }
     1547                }, false, false, true },
     1548            // block 7 (b11)
     1549            { 96, 104,
     1550                { },
     1551                {
     1552                    { { "va", 1 }, SSAInfo(1, 3, 3, 3, 1, true) },
     1553                    { { "va", 2 }, SSAInfo(3, 5, 5, 5, 1, true) }
     1554                }, false, false, false },
     1555            // block 8 (loop1end)
     1556            { 104, 116,
     1557                { { 5, false }, { 9, false } },
     1558                {
     1559                    { { "sa", 1 }, SSAInfo(2, 3, 3, 3, 1, true) }
     1560                }, false, false, false },
     1561            // block 9 (loop0end)
     1562            { 116, 140,
     1563                { { 1, false }, { 10, false } },
     1564                {
     1565                    { { "sa", 0 }, SSAInfo(1, 2, 2, 2, 1, true) },
     1566                    { { "va", 0 }, SSAInfo(5, 6, 6, 8, 3, true) },
     1567                    { { "va", 1 }, SSAInfo(2, SIZE_MAX, 3, SIZE_MAX, 0, true) },
     1568                    { { "va", 2 }, SSAInfo(4, SIZE_MAX, 5, SIZE_MAX, 0, true) }
     1569                }, false, false, false },
     1570            // block 10 (to bb0)
     1571            { 140, 144,
     1572                { },
     1573                { }, false, false, true }
     1574        },
     1575        {   // SSA replaces
     1576            { { "sa", 0 }, { { 2, 1 } } },
     1577            { { "sa", 1 }, { { 3, 2 } } },
     1578            { { "va", 0 }, { { 8, 1 }, { 10, 5 } } },
     1579            { { "va", 1 }, { { 2, 1 }, { 2, 1 }, { 3, 1 } } },
     1580            { { "va", 2 }, { { 4, 1 }, { 4, 1 }, { 5, 1 } } }
    14331581        },
    14341582        true, ""
Note: See TracChangeset for help on using the changeset viewer.