Changeset 4011 in CLRX


Ignore:
Timestamp:
Apr 17, 2018, 12:00:34 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Simplify applySSAReplaces.

File:
1 edited

Legend:

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

    r4010 r4011  
    600600                                nodeIt->first << ":" << &(nodeIt->second) <<
    601601                                " minSSAId: " << nodeIt->second.minSSAId << "\n";
     602                        nodeIt->second.minSSAId =
     603                                std::min(nodeIt->second.minSSAId, node.minSSAId);
    602604                        minSSAStack.push({ nodeIt, nodeIt->second.nexts.begin(),
    603                                 std::min(nodeIt->second.minSSAId, node.minSSAId) });
     605                                nodeIt->second.minSSAId });
    604606                    }
    605607                    ++entry.nextIt;
     
    620622            }
    621623           
     624            const size_t minSSAId = ssaGraphNodeIt->second.minSSAId;
     625           
    622626            // skip visited nodes
    623627            for(; ssaGraphNodeIt != ssaGraphNodes.end(); ++ssaGraphNodeIt)
     
    626630            // zeroing visited
    627631            for (MinSSAGraphNode* node: toClear)
     632            {
     633                node->minSSAId = minSSAId; // fill up by minSSAId
    628634                node->visited = false;
    629             toClear.clear();
    630         }
    631        
    632         // final fill up
    633         for (auto ssaGraphNodeIt = ssaGraphNodes.begin();
    634                  ssaGraphNodeIt!=ssaGraphNodes.end(); )
    635         {
    636             // fill up rest of tree
    637             ARDOut << "  Start2 in " << ssaGraphNodeIt->first << "." << "\n";
    638             minSSAStack.push({ ssaGraphNodeIt, ssaGraphNodeIt->second.nexts.begin() });
    639             while (!minSSAStack.empty())
    640             {
    641                 MinSSAGraphStackEntry& entry = minSSAStack.top();
    642                 MinSSAGraphNode& node = entry.nodeIt->second;
    643                 bool toPop = false;
    644                 if (entry.nextIt == node.nexts.begin())
    645                 {
    646                     toPop = node.visited;
    647                     if (!node.visited)
    648                         // this flag visited for this node will be clear after this pass
    649                         toClear.push_back(&node);
    650                     node.visited = true;
    651                 }
    652                
    653                 // try to children only all parents are visited and if parent has children
    654                 if (!toPop && entry.nextIt != node.nexts.end())
    655                 {
    656                     auto nodeIt = ssaGraphNodes.find(*entry.nextIt);
    657                     if (nodeIt != ssaGraphNodes.end())
    658                     {
    659                         ARDOut << "  Node2: " <<
    660                                 entry.nodeIt->first << ":" << &node << " minSSAId: " <<
    661                                 node.minSSAId << " to " <<
    662                                 nodeIt->first << ":" << &(nodeIt->second) <<
    663                                 " minSSAId: " << nodeIt->second.minSSAId << "\n";
    664                         nodeIt->second.minSSAId =
    665                                 std::min(nodeIt->second.minSSAId, node.minSSAId);
    666                         minSSAStack.push({ nodeIt, nodeIt->second.nexts.begin(),
    667                                  nodeIt->second.minSSAId });
    668                     }
    669                     ++entry.nextIt;
    670                 }
    671                 else
    672                 {
    673                     node.minSSAId = std::min(node.minSSAId, entry.minSSAId);
    674                     ARDOut << "    Node2: " <<
    675                                 entry.nodeIt->first << ":" << &node << " minSSAId: " <<
    676                                 node.minSSAId << "\n";
    677                     minSSAStack.pop();
    678                     if (!minSSAStack.empty())
    679                     {
    680                         MinSSAGraphStackEntry& pentry = minSSAStack.top();
    681                         pentry.minSSAId = std::min(pentry.minSSAId, node.minSSAId);
    682                     }
    683                 }
    684             }
    685            
    686             // skip visited nodes
    687             for(; ssaGraphNodeIt != ssaGraphNodes.end(); ++ssaGraphNodeIt)
    688                 if (!ssaGraphNodeIt->second.visited)
    689                     break;
    690            
    691             // zeroing visited
    692             for (MinSSAGraphNode* node: toClear)
    693                 node->visited = false;
     635            }
    694636            toClear.clear();
    695637        }
Note: See TracChangeset for help on using the changeset viewer.