Author: resistor Date: Tue Nov 13 14:04:45 2007 New Revision: 44063 URL: http://llvm.org/viewvc/llvm-project?rev=44063&view=rev Log: Preserve LiveVariables when doing critical edge splitting.
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=44063&r1=44062&r2=44063&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Tue Nov 13 14:04:45 2007 @@ -26,6 +26,7 @@ #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstr.h" +#include "llvm/CodeGen/SSARegMap.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/ADT/Statistic.h" @@ -296,12 +297,15 @@ } } +/// breakCriticalEdges - Break critical edges coming into blocks with PHI +/// nodes, preserving dominator and livevariable info. void StrongPHIElimination::breakCriticalEdges(MachineFunction &Fn) { typedef std::pair<MachineBasicBlock*, MachineBasicBlock*> MBB_pair; MachineDominatorTree& MDT = getAnalysis<MachineDominatorTree>(); - //LiveVariables& LV = getAnalysis<LiveVariables>(); + LiveVariables& LV = getAnalysis<LiveVariables>(); + // Find critical edges std::vector<MBB_pair> criticals; for (MachineFunction::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) if (!I->empty() && @@ -314,9 +318,16 @@ for (std::vector<MBB_pair>::iterator I = criticals.begin(), E = criticals.end(); I != E; ++I) { - SplitCriticalMachineEdge(I->first, I->second); + // Split the edge + MachineBasicBlock* new_bb = SplitCriticalMachineEdge(I->first, I->second); + // Update dominators MDT.splitBlock(I->first); + + // Update livevariables + for (unsigned var = 1024; var < Fn.getSSARegMap()->getLastVirtReg(); ++var) + if (isLiveOut(LV.getVarInfo(var), I->first)) + LV.getVarInfo(var).AliveBlocks.set(new_bb->getNumber()); } } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits