mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
Rename mapValue to extendRange because that is its function now.
Simplify the signature - The return value and ParentVNI are no longer needed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126809 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e0ab24532c
commit
d3fdaeb69a
@ -214,24 +214,17 @@ void LiveIntervalMap::reset(LiveInterval *li) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// mapValue - Find the mapped value for ParentVNI at Idx.
|
// extendRange - Extend the live range to reach Idx.
|
||||||
// Potentially create phi-def values.
|
// Potentially create phi-def values.
|
||||||
VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx,
|
void LiveIntervalMap::extendRange(SlotIndex Idx) {
|
||||||
bool *simple) {
|
|
||||||
assert(LI && "call reset first");
|
assert(LI && "call reset first");
|
||||||
assert(ParentVNI && "Mapping NULL value");
|
|
||||||
assert(Idx.isValid() && "Invalid SlotIndex");
|
assert(Idx.isValid() && "Invalid SlotIndex");
|
||||||
assert(ParentLI.getVNInfoAt(Idx) == ParentVNI && "Bad ParentVNI");
|
|
||||||
|
|
||||||
// This is a complex mapped value. There may be multiple defs, and we may need
|
|
||||||
// to create phi-defs.
|
|
||||||
if (simple) *simple = false;
|
|
||||||
MachineBasicBlock *IdxMBB = LIS.getMBBFromIndex(Idx);
|
MachineBasicBlock *IdxMBB = LIS.getMBBFromIndex(Idx);
|
||||||
assert(IdxMBB && "No MBB at Idx");
|
assert(IdxMBB && "No MBB at Idx");
|
||||||
|
|
||||||
// Is there a def in the same MBB we can extend?
|
// Is there a def in the same MBB we can extend?
|
||||||
if (VNInfo *VNI = LI->extendInBlock(LIS.getMBBStartIdx(IdxMBB), Idx))
|
if (LI->extendInBlock(LIS.getMBBStartIdx(IdxMBB), Idx))
|
||||||
return VNI;
|
return;
|
||||||
|
|
||||||
// Now for the fun part. We know that ParentVNI potentially has multiple defs,
|
// Now for the fun part. We know that ParentVNI potentially has multiple defs,
|
||||||
// and we may need to create even more phi-defs to preserve VNInfo SSA form.
|
// and we may need to create even more phi-defs to preserve VNInfo SSA form.
|
||||||
@ -395,7 +388,6 @@ VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx,
|
|||||||
// Since we went through the trouble of a full BFS visiting all reaching defs,
|
// Since we went through the trouble of a full BFS visiting all reaching defs,
|
||||||
// the values in LiveIn are now accurate. No more phi-defs are needed
|
// the values in LiveIn are now accurate. No more phi-defs are needed
|
||||||
// for these blocks, so we can color the live ranges.
|
// for these blocks, so we can color the live ranges.
|
||||||
// This makes the next mapValue call much faster.
|
|
||||||
for (unsigned i = 0, e = LiveIn.size(); i != e; ++i) {
|
for (unsigned i = 0, e = LiveIn.size(); i != e; ++i) {
|
||||||
MachineBasicBlock *MBB = LiveIn[i]->getBlock();
|
MachineBasicBlock *MBB = LiveIn[i]->getBlock();
|
||||||
SlotIndex Start = LIS.getMBBStartIdx(MBB);
|
SlotIndex Start = LIS.getMBBStartIdx(MBB);
|
||||||
@ -408,8 +400,6 @@ VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx,
|
|||||||
else
|
else
|
||||||
LI->addRange(LiveRange(Start, LIS.getMBBEndIdx(MBB), VNI));
|
LI->addRange(LiveRange(Start, LIS.getMBBEndIdx(MBB), VNI));
|
||||||
}
|
}
|
||||||
|
|
||||||
return IdxVNI;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
@ -681,8 +671,8 @@ void SplitEditor::overlapIntv(SlotIndex Start, SlotIndex End) {
|
|||||||
assert(LIS.getMBBFromIndex(Start) == LIS.getMBBFromIndex(End) &&
|
assert(LIS.getMBBFromIndex(Start) == LIS.getMBBFromIndex(End) &&
|
||||||
"Range cannot span basic blocks");
|
"Range cannot span basic blocks");
|
||||||
|
|
||||||
// Treat this as useIntv() for now. The complement interval will be extended
|
// Treat this as useIntv() for now.
|
||||||
// as needed by mapValue().
|
// The complement interval will be extended as needed by extendRange().
|
||||||
DEBUG(dbgs() << " overlapIntv [" << Start << ';' << End << "):");
|
DEBUG(dbgs() << " overlapIntv [" << Start << ';' << End << "):");
|
||||||
RegAssign.insert(Start, End, OpenIdx);
|
RegAssign.insert(Start, End, OpenIdx);
|
||||||
DEBUG(dump());
|
DEBUG(dump());
|
||||||
@ -726,8 +716,7 @@ void SplitEditor::rewriteAssigned() {
|
|||||||
<< Idx << ':' << RegIdx << '\t' << *MI);
|
<< Idx << ':' << RegIdx << '\t' << *MI);
|
||||||
|
|
||||||
// Extend liveness to Idx.
|
// Extend liveness to Idx.
|
||||||
const VNInfo *ParentVNI = Edit.getParent().getVNInfoAt(Idx);
|
LIMappers[RegIdx].extendRange(Idx);
|
||||||
LIMappers[RegIdx].mapValue(ParentVNI, Idx);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -780,7 +769,7 @@ void SplitEditor::finish() {
|
|||||||
|
|
||||||
// FIXME: Don't recompute the liveness of all values, infer it from the
|
// FIXME: Don't recompute the liveness of all values, infer it from the
|
||||||
// overlaps between the parent live interval and RegAssign.
|
// overlaps between the parent live interval and RegAssign.
|
||||||
// The mapValue algorithm is only necessary when:
|
// The extendRange algorithm is only necessary when:
|
||||||
// - The parent value maps to multiple defs, and new phis are needed, or
|
// - The parent value maps to multiple defs, and new phis are needed, or
|
||||||
// - The value has been rematerialized before some uses, and we want to
|
// - The value has been rematerialized before some uses, and we want to
|
||||||
// minimize the live range so it only reaches the remaining uses.
|
// minimize the live range so it only reaches the remaining uses.
|
||||||
@ -808,7 +797,7 @@ void SplitEditor::finish() {
|
|||||||
DEBUG(dbgs() << " has parent valno #" << VNI->id << " live out\n");
|
DEBUG(dbgs() << " has parent valno #" << VNI->id << " live out\n");
|
||||||
assert(RegAssign.lookup(End) == RegIdx &&
|
assert(RegAssign.lookup(End) == RegIdx &&
|
||||||
"Different register assignment in phi predecessor");
|
"Different register assignment in phi predecessor");
|
||||||
LIM.mapValue(VNI, End);
|
LIM.extendRange(End);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DEBUG(dbgs() << " is not live-out\n");
|
DEBUG(dbgs() << " is not live-out\n");
|
||||||
|
@ -195,16 +195,9 @@ public:
|
|||||||
/// getLI - return the current live interval.
|
/// getLI - return the current live interval.
|
||||||
LiveInterval *getLI() const { return LI; }
|
LiveInterval *getLI() const { return LI; }
|
||||||
|
|
||||||
/// mapValue - map ParentVNI to the corresponding LI value at Idx. It is
|
/// extendRange - Extend the live range of LI so it reaches Idx.
|
||||||
/// assumed that ParentVNI is live at Idx.
|
/// Insert PHIDefs as needed to preserve SSA form.
|
||||||
/// If ParentVNI has not been defined by defValue, it is assumed that
|
void extendRange(SlotIndex Idx);
|
||||||
/// ParentVNI->def dominates Idx.
|
|
||||||
/// If ParentVNI has been defined by defValue one or more times, a value that
|
|
||||||
/// dominates Idx will be returned. This may require creating extra phi-def
|
|
||||||
/// values and adding live ranges to LI.
|
|
||||||
/// If simple is not NULL, *simple will indicate if ParentVNI is a simply
|
|
||||||
/// mapped value.
|
|
||||||
VNInfo *mapValue(const VNInfo *ParentVNI, SlotIndex Idx, bool *simple = 0);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user