Changeset 3867 in CLRX


Ignore:
Timestamp:
Mar 3, 2018, 9:06:10 AM (16 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: small fixes. Add new debug stuff.

File:
1 edited

Legend:

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

    r3866 r3867  
    604604    size_t weight() const
    605605    { return rbwSSAIdMap.size() + lastSSAIdMap.weight(); }
     606   
     607    void compare(const RoutineData& rdata) const
     608    {
     609        std::cout << "-- Comparing routine data" << std::endl;
     610        if (rbwSSAIdMap != rdata.rbwSSAIdMap)
     611        {
     612            std::cout << "RBWSSAIdMap doesn't match" << std::endl;
     613            for (const auto& rbwe: rbwSSAIdMap)
     614            {
     615                auto it2 = rdata.rbwSSAIdMap.find(rbwe.first);
     616                if (it2 != rdata.rbwSSAIdMap.end() && rbwe.second != it2->second)
     617                    std::cout << "  Key: " << rbwe.first.regVar << ":" <<
     618                            rbwe.first.index << ", " <<
     619                            rbwe.second << " != " << it2->second << std::endl;
     620                else if (it2 == rdata.rbwSSAIdMap.end())
     621                    std::cout << "  Key: " << rbwe.first.regVar << ":" <<
     622                            rbwe.first.index << " not found" << std::endl;
     623            }
     624            for (const auto& rbwe: rdata.rbwSSAIdMap)
     625            {
     626                auto it2 = rbwSSAIdMap.find(rbwe.first);
     627                if (it2 == rbwSSAIdMap.end())
     628                    std::cout << "  Key2: " << rbwe.first.regVar << ":" <<
     629                            rbwe.first.index << " not found" << std::endl;
     630            }
     631        }
     632        if (curSSAIdMap != rdata.curSSAIdMap)
     633        {
     634            std::cout << "CurSSAIdMap doesn't match" << std::endl;
     635            for (const auto& le: curSSAIdMap)
     636            {
     637                auto it2 = rdata.curSSAIdMap.find(le.first);
     638                if (it2 != rdata.curSSAIdMap.end() && le.second != it2->second)
     639                {
     640                    std::cout << "  Key: " << le.first.regVar << ":" <<
     641                            le.first.index << ", ";
     642                    for (size_t k = 0; k < le.second.size(); k++)
     643                        std::cout << (k!=0?",":"[") << le.second[k];
     644                    std::cout << "]!=";
     645                    for (size_t k = 0; k < it2->second.size(); k++)
     646                        std::cout << (k!=0?",":"[") << it2->second[k];
     647                    std::cout << "]" << std::endl;
     648                }
     649                else if (it2 == rdata.curSSAIdMap.end())
     650                    std::cout << "  Key: " << le.first.regVar << ":" <<
     651                            le.first.index << " not found" << std::endl;
     652            }
     653            for (const auto& le: rdata.curSSAIdMap)
     654            {
     655                auto it2 = curSSAIdMap.find(le.first);
     656                if (it2 == curSSAIdMap.end())
     657                    std::cout << "  Key2: " << le.first.regVar << ":" <<
     658                            le.first.index << " not found" << std::endl;
     659            }
     660        }
     661        if (lastSSAIdMap != rdata.lastSSAIdMap)
     662        {
     663            std::cout << "LastSSAIdMap doesn't match" << std::endl;
     664            for (const auto& le: lastSSAIdMap)
     665            {
     666                auto it2 = rdata.lastSSAIdMap.find(le.first);
     667                if (it2 != rdata.lastSSAIdMap.end() && le.second != it2->second)
     668                {
     669                    std::cout << "  Key: " << le.first.regVar << ":" <<
     670                            le.first.index << ", ";
     671                    for (size_t k = 0; k < le.second.size(); k++)
     672                        std::cout << (k!=0?",":"[") << le.second[k];
     673                    std::cout << "]!=";
     674                    for (size_t k = 0; k < it2->second.size(); k++)
     675                        std::cout << (k!=0?",":"[") << it2->second[k];
     676                    std::cout << "]" << std::endl;
     677                }
     678                else if (it2 == rdata.lastSSAIdMap.end())
     679                    std::cout << "  Key: " << le.first.regVar << ":" <<
     680                            le.first.index << " not found" << std::endl;
     681            }
     682            for (const auto& le: rdata.lastSSAIdMap)
     683            {
     684                auto it2 = lastSSAIdMap.find(le.first);
     685                if (it2 == lastSSAIdMap.end())
     686                    std::cout << "  Key2: " << le.first.regVar << ":" <<
     687                            le.first.index << " not found" << std::endl;
     688            }
     689        }
     690       
     691        std::cout << "-- Comparing routine data end" << std::endl;
     692    }
    606693};
    607694
     
    13471434               
    13481435                for (const auto& ssaEntry: cblock.ssaInfoMap)
    1349                     // put data to routine data
    1350                     updateRoutineData(rdata, ssaEntry);
     1436                    if (ssaEntry.first.regVar != nullptr)
     1437                        // put data to routine data
     1438                        updateRoutineData(rdata, ssaEntry);
    13511439            }
    13521440            else if (subroutToCache.count(entry.blockIndex)!=0)
     
    14911579    // to track ways last block indices pair: block index, flowStackPos)
    14921580    std::pair<size_t, size_t> lastCommonCacheWayPoint{ SIZE_MAX, SIZE_MAX };
     1581    std::vector<bool> isRoutineGen(codeBlocks.size(), false);
    14931582   
    14941583    std::vector<bool> waysToCache(codeBlocks.size(), false);
     
    16001689            const RoutineData& prevRdata =
    16011690                    routineMap.find(callStack.back().routineBlock)->second;
    1602             RoutineData myRoutineData;
    1603             createRoutineData(codeBlocks, cblocksToCache, subroutinesCache,
    1604                         routineMap, myRoutineData, callStack.back().routineBlock);
     1691            if (!isRoutineGen[callStack.back().routineBlock])
     1692            {
     1693                RoutineData myRoutineData;
     1694                createRoutineData(codeBlocks, cblocksToCache, subroutinesCache,
     1695                            routineMap, myRoutineData, callStack.back().routineBlock);
     1696                prevRdata.compare(myRoutineData);
     1697                isRoutineGen[callStack.back().routineBlock] = true;
     1698            }
    16051699            callStack.pop_back(); // just return from call
    16061700            if (!callStack.empty())
Note: See TracChangeset for help on using the changeset viewer.