Changeset 4019 in CLRX


Ignore:
Timestamp:
Apr 18, 2018, 1:29:23 PM (5 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Update testCase routine (AsmRegAlloc3). Add new getters to AsmRegAllocator?.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/amdasm/Assembler.h

    r4016 r4019  
    392392    const Array<OutLiveness>* getOutLivenesses() const
    393393    { return outLivenesses; }
     394   
     395    const std::unordered_map<size_t, LinearDep>* getLinearDepMaps() const
     396    { return linearDepMaps; }
     397    const std::unordered_map<size_t, EqualToDep>* getEqualToDepMaps() const
     398    { return equalToDepMaps; }
    394399};
    395400
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r4017 r4019  
    149149                            section.content.data());
    150150    regAlloc.createSSAData(*section.usageHandler);
     151   
    151152    const std::vector<CodeBlock>& resCodeBlocks = regAlloc.getCodeBlocks();
    152153    std::ostringstream oss;
    153154    oss << " testAsmSSAData" << testSuiteId << " case#" << i;
    154155    const std::string testCaseName = oss.str();
     156   
    155157    assertValue<bool>("testAsmSSAData", testCaseName+".good",
    156158                      testCase.good, good);
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4018 r4019  
    3434
    3535typedef AsmRegAllocator::OutLiveness OutLiveness;
     36typedef AsmRegAllocator::LinearDep LinearDep;
     37typedef AsmRegAllocator::EqualToDep EqualToDep;
     38
     39struct LinearDep2
     40{
     41    cxbyte align;
     42    Array<size_t> prevVidxes;
     43    Array<size_t> nextVidxes;
     44};
     45struct EqualToDep2
     46{
     47    Array<size_t> prevVidxes;
     48    Array<size_t> nextVidxes;
     49};
    3650
    3751struct AsmLivenessesCase
     
    3953    const char* input;
    4054    Array<OutLiveness> livenesses[MAX_REGTYPES_NUM];
     55    Array<std::pair<size_t, LinearDep2> > linearDepMaps[MAX_REGTYPES_NUM];
     56    Array<std::pair<size_t, EqualToDep2> > equalToDepMaps[MAX_REGTYPES_NUM];
    4157    bool good;
    4258    const char* errorMessages;
     
    6581                            section.content.data());
    6682    regAlloc.createSSAData(*section.usageHandler);
     83    regAlloc.applySSAReplaces();
    6784    regAlloc.createLivenesses(*section.usageHandler);
    6885   
     
    8097    {
    8198        std::ostringstream rOss;
    82         rOss << ".regtype#" << r << ".";
     99        rOss << "live.regtype#" << r << ".";
    83100        rOss.flush();
    84101        std::string rtname(rOss.str());
     
    90107        {
    91108            std::ostringstream lOss;
    92             rOss << ".liveness#" << li << ".";
     109            lOss << ".liveness#" << li << ".";
    93110            lOss.flush();
    94111            std::string lvname(rtname + lOss.str());
     
    96113            const OutLiveness& resLv = resLivenesses[r][li];
    97114           
     115            // checking liveness
    98116            assertValue("testAsmLivenesses", testCaseName + lvname + ".size",
    99117                    expLv.size(), resLv.size());
     
    111129        }
    112130    }
     131   
     132    const std::unordered_map<size_t, LinearDep>* resLinearDepMaps =
     133                regAlloc.getLinearDepMaps();
     134    for (size_t r = 0; r < MAX_REGTYPES_NUM; r++)
     135    {
     136        std::ostringstream rOss;
     137        rOss << "lndep.regtype#" << r << ".";
     138        rOss.flush();
     139        std::string rtname(rOss.str());
     140       
     141        assertValue("testAsmLivenesses", testCaseName + rtname + ".size",
     142                    testCase.linearDepMaps[r].size(), resLinearDepMaps[r].size());
     143       
     144        for (size_t di = 0; di < testCase.linearDepMaps[r].size(); di++)
     145        {
     146            std::ostringstream lOss;
     147            lOss << ".lndep#" << di << ".";
     148            lOss.flush();
     149            std::string ldname(rtname + lOss.str());
     150            const auto& expLinearDepEntry = testCase.linearDepMaps[r][di];
     151            auto rlit = resLinearDepMaps[r].find(expLinearDepEntry.first);
     152           
     153            std::ostringstream vOss;
     154            vOss << expLinearDepEntry.first;
     155            vOss.flush();
     156            assertTrue("testAsmLivenesses", testCaseName + ldname + ".key=" + vOss.str(),
     157                        rlit != resLinearDepMaps[r].end());
     158            const LinearDep2& expLinearDep = expLinearDepEntry.second;
     159            const LinearDep& resLinearDep = rlit->second;
     160           
     161            assertValue("testAsmLivenesses", testCaseName + ldname + ".align",
     162                        cxuint(expLinearDep.align), cxuint(resLinearDep.align));
     163            assertArray("testAsmLivenesses", testCaseName + ldname + ".prevVidxes",
     164                        expLinearDep.prevVidxes, resLinearDep.prevVidxes);
     165            assertArray("testAsmLivenesses", testCaseName + ldname + ".nextVidxes",
     166                        expLinearDep.nextVidxes, resLinearDep.nextVidxes);
     167        }
     168    }
     169   
     170    const std::unordered_map<size_t, EqualToDep>* resEqualToDepMaps =
     171                regAlloc.getEqualToDepMaps();
     172    for (size_t r = 0; r < MAX_REGTYPES_NUM; r++)
     173    {
     174        std::ostringstream rOss;
     175        rOss << "eqtodep.regtype#" << r << ".";
     176        rOss.flush();
     177        std::string rtname(rOss.str());
     178       
     179        assertValue("testAsmLivenesses", testCaseName + rtname + ".size",
     180                    testCase.equalToDepMaps[r].size(), resEqualToDepMaps[r].size());
     181       
     182        for (size_t di = 0; di < testCase.equalToDepMaps[r].size(); di++)
     183        {
     184            std::ostringstream lOss;
     185            lOss << ".eqtodep#" << di << ".";
     186            lOss.flush();
     187            std::string ldname(rtname + lOss.str());
     188            const auto& expEqualToDepEntry = testCase.equalToDepMaps[r][di];
     189            auto reit = resEqualToDepMaps[r].find(expEqualToDepEntry.first);
     190           
     191            std::ostringstream vOss;
     192            vOss << expEqualToDepEntry.first;
     193            vOss.flush();
     194            assertTrue("testAsmLivenesses", testCaseName + ldname + ".key=" + vOss.str(),
     195                        reit != resEqualToDepMaps[r].end());
     196            const EqualToDep2& expEqualToDep = expEqualToDepEntry.second;
     197            const EqualToDep& resEqualToDep = reit->second;
     198           
     199            assertArray("testAsmLivenesses", testCaseName + ldname + ".prevVidxes",
     200                        expEqualToDep.prevVidxes, resEqualToDep.prevVidxes);
     201            assertArray("testAsmLivenesses", testCaseName + ldname + ".nextVidxes",
     202                        expEqualToDep.nextVidxes, resEqualToDep.nextVidxes);
     203        }
     204    }
    113205}
    114206
Note: See TracChangeset for help on using the changeset viewer.