Changeset 4128 in CLRX


Ignore:
Timestamp:
May 9, 2018, 6:57:48 PM (7 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Skip main filling after recursive filling through routines but not before. Fixed testcases.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r4126 r4128  
    859859    Liveness& lv = livenesses[lvRegType][vidx];
    860860   
    861     if (flitEnd != flowStack.begin())
    862     {
    863         const CodeBlock& cbLast = codeBlocks[(flitEnd-1)->blockIndex];
    864         if (lv.contain(cbLast.end-1))
    865             // if already filled up
    866             return;
    867     }
    868    
    869861    std::unordered_set<size_t> visited;
    870862   
     
    925917            rjStack.pop();
    926918        }
     919    }
     920   
     921    if (flitEnd != flowStack.begin())
     922    {
     923        const CodeBlock& cbLast = codeBlocks[(flitEnd-1)->blockIndex];
     924        if (lv.contain(cbLast.end-1))
     925            // if already filled up
     926            return;
    927927    }
    928928   
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4127 r4128  
    11281128                { { 36, 37 }, { 57, 68 }, { 69, 76 } }, // 8: sa[2]'2
    11291129                { { 37, 38 } }, // 9: sa[2]'3
    1130                 { { 5, 41 }, { 48, 62 } }, // 10: sa[3]'0
     1130                { { 5, 41 }, { 48, 68 } }, // 10: sa[3]'0
    11311131                { { 41, 42 } }, // 11: sa[3]'1
    11321132                { { 0, 36 }, { 48, 61 }, { 68, 69 } }, // 12: sa[4]'0
     
    12271227        true, ""
    12281228    }
     1229#if 0
     1230    ,
     1231    {   // 21 - many nested routines - path penetration
     1232        R"ffDXD(.regvar sa:s:8, va:v:8
     1233        .cf_call routine
     1234        s_swappc_b64 s[0:1], s[2:3]         # 0
     1235       
     1236        s_add_u32 sa[7], sa[7], sa[1]       # 4
     1237        s_add_u32 sa[7], sa[7], sa[2]       # 8
     1238        s_add_u32 sa[7], sa[7], sa[3]       # 12
     1239        s_add_u32 sa[7], sa[7], sa[4]       # 16
     1240        s_add_u32 sa[7], sa[7], sa[5]       # 20
     1241        s_add_u32 sa[7], sa[7], sa[6]       # 24
     1242        v_xor_b32 va[7], va[7], va[0]       # 28
     1243        v_xor_b32 va[7], va[7], va[1]       # 32
     1244        v_xor_b32 va[7], va[7], va[2]       # 36
     1245        v_xor_b32 va[7], va[7], va[3]       # 40
     1246        s_endpgm                            # 44
     1247       
     1248routine:
     1249        v_add_u32 va[3], vcc, va[3], va[1]  # 48
     1250        s_cbranch_scc0 r1_2                 # 52
     1251       
     1252r1_1:   s_add_u32 sa[2], sa[2], sa[0]       # 56
     1253        .cf_call routine2
     1254        s_swappc_b64 s[0:1], s[2:3]         # 60
     1255        v_add_u32 va[3], vcc, va[3], va[1]  # 64
     1256        .cf_ret
     1257        s_setpc_b64 s[0:1]                  # 68
     1258       
     1259r1_2:   s_add_u32 sa[6], sa[6], sa[0]       # 72
     1260        .cf_call routine3
     1261        s_swappc_b64 s[0:1], s[2:3]         # 76
     1262        v_add_u32 va[2], vcc, va[2], va[1]  # 80
     1263        .cf_ret
     1264        s_setpc_b64 s[0:1]                  # 84
     1265
     1266routine2:
     1267        s_add_u32 sa[2], sa[2], sa[0]       # 88
     1268        s_cbranch_scc0 r2_2                 # 92
     1269       
     1270r2_1:   s_add_u32 sa[2], sa[2], sa[0]       # 96
     1271        .cf_ret
     1272        s_setpc_b64 s[0:1]                  # 100
     1273r2_2:   s_add_u32 sa[3], sa[3], sa[0]       # 104
     1274        .cf_ret
     1275        s_setpc_b64 s[0:1]                  # 108
     1276
     1277routine3:
     1278        s_add_u32 sa[4], sa[4], sa[0]       # 112
     1279        s_cbranch_scc0 r3_2                 # 116
     1280       
     1281r3_1:   s_add_u32 sa[4], sa[4], sa[0]       # 120
     1282        .cf_ret
     1283        s_setpc_b64 s[0:1]                  # 124
     1284r3_2:   s_add_u32 sa[5], sa[5], sa[0]       # 128
     1285        s_cbranch_scc0 r3_4                 # 132
     1286r3_3:   v_add_u32 va[0], vcc, va[0], va[1]  # 136
     1287        .cf_ret
     1288        s_setpc_b64 s[0:1]                  # 140
     1289r3_4:
     1290        v_add_u32 va[0], vcc, va[0], va[1]  # 144
     1291        .cf_ret
     1292        s_setpc_b64 s[0:1]                  # 148
     1293)ffDXD",
     1294        {   // livenesses
     1295            {   // for SGPRs
     1296                { { 1, 2 }, { 61, 69 }, { 77, 85 }, { 88, 104 },
     1297                    { }, { }, { }, { } }, // 0: S0
     1298                { }, // 1: S1
     1299                { }, // 2: S2
     1300                { }, // 3: S3
     1301                { }, // 4: sa:0
     1302                { }, // 5: sa:1
     1303                { }, // 6: sa:2
     1304                { }, // 7: sa:2
     1305                { }, // 8: sa:3
     1306                { }, // 9: sa:4
     1307                { }, // 10: sa:5
     1308                { }, // 11: sa:6
     1309                { }, // 12: sa:7
     1310                { }, // 13: sa:7
     1311                { }, // 14: sa:7
     1312                { }, // 15: sa:7
     1313                { }, // 16: sa:7
     1314                { }, // 17: sa:7
     1315                { }  // 18: sa:7
     1316            },
     1317            {   // for VGPs
     1318            },
     1319            { },
     1320            { }
     1321        },
     1322        { }, // linearDepMaps
     1323        { }, // vidxRoutineMap
     1324        { }, // vidxCallMap
     1325        true, ""
     1326    }
     1327#endif
    12291328};
    12301329
Note: See TracChangeset for help on using the changeset viewer.