Author: resistor Date: Wed Dec 12 23:53:03 2007 New Revision: 44987 URL: http://llvm.org/viewvc/llvm-project?rev=44987&view=rev Log: Add register pairs to the list to check for local interferences.
Modified: llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Modified: llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp?rev=44987&r1=44986&r2=44987&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Wed Dec 12 23:53:03 2007 @@ -99,7 +99,8 @@ std::vector<DomForestNode*> computeDomForest(std::set<unsigned>& instrs); void processPHIUnion(MachineInstr* Inst, std::set<unsigned>& PHIUnion, - std::vector<StrongPHIElimination::DomForestNode*>& DF); + std::vector<StrongPHIElimination::DomForestNode*>& DF, + std::vector<std::pair<unsigned, unsigned> >& locals); void breakCriticalEdges(MachineFunction &Fn); }; @@ -300,6 +301,10 @@ computeDomForest(PHIUnion); // Walk DomForest to resolve interferences + std::vector<std::pair<unsigned, unsigned> > localInterferences; + processPHIUnion(P, PHIUnion, DF, localInterferences); + + // FIXME: Check for local interferences ProcessedNames.insert(PHIUnion.begin(), PHIUnion.end()); ++P; @@ -308,7 +313,8 @@ void StrongPHIElimination::processPHIUnion(MachineInstr* Inst, std::set<unsigned>& PHIUnion, - std::vector<StrongPHIElimination::DomForestNode*>& DF) { + std::vector<StrongPHIElimination::DomForestNode*>& DF, + std::vector<std::pair<unsigned, unsigned> >& locals) { std::vector<DomForestNode*> worklist(DF.begin(), DF.end()); SmallPtrSet<DomForestNode*, 4> visited; @@ -323,7 +329,6 @@ visited.insert(DFNode); bool inserted = false; - SmallPtrSet<DomForestNode*, 4> interferences; for (DomForestNode::iterator CI = DFNode->begin(), CE = DFNode->end(); CI != CE; ++CI) { DomForestNode* child = *CI; @@ -342,7 +347,8 @@ } } else if (isLiveIn(Info, CInfo.DefInst->getParent()) || Info.DefInst->getParent() == CInfo.DefInst->getParent()) { - // FIXME: Add (p, c) to possible local interferences + // Add (p, c) to possible local interferences + locals.push_back(std::make_pair(DFNode->getReg(), child->getReg())); } if (!visited.count(child)) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits