Skip to content

Commit 74054b5

Browse files
committed
[NFC] Make StackColoring debug mode more concise
1 parent 78e9bca commit 74054b5

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

llvm/lib/CodeGen/StackColoring.cpp

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -652,19 +652,23 @@ LLVM_DUMP_METHOD void StackColoring::dumpIntervals() const {
652652

653653
LLVM_DUMP_METHOD void StackColoring::SlotInfo::dump(const StackColoring* State) const {
654654
unsigned Slot = InvalidIdx;
655-
if (State)
655+
if (State) {
656656
Slot = this - State->Slot2Info.data();
657+
dbgs() << "fi#" << Slot;
658+
} else
657659
dbgs() << "SlotInfo";
658-
if (State)
659-
dbgs() << "(" << Slot << ")";
660-
dbgs()<< ": ";
661-
dbgs() << '\n';
662-
if (State)
663-
if (State->MFI->getObjectAllocation(Slot)) {
664-
State->MFI->getObjectAllocation(Slot)->print(dbgs());
665-
dbgs() << '\n';
660+
dbgs() << ":";
661+
if (Offset != InvalidIdx)
662+
dbgs() << " offset=" << Offset;
663+
if (State) {
664+
if (State->MFI->getObjectAllocation(Slot))
665+
dbgs() << " \"" << State->MFI->getObjectAllocation(Slot)->getName() << "\"";
666+
if (State->MFI->isSpillSlotObjectIndex(Slot))
667+
dbgs() << " spill";
666668
}
667-
dbgs() << "Size=" << Size << " Align=" << Align.value() << '\n';
669+
dbgs() << " size=" << Size << " align=" << Align.value() << '\n';
670+
if (IndexBasedLiveRange)
671+
dbgs() << "Index: " << *IndexBasedLiveRange << "\n";
668672
dumpBV("LIVENESS ", Liveness);
669673
BitVector Start;
670674
Start.resize(Liveness.size());
@@ -1607,7 +1611,7 @@ unsigned StackColoring::doMerging(unsigned NumSlots) {
16071611
LatestStatus.resize(LivenessSize, Status{});
16081612
SmallVector<Status> OlderStatus;
16091613

1610-
auto FindOffset = [&](SlotInfo &Info, unsigned Pt) {
1614+
auto FindStatus = [&](SlotInfo &Info, unsigned Pt) -> Status& {
16111615
Status *Last = &LatestStatus[Pt];
16121616

16131617
// The slots in the linked-list are always kept in ascending order, so the
@@ -1617,9 +1621,9 @@ unsigned StackColoring::doMerging(unsigned NumSlots) {
16171621
while (LLVM_UNLIKELY(Last->Slot != InvalidIdx &&
16181622
!HasOverlapCached(Info, Slot2Info[Last->Slot])))
16191623
Last = &OlderStatus[Last->Prev];
1620-
return Last->Offset;
1624+
return *Last;
16211625
};
1622-
auto UpdateOffset = [&](SlotInfo &Info, unsigned Pt, unsigned Offset) {
1626+
auto UpdateStatus = [&](SlotInfo &Info, unsigned Pt, unsigned Offset) {
16231627
Status* Last = &LatestStatus[Pt];
16241628
unsigned Idx = OlderStatus.size();
16251629
OlderStatus.push_back(*Last);
@@ -1656,16 +1660,25 @@ unsigned StackColoring::doMerging(unsigned NumSlots) {
16561660
Candidates.push_back(SlotStack.pop_back_val());
16571661
}
16581662

1663+
LLVM_DEBUG(dbgs() << "\nStarting Placement:\n");
16591664
unsigned WorseCaseOffset = 0;
16601665
while (!Candidates.empty()) {
16611666
unsigned BestIdx = InvalidIdx;
16621667
unsigned BestOffset = InvalidIdx;
16631668

1669+
LLVM_DEBUG(dbgs() << "top=" << WorseCaseOffset << " choosing: ");
16641670
for (unsigned K = 0; K < Candidates.size(); K++) {
16651671
SlotInfo &Info = Slot2Info[Candidates[K]];
16661672
unsigned Offset = 0;
1673+
unsigned PrevSlot = InvalidIdx;
1674+
(void)PrevSlot; // Only use in LLVM_DEBUG
1675+
16671676
for (unsigned Pt : Info.Liveness.set_bits()) {
1668-
Offset = std::max(Offset, FindOffset(Info, Pt));
1677+
Status S = FindStatus(Info, Pt);
1678+
if (S.Offset > Offset) {
1679+
PrevSlot = S.Slot;
1680+
Offset = S.Offset;
1681+
}
16691682

16701683
// If Offset == WorseCaseOffset, this is always a valid, options. so no
16711684
// more checking needed
@@ -1677,7 +1690,10 @@ unsigned StackColoring::doMerging(unsigned NumSlots) {
16771690

16781691
Offset = alignTo(Offset, Info.Align);
16791692

1680-
LLVM_DEBUG(dbgs() << "choice: SlotInfo(" << Candidates[K] << ") at " << Offset << "\n");
1693+
LLVM_DEBUG(dbgs() << "fi#" << Candidates[K] << "@" << Offset << "->";
1694+
if (PrevSlot == InvalidIdx) dbgs() << "bottom";
1695+
else dbgs() << "fi#" << PrevSlot; dbgs() << ", ";);
1696+
16811697
bool IsBetter = [&] {
16821698
if (BestOffset != Offset)
16831699
return BestOffset > Offset;
@@ -1699,15 +1715,15 @@ unsigned StackColoring::doMerging(unsigned NumSlots) {
16991715
}
17001716
}
17011717
SlotInfo &Info = Slot2Info[Candidates[BestIdx]];
1718+
Info.Offset = BestOffset;
1719+
WorseCaseOffset = std::max(WorseCaseOffset, BestOffset + Info.Size);
17021720

1721+
LLVM_DEBUG(dbgs() << "\n");
1722+
LLVM_DEBUG(dbgs() << "Placing: ");
17031723
LLVM_DEBUG(Info.dump(this));
1704-
LLVM_DEBUG(dbgs() << "Placing SlotInfo(" << Candidates[BestIdx] << ") at "
1705-
<< BestOffset << "\n");
17061724

1707-
Info.Offset = BestOffset;
1708-
WorseCaseOffset = std::max(WorseCaseOffset, BestOffset + Info.Size);
17091725
for (unsigned Pt : Info.Liveness.set_bits())
1710-
UpdateOffset(Info, Pt, BestOffset + Info.Size);
1726+
UpdateStatus(Info, Pt, BestOffset + Info.Size);
17111727
#ifdef EXPENSIVE_CHECKS
17121728
// Validate the order of offsets in the linked-list
17131729
for (Status &S : LatestStatus) {
@@ -1786,13 +1802,9 @@ bool StackColoring::run(MachineFunction &Func) {
17861802
unsigned TotalSize = 0;
17871803
LLVM_DEBUG(dbgs() << "Found " << NumMarkers << " markers and " << NumSlots
17881804
<< " slots\n");
1789-
LLVM_DEBUG(dbgs() << "Slot structure:\n");
17901805

1791-
for (int i=0; i < MFI->getObjectIndexEnd(); ++i) {
1792-
LLVM_DEBUG(dbgs() << "Slot #" << i << " - " << MFI->getObjectSize(i)
1793-
<< " bytes.\n");
1806+
for (int i=0; i < MFI->getObjectIndexEnd(); ++i)
17941807
TotalSize += MFI->getObjectSize(i);
1795-
}
17961808

17971809
LLVM_DEBUG(dbgs() << "Total Stack size: " << TotalSize << " bytes\n\n");
17981810

0 commit comments

Comments
 (0)