diff options
Diffstat (limited to 'llvm/lib/CodeGen/SplitKit.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SplitKit.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SplitKit.cpp b/llvm/lib/CodeGen/SplitKit.cpp index b1c8622..d6c0a78 100644 --- a/llvm/lib/CodeGen/SplitKit.cpp +++ b/llvm/lib/CodeGen/SplitKit.cpp @@ -45,6 +45,11 @@ using namespace llvm; #define DEBUG_TYPE "regalloc" +static cl::opt<bool> + EnableLoopIVHeuristic("enable-split-loopiv-heuristic", + cl::desc("Enable loop iv regalloc heuristic"), + cl::init(true)); + STATISTIC(NumFinished, "Number of splits finished"); STATISTIC(NumSimple, "Number of splits that were simple"); STATISTIC(NumCopies, "Number of copies inserted for splitting"); @@ -293,6 +298,13 @@ void SplitAnalysis::calcLiveBlockInfo() { MFI = LIS.getMBBFromIndex(LVI->start)->getIterator(); } + LooksLikeLoopIV = EnableLoopIVHeuristic && UseBlocks.size() == 2 && + any_of(UseBlocks, [this](BlockInfo &BI) { + MachineLoop *L = Loops.getLoopFor(BI.MBB); + return BI.LiveIn && BI.LiveOut && BI.FirstDef && L && + L->isLoopLatch(BI.MBB); + }); + assert(getNumLiveBlocks() == countLiveBlocks(CurLI) && "Bad block count"); } |