From 7200c6b82acb8401048a2bc8a423f23b48db6731 Mon Sep 17 00:00:00 2001 From: Alkis Evlogimenos Date: Sun, 22 Feb 2004 04:05:13 +0000 Subject: [PATCH] Abstract merging of ranges away from number of slots per instruction. Also make it less aggressive as the current implementation breaks in some cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11696 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/LiveIntervalAnalysis.h | 5 ++++- include/llvm/CodeGen/LiveIntervals.h | 5 ++++- lib/CodeGen/LiveIntervalAnalysis.cpp | 10 +++++++--- lib/CodeGen/LiveIntervalAnalysis.h | 5 ++++- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h index 3769f07de75..24bc8956b3f 100644 --- a/include/llvm/CodeGen/LiveIntervalAnalysis.h +++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h @@ -126,7 +126,10 @@ namespace llvm { }; static unsigned getBaseIndex(unsigned index) { - return index - (index % 4); + return index - (index % InstrSlots::NUM); + } + static unsigned getBoundaryIndex(unsigned index) { + return getBaseIndex(index + InstrSlots::NUM - 1); } static unsigned getLoadIndex(unsigned index) { return getBaseIndex(index) + InstrSlots::LOAD; diff --git a/include/llvm/CodeGen/LiveIntervals.h b/include/llvm/CodeGen/LiveIntervals.h index 3769f07de75..24bc8956b3f 100644 --- a/include/llvm/CodeGen/LiveIntervals.h +++ b/include/llvm/CodeGen/LiveIntervals.h @@ -126,7 +126,10 @@ namespace llvm { }; static unsigned getBaseIndex(unsigned index) { - return index - (index % 4); + return index - (index % InstrSlots::NUM); + } + static unsigned getBoundaryIndex(unsigned index) { + return getBaseIndex(index + InstrSlots::NUM - 1); } static unsigned getLoadIndex(unsigned index) { return getBaseIndex(index) + InstrSlots::LOAD; diff --git a/lib/CodeGen/LiveIntervalAnalysis.cpp b/lib/CodeGen/LiveIntervalAnalysis.cpp index 00e366fbb30..f15d6cd1b35 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -227,6 +227,7 @@ void LiveIntervals::updateSpilledInterval(Interval& li, int slot) // the new spill weight is now infinity as it cannot be spilled again li.weight = std::numeric_limits::infinity(); DEBUG(std::cerr << '\n'); + DEBUG(std::cerr << "\t\t\t\tupdated interval: " << li << '\n'); } void LiveIntervals::printRegName(unsigned reg) const @@ -652,8 +653,10 @@ void LiveIntervals::Interval::join(const LiveIntervals::Interval& other) LiveIntervals::Interval::Ranges::iterator LiveIntervals::Interval::mergeRangesForward(Ranges::iterator it) { - for (Ranges::iterator n = next(it); - n != ranges.end() && ((it->second & 1) + it->second) >= n->first; ) { + Ranges::iterator n; + while ((n = next(it)) != ranges.end()) { + if (n->first > it->second) + break; it->second = std::max(it->second, n->second); n = ranges.erase(n); } @@ -665,7 +668,8 @@ LiveIntervals::Interval::mergeRangesBackward(Ranges::iterator it) { while (it != ranges.begin()) { Ranges::iterator p = prior(it); - if (it->first > ((p->second & 1) + p->second)) break; + if (it->first > p->second) + break; it->first = std::min(it->first, p->first); it->second = std::max(it->second, p->second); diff --git a/lib/CodeGen/LiveIntervalAnalysis.h b/lib/CodeGen/LiveIntervalAnalysis.h index 3769f07de75..24bc8956b3f 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.h +++ b/lib/CodeGen/LiveIntervalAnalysis.h @@ -126,7 +126,10 @@ namespace llvm { }; static unsigned getBaseIndex(unsigned index) { - return index - (index % 4); + return index - (index % InstrSlots::NUM); + } + static unsigned getBoundaryIndex(unsigned index) { + return getBaseIndex(index + InstrSlots::NUM - 1); } static unsigned getLoadIndex(unsigned index) { return getBaseIndex(index) + InstrSlots::LOAD; -- 2.34.1