Changeset 3978 in CLRX


Ignore:
Timestamp:
Apr 10, 2018, 7:56:44 AM (8 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: propagate haveReturn to previous block in createRoutine while joining subroutines.
Fixing collecting changed regvars in recursions (still have bugs).

File:
1 edited

Legend:

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

    r3977 r3978  
    19011901                {
    19021902                    // no joining. no returns
    1903                     std::cout << "procretend2" << std::endl;
     1903                    std::cout << "procretend2 nojoin" << std::endl;
    19041904                    flowStackBlocks[entry.blockIndex] = !flowStackBlocks[entry.blockIndex];
    19051905                    flowStack.pop_back();
     
    19361936                flowStackBlocks[entry.blockIndex] = !flowStackBlocks[entry.blockIndex];
    19371937                flowStack.pop_back();
     1938                // propagate haveReturn to previous block
     1939                flowStack.back().haveReturn = true;
     1940                haveReturnBlocks[flowStack.back().blockIndex] = true;
    19381941                continue;
    19391942            }
     
    23392342                else
    23402343                {
     2344                    // TODO: fix handling loops (fix haveReturn leaks)
     2345                    const bool prevHaveReturn = haveReturnBlocks[entry.blockIndex];
    23412346                    flowStack.pop_back();
     2347                    // set up haveReturn
     2348                    FlowStackEntry4& prevEntry = flowStack.back();
     2349                    const bool haveReturn = (prevEntry.haveReturn |= prevHaveReturn);
     2350                    haveReturnBlocks[prevEntry.blockIndex] = haveReturn;
    23422351                    continue;
    23432352                }
     
    23772386                    const bool haveReturn = (prevEntry.haveReturn |= prevHaveReturn);
    23782387                    haveReturnBlocks[prevEntry.blockIndex] = haveReturn;
    2379                     if (haveReturn)
     2388                    if (prevHaveReturn)
    23802389                        prevEntry.changedVars.insert(prevChangedVars.begin(),
    23812390                                    prevChangedVars.end());
    2382                     else
    2383                         // if no return in preb block
    2384                         prevEntry.changedVars.clear();
    23852391                }
    23862392                else if (prevHaveReturn)
Note: See TracChangeset for help on using the changeset viewer.