From dfd07eab24394659ad445d6f7998fa31c1908d73 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Wed, 12 Mar 2008 04:22:57 +0000 Subject: We also need to collect the VN IDs for the PHI instructions for later updating. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48278 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/StrongPHIElimination.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'lib/CodeGen/StrongPHIElimination.cpp') diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp index 6467afe..9dd7ddc 100644 --- a/lib/CodeGen/StrongPHIElimination.cpp +++ b/lib/CodeGen/StrongPHIElimination.cpp @@ -52,8 +52,12 @@ namespace { std::set 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 > 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 PhiValueNumber; // Store the DFS-in number of each block DenseMap 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 -- cgit v1.1