Changeset 3941 in CLRX


Ignore:
Timestamp:
Mar 26, 2018, 6:00:58 PM (4 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Yet another update: fixing recursion support (still unfinished). Extend test case number info.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r3940 r3941  
    19351935            size_t recurBlock)
    19361936{
     1937    std::cout << "----- passSecondRecurPass: " << recurBlock << std::endl;
    19371938    SimpleCache<size_t, RoutineData> subroutinesCache(codeBlocks.size()<<3);
    19381939   
     
    20602061        }
    20612062    }
     2063    std::cout << "----- passSecondRecurPass end: " << recurBlock << std::endl;
    20622064   
    20632065    RoutineData& prevRdata = routineMapSP.find(recurBlock)->second;
     
    20692071    for (const auto& entry: routineMapSP)
    20702072        routineMap[entry.first] = entry.second;
    2071 }
    2072 
     2073    std::cout << "----- passSecondRecurPass after: " << recurBlock << std::endl;
     2074}
     2075
     2076
     2077struct CLRX_INTERNAL RecurStateEntry
     2078{
     2079    std::unordered_map<AsmSingleVReg, size_t> curSSAIdMap;
     2080    RetSSAIdMap retSSAIdMap;
     2081};
    20732082
    20742083void AsmRegAllocator::createSSAData(ISAUsageHandler& usageHandler)
     
    21652174    flowStack.push_back({ 0, 0 });
    21662175    flowStackBlocks[0] = true;
     2176   
     2177    std::unordered_map<size_t, RecurStateEntry> recurStateMap;
    21672178    std::unordered_set<size_t> callBlocks;
    21682179    std::unordered_set<size_t> loopBlocks;
     
    22552266            const size_t routineBlock = callStack.back().routineBlock;
    22562267            RoutineData& prevRdata = routineMap.find(routineBlock)->second;
    2257             if (!isRoutineGen[routineBlock])
     2268            if (recurseBlocks.find(routineBlock) != recurseBlocks.end())
     2269            {
     2270                std::cout << "store recuState: " << routineBlock << std::endl;
     2271                /*passSecondRecurPass(codeBlocks, curSSAIdMap, cblocksToCache,
     2272                            loopBlocks, recurseBlocks, routineMap, retSSAIdMap,
     2273                            ssaReplacesMap, routineBlock);*/
     2274                recurStateMap.insert({ routineBlock, { curSSAIdMap, retSSAIdMap } });
     2275                recurseBlocks.erase(routineBlock);
     2276            }
     2277            else if (!isRoutineGen[routineBlock])
    22582278            {
    22592279                createRoutineData(codeBlocks, curSSAIdMap, loopBlocks, cblocksToCache,
     
    22612281                //prevRdata.compare(myRoutineData);
    22622282                isRoutineGen[routineBlock] = true;
    2263             }
    2264             else if (recurseBlocks.find(routineBlock) != recurseBlocks.end())
    2265             {
    2266                 // second pass through recursion
    2267                 passSecondRecurPass(codeBlocks, curSSAIdMap, cblocksToCache,
    2268                             loopBlocks, recurseBlocks, routineMap, retSSAIdMap,
    2269                             ssaReplacesMap, routineBlock);
    2270                 recurseBlocks.erase(routineBlock);
    22712283            }
    22722284           
     
    22972309            if (flowStackBlocks[nextBlock])
    22982310            {
    2299                 loopBlocks.insert(nextBlock);
     2311                if (!cblock.nexts[entry.nextIndex].isCall)
     2312                    loopBlocks.insert(nextBlock);
    23002313                flowStackBlocks[nextBlock] = false; // keep to inserted in popping
    23012314            }
     
    23372350        else // back
    23382351        {
     2352            {
     2353                auto rsit = recurStateMap.find(entry.blockIndex);
     2354                if (rsit != recurStateMap.end())
     2355                    // second pass through recursion
     2356                    passSecondRecurPass(codeBlocks, rsit->second.curSSAIdMap,
     2357                            cblocksToCache, loopBlocks, recurseBlocks, routineMap,
     2358                            rsit->second.retSSAIdMap, ssaReplacesMap, entry.blockIndex);
     2359            }
     2360           
    23392361            RoutineData* rdata = nullptr;
    23402362            if (!callStack.empty())
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3916 r3941  
    127127{
    128128    std::cout << "-----------------------------------------------\n"
    129     "           Test " << i << "\n"
     129    "           Test " << testSuiteId << " " << i << "\n"
    130130                "------------------------------------------------\n";
    131131    std::istringstream input(testCase.input);
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase3.cpp

    r3935 r3941  
    11871187        true, ""
    11881188    },
     1189#if 0
     1190    {   // 7 - first recursion testcase
     1191        R"ffDXD(.regvar sa:s:8, va:v:8
     1192        s_mov_b32 sa[2], s4
     1193        s_mov_b32 sa[3], s4
     1194        s_mov_b32 sa[6], s7
     1195       
     1196        .cf_call routine
     1197        s_swappc_b64 s[0:1], s[2:3]
     1198       
     1199        s_add_u32 sa[2], sa[2], sa[0]
     1200        s_add_u32 sa[3], sa[3], sa[0]
     1201        s_add_u32 sa[6], sa[6], sa[0]
     1202        s_endpgm
     1203       
     1204routine:
     1205        s_xor_b32 sa[2], sa[2], sa[0]
     1206        s_xor_b32 sa[3], sa[3], sa[1]
     1207        s_cbranch_vccnz b0
     1208       
     1209        .cf_call routine
     1210        s_swappc_b64 s[0:1], s[2:3]
     1211       
     1212        s_xor_b32 sa[3], sa[3], sa[1]
     1213        s_xor_b32 sa[6], sa[6], sa[1]
     1214        .cf_ret
     1215        s_setpc_b64 s[0:1]
     1216       
     1217b0:     s_xor_b32 sa[3], sa[3], sa[0]
     1218        s_xor_b32 sa[2], sa[2], sa[0]
     1219        .cf_ret
     1220        s_setpc_b64 s[0:1]
     1221)ffDXD",
     1222        {
     1223        },
     1224        {
     1225        },
     1226        true, ""
     1227    },
     1228#endif
    11891229    { nullptr }
    11901230};
Note: See TracChangeset for help on using the changeset viewer.