summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2010-12-15 17:41:19 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2010-12-15 17:41:19 +0000
commit4391f34abad97e505bfb8964cdf22575e0a72dbb (patch)
tree25e366ad47b716e496db0514b77aced281424e79
parentb55fdf8c6f4bd50dc930f7b89a5e2a394447d712 (diff)
downloadbcm5719-llvm-4391f34abad97e505bfb8964cdf22575e0a72dbb.tar.gz
bcm5719-llvm-4391f34abad97e505bfb8964cdf22575e0a72dbb.zip
Separate SplitAnalysis::getSplitLoops().
This method returns the set of loops with uses that are candidates for splitting. llvm-svn: 121870
-rw-r--r--llvm/lib/CodeGen/SplitKit.cpp17
-rw-r--r--llvm/lib/CodeGen/SplitKit.h4
2 files changed, 14 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/SplitKit.cpp b/llvm/lib/CodeGen/SplitKit.cpp
index ed2725eed9c..fd18729b85b 100644
--- a/llvm/lib/CodeGen/SplitKit.cpp
+++ b/llvm/lib/CodeGen/SplitKit.cpp
@@ -257,12 +257,11 @@ void SplitAnalysis::analyze(const LiveInterval *li) {
analyzeUses();
}
-const MachineLoop *SplitAnalysis::getBestSplitLoop() {
- assert(curli_ && "Call analyze() before getBestSplitLoop");
+void SplitAnalysis::getSplitLoops(LoopPtrSet &Loops) {
+ assert(curli_ && "Call analyze() before getSplitLoops");
if (usingLoops_.empty())
- return 0;
+ return;
- LoopPtrSet Loops;
LoopBlocks Blocks;
BlockPtrSet CriticalExits;
@@ -280,11 +279,11 @@ const MachineLoop *SplitAnalysis::getBestSplitLoop() {
// FIXME: We could split a live range with multiple uses in a peripheral
// block and still make progress. However, it is possible that splitting
// another live range will insert copies into a peripheral block, and
- // there is a small chance we can enter an infinity loop, inserting copies
+ // there is a small chance we can enter an infinite loop, inserting copies
// forever.
// For safety, stick to splitting live ranges with uses outside the
// periphery.
- DEBUG(dbgs() << ": multiple peripheral uses\n");
+ DEBUG(dbgs() << ": multiple peripheral uses");
break;
case ContainedInLoop:
DEBUG(dbgs() << ": fully contained\n");
@@ -302,9 +301,13 @@ const MachineLoop *SplitAnalysis::getBestSplitLoop() {
Loops.insert(Loop);
}
- DEBUG(dbgs() << " getBestSplitLoop found " << Loops.size()
+ DEBUG(dbgs() << " getSplitLoops found " << Loops.size()
<< " candidate loops.\n");
+}
+const MachineLoop *SplitAnalysis::getBestSplitLoop() {
+ LoopPtrSet Loops;
+ getSplitLoops(Loops);
if (Loops.empty())
return 0;
diff --git a/llvm/lib/CodeGen/SplitKit.h b/llvm/lib/CodeGen/SplitKit.h
index b1d5a47804f..f290eb64610 100644
--- a/llvm/lib/CodeGen/SplitKit.h
+++ b/llvm/lib/CodeGen/SplitKit.h
@@ -133,6 +133,10 @@ public:
/// these edges, but they do require special treatment.
void getCriticalPreds(const LoopBlocks &Blocks, BlockPtrSet &CriticalPreds);
+ /// getSplitLoops - Get the set of loops that have curli uses and would be
+ /// profitable to split.
+ void getSplitLoops(LoopPtrSet&);
+
/// getBestSplitLoop - Return the loop where curli may best be split to a
/// separate register, or NULL.
const MachineLoop *getBestSplitLoop();
OpenPOWER on IntegriCloud