Changeset 4119 in CLRX


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

CLRadeonExtender: AsmRegAlloc?: Fixed checking of the varCallMap and varRoutineMap. The first working testcase with routines for createLivenesses.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r4117 r4119  
    897897                                    0, lastAccess.inSubroutines });
    898898                        entry.lastAccessIndex++;
     899                        if (entry.lastAccessIndex == lastAccessIt->second.size())
     900                            doNextIndex = true;
    899901                    }
    900902                    else
     
    919921            /* if inSubroutines, then first block
    920922             * (that with subroutines calls) will be skipped */
    921             fillUpInsideRoutine(visited, codeBlocks, varCallMap, varRoutineMap,
    922                     entry.blockIndex + (entry.inSubroutines), svreg,
    923                     lv, lvRegType, lvIndex);
     923            if (rjStack.size() > 1)
     924                fillUpInsideRoutine(visited, codeBlocks, varCallMap, varRoutineMap,
     925                        entry.blockIndex + (entry.inSubroutines), svreg,
     926                        lv, lvRegType, lvIndex);
    924927            rjStack.pop();
    925928        }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4118 r4119  
    2121#include <algorithm>
    2222#include <iostream>
     23#include <iterator>
    2324#include <sstream>
    2425#include <string>
     
    4546};
    4647
    47 typedef Array<size_t> VVarSetEntry2[4];
     48struct VVarSetEntry2
     49{
     50    Array<size_t> vvars[4];
     51};
    4852
    4953struct AsmLivenessesCase
     
    970974        true, ""
    971975    },
    972 #if 0
    973976    {   // 17 - simple call
    974977        R"ffDXD(.regvar sa:s:8, va:v:8
     
    10011004                { { 0, 5 } }, // 5: S5
    10021005                { { 1, 32 }, { 44, 45 } }, // 6: sa[2]'0
    1003                 { }, // 7: sa[2]'1
    1004                 { }, // 8: sa[2]'2
    1005                 { }, // 9: sa[3]'0
    1006                 { }, // 10: sa[3]'1
    1007                 { }, // 11: sa[3]'2
    1008                 { }  // 12: sa[4]'0
     1006                { { 32, 33 }, { 45, 56 } }, // 7: sa[2]'1
     1007                { { 33, 34 } }, // 8: sa[2]'2
     1008                { { 5, 32 }, { 44, 49 } }, // 9: sa[3]'0
     1009                { { 32, 37 }, { 49, 56 } }, // 10: sa[3]'1
     1010                { { 37, 38 } }, // 11: sa[3]'2
     1011                { { 0, 32 }, { 44, 49 } }  // 12: sa[4]'0
    10091012            },
    10101013            { },
     
    10131016        },
    10141017        { }, //
    1015         { },  // varRoutineMap
     1018        {   // varRoutineMap
     1019            { 2, { { { 0, 1, 6, 7, 9, 10, 12 }, { }, { }, { } } } }
     1020        },
    10161021        { },  // varCallMap
    10171022        true, ""
    10181023    }
    1019 #endif
    10201024};
    10211025
     
    12141218                    vcit != varCallMap.end());
    12151219       
    1216         const VVarSetEntry2& expEntry = testCase.varCallMap[j].second;
     1220        const Array<size_t>* expEntry = testCase.varCallMap[j].second.vvars;
    12171221        const VVarSetEntry& resEntry = vcit->second;
    12181222        for (cxuint r = 0; r < MAX_REGTYPES_NUM; r++)
     
    12261230                    expEntry[r].size(), resEntry.vvars[r].size());
    12271231           
    1228             for (size_t k = 0; k < expEntry[r].size(); k++)
    1229             {
    1230                 std::ostringstream vskOss;
    1231                 vskOss << ".elem#" << r << "=" << expEntry[r][k];
    1232                 vskOss.flush();
    1233                 std::string vskname = vsname + vskOss.str();
    1234                
    1235                 assertTrue("testAsmLivenesses", testCaseName + vskname +".size",
    1236                         resEntry.vvars[r].find(lvIndexCvtTables[r][expEntry[r][k]]) !=
    1237                         resEntry.vvars[r].end());
    1238             }
     1232            std::vector<size_t> resVVars;
     1233            std::transform(resEntry.vvars[r].begin(), resEntry.vvars[r].end(),
     1234                    std::back_inserter(resVVars),
     1235                    [&r,&revLvIndexCvtTables](size_t v)
     1236                    { return revLvIndexCvtTables[r][v]; });
     1237            std::sort(resVVars.begin(), resVVars.end());
     1238            assertArray("testAsmLivenesses", testCaseName + vsname,
     1239                        expEntry[r], resVVars);
    12391240        }
    12401241    }
     
    12591260                    vcit != varRoutineMap.end());
    12601261       
    1261         const VVarSetEntry2& expEntry = testCase.varRoutineMap[j].second;
     1262        const Array<size_t>* expEntry = testCase.varRoutineMap[j].second.vvars;
    12621263        const VVarSetEntry& resEntry = vcit->second;
    12631264        for (cxuint r = 0; r < MAX_REGTYPES_NUM; r++)
     
    12711272                    expEntry[r].size(), resEntry.vvars[r].size());
    12721273           
    1273             for (size_t k = 0; k < expEntry[r].size(); k++)
    1274             {
    1275                 std::ostringstream vskOss;
    1276                 vskOss << ".elem#" << r << "=" << expEntry[r][k];
    1277                 vskOss.flush();
    1278                 std::string vskname = vsname + vskOss.str();
    1279                
    1280                 assertTrue("testAsmLivenesses", testCaseName + vskname +".size",
    1281                         resEntry.vvars[r].find(lvIndexCvtTables[r][expEntry[r][k]]) !=
    1282                         resEntry.vvars[r].end());
    1283             }
     1274            std::vector<size_t> resVVars;
     1275            std::transform(resEntry.vvars[r].begin(), resEntry.vvars[r].end(),
     1276                    std::back_inserter(resVVars),
     1277                    [&r,&revLvIndexCvtTables](size_t v)
     1278                    { return revLvIndexCvtTables[r][v]; });
     1279            std::sort(resVVars.begin(), resVVars.end());
     1280            assertArray("testAsmLivenesses", testCaseName + vsname,
     1281                        expEntry[r], resVVars);
    12841282        }
    12851283    }
Note: See TracChangeset for help on using the changeset viewer.