We also need to collect the VN IDs for the PHI instructions for later updating.

llvm-svn: 48278
This commit is contained in:
Owen Anderson 2008-03-12 04:22:57 +00:00
parent ecc3b561eb
commit df98435a16

View File

@ -52,8 +52,12 @@ namespace {
std::set<unsigned> UsedByAnother;
// RenameSets are the sets of operands (and their VNInfo IDs) to a PHI
// (the defining instruction of the key) that can be renamed without copies
// (the defining instruction of the key) that can be renamed without copies.
std::map<unsigned, std::map<unsigned, unsigned> > RenameSets;
// PhiValueNumber holds the ID numbers of the VNs for each phi that we're
// eliminating, indexed by the register defined by that phi.
std::map<unsigned, unsigned> PhiValueNumber;
// Store the DFS-in number of each block
DenseMap<MachineBasicBlock*, unsigned> preorder;
@ -405,6 +409,11 @@ void StrongPHIElimination::processBlock(MachineBasicBlock* MBB) {
while (P != MBB->end() && P->getOpcode() == TargetInstrInfo::PHI) {
unsigned DestReg = P->getOperand(0).getReg();
LiveInterval& PI = LI.getOrCreateInterval(DestReg);
unsigned pIdx = LI.getInstructionIndex(P);
VNInfo* PVN = PI.getLiveRangeContaining(pIdx)->valno;
PhiValueNumber.insert(std::make_pair(DestReg, PVN->id));
// PHIUnion is the set of incoming registers to the PHI node that
// are going to be renames rather than having copies inserted. This set
// is refinded over the course of this function. UnionedBlocks is the set