diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/LoopAccessAnalysis.cpp | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/llvm/lib/Analysis/LoopAccessAnalysis.cpp b/llvm/lib/Analysis/LoopAccessAnalysis.cpp index 978e7a524df..e17ff6f51cb 100644 --- a/llvm/lib/Analysis/LoopAccessAnalysis.cpp +++ b/llvm/lib/Analysis/LoopAccessAnalysis.cpp @@ -1482,25 +1482,23 @@ bool LoopAccessInfo::canAnalyzeLoop() { // We can only analyze innermost loops. if (!TheLoop->empty()) { DEBUG(dbgs() << "LAA: loop is not the innermost loop\n"); - emitAnalysis(LoopAccessReport() << "loop is not the innermost loop"); + recordAnalysis(LoopAccessReport() << "loop is not the innermost loop"); return false; } // We must have a single backedge. if (TheLoop->getNumBackEdges() != 1) { DEBUG(dbgs() << "LAA: loop control flow is not understood by analyzer\n"); - emitAnalysis( - LoopAccessReport() << - "loop control flow is not understood by analyzer"); + recordAnalysis(LoopAccessReport() + << "loop control flow is not understood by analyzer"); return false; } // We must have a single exiting block. if (!TheLoop->getExitingBlock()) { DEBUG(dbgs() << "LAA: loop control flow is not understood by analyzer\n"); - emitAnalysis( - LoopAccessReport() << - "loop control flow is not understood by analyzer"); + recordAnalysis(LoopAccessReport() + << "loop control flow is not understood by analyzer"); return false; } @@ -1509,17 +1507,16 @@ bool LoopAccessInfo::canAnalyzeLoop() { // instructions in the loop are executed the same number of times. if (TheLoop->getExitingBlock() != TheLoop->getLoopLatch()) { DEBUG(dbgs() << "LAA: loop control flow is not understood by analyzer\n"); - emitAnalysis( - LoopAccessReport() << - "loop control flow is not understood by analyzer"); + recordAnalysis(LoopAccessReport() + << "loop control flow is not understood by analyzer"); return false; } // ScalarEvolution needs to be able to find the exit count. const SCEV *ExitCount = PSE->getBackedgeTakenCount(); if (ExitCount == PSE->getSE()->getCouldNotCompute()) { - emitAnalysis(LoopAccessReport() - << "could not determine number of loop iterations"); + recordAnalysis(LoopAccessReport() + << "could not determine number of loop iterations"); DEBUG(dbgs() << "LAA: SCEV could not compute the loop exit count.\n"); return false; } @@ -1568,8 +1565,8 @@ void LoopAccessInfo::analyzeLoop(AliasAnalysis *AA, LoopInfo *LI, auto *Ld = dyn_cast<LoadInst>(&I); if (!Ld || (!Ld->isSimple() && !IsAnnotatedParallel)) { - emitAnalysis(LoopAccessReport(Ld) - << "read with atomic ordering or volatile read"); + recordAnalysis(LoopAccessReport(Ld) + << "read with atomic ordering or volatile read"); DEBUG(dbgs() << "LAA: Found a non-simple load.\n"); CanVecMem = false; return; @@ -1586,14 +1583,14 @@ void LoopAccessInfo::analyzeLoop(AliasAnalysis *AA, LoopInfo *LI, if (I.mayWriteToMemory()) { auto *St = dyn_cast<StoreInst>(&I); if (!St) { - emitAnalysis(LoopAccessReport(St) - << "instruction cannot be vectorized"); + recordAnalysis(LoopAccessReport(St) + << "instruction cannot be vectorized"); CanVecMem = false; return; } if (!St->isSimple() && !IsAnnotatedParallel) { - emitAnalysis(LoopAccessReport(St) - << "write with atomic ordering or volatile write"); + recordAnalysis(LoopAccessReport(St) + << "write with atomic ordering or volatile write"); DEBUG(dbgs() << "LAA: Found a non-simple store.\n"); CanVecMem = false; return; @@ -1701,7 +1698,7 @@ void LoopAccessInfo::analyzeLoop(AliasAnalysis *AA, LoopInfo *LI, bool CanDoRTIfNeeded = Accesses.canCheckPtrAtRT(*PtrRtChecking, PSE->getSE(), TheLoop, SymbolicStrides); if (!CanDoRTIfNeeded) { - emitAnalysis(LoopAccessReport() << "cannot identify array bounds"); + recordAnalysis(LoopAccessReport() << "cannot identify array bounds"); DEBUG(dbgs() << "LAA: We can't vectorize because we can't find " << "the array bounds.\n"); CanVecMem = false; @@ -1732,8 +1729,8 @@ void LoopAccessInfo::analyzeLoop(AliasAnalysis *AA, LoopInfo *LI, // Check that we found the bounds for the pointer. if (!CanDoRTIfNeeded) { - emitAnalysis(LoopAccessReport() - << "cannot check memory dependencies at runtime"); + recordAnalysis(LoopAccessReport() + << "cannot check memory dependencies at runtime"); DEBUG(dbgs() << "LAA: Can't vectorize with memory checks\n"); CanVecMem = false; return; @@ -1748,7 +1745,7 @@ void LoopAccessInfo::analyzeLoop(AliasAnalysis *AA, LoopInfo *LI, << (PtrRtChecking->Need ? "" : " don't") << " need runtime memory checks.\n"); else { - emitAnalysis( + recordAnalysis( LoopAccessReport() << "unsafe dependent memory operations in loop. Use " "#pragma loop distribute(enable) to allow loop distribution " @@ -1767,7 +1764,7 @@ bool LoopAccessInfo::blockNeedsPredication(BasicBlock *BB, Loop *TheLoop, return !DT->dominates(BB, Latch); } -void LoopAccessInfo::emitAnalysis(LoopAccessReport &Message) { +void LoopAccessInfo::recordAnalysis(LoopAccessReport &Message) { assert(!Report && "Multiple reports generated"); Report = Message; } |

