From 62d67dd3a3384d3899ca32aebd3d19bbf8b7d326 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Thu, 13 Dec 2007 05:53:03 +0000 Subject: [PATCH] Add register pairs to the list to check for local interferences. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44987 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/StrongPHIElimination.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp index eef10ef3c0d..9b1c163dcfb 100644 --- a/lib/CodeGen/StrongPHIElimination.cpp +++ b/lib/CodeGen/StrongPHIElimination.cpp @@ -99,7 +99,8 @@ namespace { std::vector computeDomForest(std::set& instrs); void processPHIUnion(MachineInstr* Inst, std::set& PHIUnion, - std::vector& DF); + std::vector& DF, + std::vector >& locals); void breakCriticalEdges(MachineFunction &Fn); }; @@ -300,6 +301,10 @@ void StrongPHIElimination::processBlock(MachineBasicBlock* MBB) { computeDomForest(PHIUnion); // Walk DomForest to resolve interferences + std::vector > localInterferences; + processPHIUnion(P, PHIUnion, DF, localInterferences); + + // FIXME: Check for local interferences ProcessedNames.insert(PHIUnion.begin(), PHIUnion.end()); ++P; @@ -308,7 +313,8 @@ void StrongPHIElimination::processBlock(MachineBasicBlock* MBB) { void StrongPHIElimination::processPHIUnion(MachineInstr* Inst, std::set& PHIUnion, - std::vector& DF) { + std::vector& DF, + std::vector >& locals) { std::vector worklist(DF.begin(), DF.end()); SmallPtrSet visited; @@ -323,7 +329,6 @@ void StrongPHIElimination::processPHIUnion(MachineInstr* Inst, visited.insert(DFNode); bool inserted = false; - SmallPtrSet interferences; for (DomForestNode::iterator CI = DFNode->begin(), CE = DFNode->end(); CI != CE; ++CI) { DomForestNode* child = *CI; @@ -342,7 +347,8 @@ void StrongPHIElimination::processPHIUnion(MachineInstr* Inst, } } 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)) {