summaryrefslogtreecommitdiff
path: root/lib
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
commit521a453721aeefbb6783b6acc8ea36b3c18b4931 (patch)
tree51fc94714732cdbe7e9e2a08f500ca43772a5ae8 /lib
parent333f5194cbffd98c30667d2a70df210bae06d220 (diff)
downloadllvm-521a453721aeefbb6783b6acc8ea36b3c18b4931.tar.gz
llvm-521a453721aeefbb6783b6acc8ea36b3c18b4931.tar.bz2
llvm-521a453721aeefbb6783b6acc8ea36b3c18b4931.tar.xz
Separate SplitAnalysis::getSplitLoops().
This method returns the set of loops with uses that are candidates for splitting. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121870 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/SplitKit.cpp17
-rw-r--r--lib/CodeGen/SplitKit.h4
2 files changed, 14 insertions, 7 deletions
diff --git a/lib/CodeGen/SplitKit.cpp b/lib/CodeGen/SplitKit.cpp
index ed2725eed9..fd18729b85 100644
--- a/lib/CodeGen/SplitKit.cpp
+++ b/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/lib/CodeGen/SplitKit.h b/lib/CodeGen/SplitKit.h
index b1d5a47804..f290eb6461 100644
--- a/lib/CodeGen/SplitKit.h
+++ b/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();