[SCEV][NFC] Introduce API for getting basic block's symbolic max exit count
authorMax Kazantsev <mkazantsev@azul.com>
Tue, 22 Nov 2022 08:52:49 +0000 (15:52 +0700)
committerMax Kazantsev <mkazantsev@azul.com>
Tue, 22 Nov 2022 09:02:58 +0000 (16:02 +0700)
Currently, it just returns exact exit count. This is a refectoring step
before it is actually implemented.

llvm/include/llvm/Analysis/ScalarEvolution.h
llvm/lib/Analysis/ScalarEvolution.cpp

index 49f8ae8..47fddb3 100644 (file)
@@ -1462,6 +1462,10 @@ private:
     /// Get the symbolic max backedge taken count for the loop.
     const SCEV *getSymbolicMax(const Loop *L, ScalarEvolution *SE);
 
+    /// Get the symbolic max backedge taken count for the particular loop exit.
+    const SCEV *getSymbolicMax(const BasicBlock *ExitingBlock,
+                               ScalarEvolution *SE) const;
+
     /// Return true if the number of times this backedge is taken is either the
     /// value returned by getConstantMax or zero.
     bool isConstantMaxOrZero(ScalarEvolution *SE) const;
index dd4fd89..6bd4aa3 100644 (file)
@@ -8223,8 +8223,9 @@ const SCEV *ScalarEvolution::getExitCount(const Loop *L,
                                           ExitCountKind Kind) {
   switch (Kind) {
   case Exact:
-  case SymbolicMaximum:
     return getBackedgeTakenInfo(L).getExact(ExitingBlock, this);
+  case SymbolicMaximum:
+    return getBackedgeTakenInfo(L).getSymbolicMax(ExitingBlock, this);
   case ConstantMaximum:
     return getBackedgeTakenInfo(L).getConstantMax(ExitingBlock, this);
   };
@@ -8556,6 +8557,12 @@ const SCEV *ScalarEvolution::BackedgeTakenInfo::getConstantMax(
   return SE->getCouldNotCompute();
 }
 
+const SCEV *ScalarEvolution::BackedgeTakenInfo::getSymbolicMax(
+    const BasicBlock *ExitingBlock, ScalarEvolution *SE) const {
+  // FIXME: Need to implement this. Return exact for now.
+  return getExact(ExitingBlock, SE);
+}
+
 /// getConstantMax - Get the constant max backedge taken count for the loop.
 const SCEV *
 ScalarEvolution::BackedgeTakenInfo::getConstantMax(ScalarEvolution *SE) const {