mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-13 19:24:21 +00:00
We also need to collect the VN IDs for the PHI instructions for later updating.
llvm-svn: 48278
This commit is contained in:
parent
70aaab6dc5
commit
944b1c76ab
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user