mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 16:09:57 +00:00
Never propagate the idom value out of a block that defines its own value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117669 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
44ab89eb37
commit
c94fcb1507
@ -441,7 +441,8 @@ VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx,
|
||||
if (VNInfo *VNI = extendTo(Pred, Last)) {
|
||||
MachineBasicBlock *DefMBB = lis_.getMBBFromIndex(VNI->def);
|
||||
DEBUG(dbgs() << " found valno #" << VNI->id
|
||||
<< " at BB#" << DefMBB->getNumber() << '\n');
|
||||
<< " from BB#" << DefMBB->getNumber()
|
||||
<< " at BB#" << Pred->getNumber() << '\n');
|
||||
LiveOutPair &LOP = LOIP.first->second;
|
||||
LOP.first = VNI;
|
||||
LOP.second = mdt_[lis_.getMBBFromIndex(VNI->def)];
|
||||
@ -528,11 +529,14 @@ VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx,
|
||||
I->second = LiveOutPair(VNI, Node);
|
||||
}
|
||||
} else if (IDomValue.first) {
|
||||
// No phi-def here. Propagate IDomValue if needed.
|
||||
// No phi-def here. Remember incoming value for IdxMBB.
|
||||
if (MBB == IdxMBB)
|
||||
IdxVNI = IDomValue.first;
|
||||
// Propagate IDomValue if needed:
|
||||
// MBB is live-out and doesn't define its own value.
|
||||
LiveOutMap::iterator I = liveOutCache_.find(MBB);
|
||||
if (I != liveOutCache_.end() && I->second.first != IDomValue.first) {
|
||||
if (I != liveOutCache_.end() && I->second.second != Node &&
|
||||
I->second.first != IDomValue.first) {
|
||||
++Changes;
|
||||
I->second = IDomValue;
|
||||
DEBUG(dbgs() << " - BB#" << MBB->getNumber()
|
||||
|
Loading…
Reference in New Issue
Block a user