mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
Also recompute HasPHIKill flags in LiveInterval::RenumberValues.
If a phi-def value were removed from the interval, the phi-kill flags are no longer valid. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110949 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
719510a178
commit
fff2c4726b
@ -338,7 +338,8 @@ namespace llvm {
|
|||||||
|
|
||||||
/// RenumberValues - Renumber all values in order of appearance and remove
|
/// RenumberValues - Renumber all values in order of appearance and remove
|
||||||
/// unused values.
|
/// unused values.
|
||||||
void RenumberValues();
|
/// Recalculate phi-kill flags in case any phi-def values were removed.
|
||||||
|
void RenumberValues(LiveIntervals &lis);
|
||||||
|
|
||||||
/// isOnlyLROfValNo - Return true if the specified live range is the only
|
/// isOnlyLROfValNo - Return true if the specified live range is the only
|
||||||
/// one defined by the its val#.
|
/// one defined by the its val#.
|
||||||
|
@ -182,8 +182,9 @@ void LiveInterval::markValNoForDeletion(VNInfo *ValNo) {
|
|||||||
|
|
||||||
/// RenumberValues - Renumber all values in order of appearance and delete the
|
/// RenumberValues - Renumber all values in order of appearance and delete the
|
||||||
/// remaining unused values.
|
/// remaining unused values.
|
||||||
void LiveInterval::RenumberValues() {
|
void LiveInterval::RenumberValues(LiveIntervals &lis) {
|
||||||
SmallPtrSet<VNInfo*, 8> Seen;
|
SmallPtrSet<VNInfo*, 8> Seen;
|
||||||
|
bool seenPHIDef = false;
|
||||||
valnos.clear();
|
valnos.clear();
|
||||||
for (const_iterator I = begin(), E = end(); I != E; ++I) {
|
for (const_iterator I = begin(), E = end(); I != E; ++I) {
|
||||||
VNInfo *VNI = I->valno;
|
VNInfo *VNI = I->valno;
|
||||||
@ -192,6 +193,26 @@ void LiveInterval::RenumberValues() {
|
|||||||
assert(!VNI->isUnused() && "Unused valno used by live range");
|
assert(!VNI->isUnused() && "Unused valno used by live range");
|
||||||
VNI->id = (unsigned)valnos.size();
|
VNI->id = (unsigned)valnos.size();
|
||||||
valnos.push_back(VNI);
|
valnos.push_back(VNI);
|
||||||
|
VNI->setHasPHIKill(false);
|
||||||
|
if (VNI->isPHIDef())
|
||||||
|
seenPHIDef = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recompute phi kill flags.
|
||||||
|
if (!seenPHIDef)
|
||||||
|
return;
|
||||||
|
for (const_vni_iterator I = vni_begin(), E = vni_end(); I != E; ++I) {
|
||||||
|
VNInfo *VNI = *I;
|
||||||
|
if (!VNI->isPHIDef())
|
||||||
|
continue;
|
||||||
|
const MachineBasicBlock *PHIBB = lis.getMBBFromIndex(VNI->def);
|
||||||
|
assert(PHIBB && "No basic block for phi-def");
|
||||||
|
for (MachineBasicBlock::const_pred_iterator PI = PHIBB->pred_begin(),
|
||||||
|
PE = PHIBB->pred_end(); PI != PE; ++PI) {
|
||||||
|
VNInfo *KVNI = getVNInfoAt(lis.getMBBEndIdx(*PI).getPrevSlot());
|
||||||
|
if (KVNI)
|
||||||
|
KVNI->setHasPHIKill(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -645,7 +645,7 @@ void SplitEditor::rewrite() {
|
|||||||
|
|
||||||
// dupli_ goes in last, after rewriting.
|
// dupli_ goes in last, after rewriting.
|
||||||
if (dupli_) {
|
if (dupli_) {
|
||||||
dupli_->RenumberValues();
|
dupli_->RenumberValues(lis_);
|
||||||
intervals_.push_back(dupli_);
|
intervals_.push_back(dupli_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user