mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-04 10:04:33 +00:00
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
This commit is contained in:
parent
0031671b41
commit
dfd07eab24
@ -52,9 +52,13 @@ namespace {
|
|||||||
std::set<unsigned> UsedByAnother;
|
std::set<unsigned> UsedByAnother;
|
||||||
|
|
||||||
// RenameSets are the sets of operands (and their VNInfo IDs) to a PHI
|
// 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;
|
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
|
// Store the DFS-in number of each block
|
||||||
DenseMap<MachineBasicBlock*, unsigned> preorder;
|
DenseMap<MachineBasicBlock*, unsigned> preorder;
|
||||||
|
|
||||||
@ -405,6 +409,11 @@ void StrongPHIElimination::processBlock(MachineBasicBlock* MBB) {
|
|||||||
while (P != MBB->end() && P->getOpcode() == TargetInstrInfo::PHI) {
|
while (P != MBB->end() && P->getOpcode() == TargetInstrInfo::PHI) {
|
||||||
unsigned DestReg = P->getOperand(0).getReg();
|
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
|
// PHIUnion is the set of incoming registers to the PHI node that
|
||||||
// are going to be renames rather than having copies inserted. This set
|
// are going to be renames rather than having copies inserted. This set
|
||||||
// is refinded over the course of this function. UnionedBlocks is the set
|
// is refinded over the course of this function. UnionedBlocks is the set
|
||||||
|
Loading…
Reference in New Issue
Block a user