Author: XChy
Date: 2025-08-12T03:52:37+08:00
New Revision: fc9d5f29201e54017e88593102f81d3019fd61e6

URL: 
https://github.com/llvm/llvm-project/commit/fc9d5f29201e54017e88593102f81d3019fd61e6
DIFF: 
https://github.com/llvm/llvm-project/commit/fc9d5f29201e54017e88593102f81d3019fd61e6.diff

LOG: Revert "[DFAJumpThreading] Prevent pass from using too much memory. 
(#145482)"

This reverts commit b5902924b27348dfae35a501f8b6e5b66f3bed46.

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp 
b/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp
index a7ba54f03e61e..938aab5879044 100644
--- a/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp
+++ b/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp
@@ -582,17 +582,15 @@ struct AllSwitchPaths {
     VisitedBlocks VB;
     // Get paths from the determinator BBs to SwitchPhiDefBB
     std::vector<ThreadingPath> PathsToPhiDef =
-        getPathsFromStateDefMap(StateDef, SwitchPhi, VB, MaxNumPaths);
+        getPathsFromStateDefMap(StateDef, SwitchPhi, VB);
     if (SwitchPhiDefBB == SwitchBlock) {
       TPaths = std::move(PathsToPhiDef);
       return;
     }
 
-    assert(MaxNumPaths >= PathsToPhiDef.size());
-    auto PathsLimit = MaxNumPaths / PathsToPhiDef.size();
     // Find and append paths from SwitchPhiDefBB to SwitchBlock.
     PathsType PathsToSwitchBB =
-        paths(SwitchPhiDefBB, SwitchBlock, VB, /* PathDepth = */ 1, 
PathsLimit);
+        paths(SwitchPhiDefBB, SwitchBlock, VB, /* PathDepth = */ 1);
     if (PathsToSwitchBB.empty())
       return;
 
@@ -613,16 +611,13 @@ struct AllSwitchPaths {
   typedef DenseMap<const BasicBlock *, const PHINode *> StateDefMap;
   std::vector<ThreadingPath> getPathsFromStateDefMap(StateDefMap &StateDef,
                                                      PHINode *Phi,
-                                                     VisitedBlocks &VB,
-                                                     unsigned PathsLimit) {
+                                                     VisitedBlocks &VB) {
     std::vector<ThreadingPath> Res;
     auto *PhiBB = Phi->getParent();
     VB.insert(PhiBB);
 
     VisitedBlocks UniqueBlocks;
     for (auto *IncomingBB : Phi->blocks()) {
-      if (Res.size() >= PathsLimit)
-        break;
       if (!UniqueBlocks.insert(IncomingBB).second)
         continue;
       if (!SwitchOuterLoop->contains(IncomingBB))
@@ -658,9 +653,8 @@ struct AllSwitchPaths {
 
       // Direct predecessor, just add to the path.
       if (IncomingPhiDefBB == IncomingBB) {
-        assert(PathsLimit > Res.size());
-        std::vector<ThreadingPath> PredPaths = getPathsFromStateDefMap(
-            StateDef, IncomingPhi, VB, PathsLimit - Res.size());
+        std::vector<ThreadingPath> PredPaths =
+            getPathsFromStateDefMap(StateDef, IncomingPhi, VB);
         for (ThreadingPath &Path : PredPaths) {
           Path.push_back(PhiBB);
           Res.push_back(std::move(Path));
@@ -673,17 +667,13 @@ struct AllSwitchPaths {
         continue;
 
       PathsType IntermediatePaths;
-      assert(PathsLimit > Res.size());
-      auto InterPathLimit = PathsLimit - Res.size();
-      IntermediatePaths = paths(IncomingPhiDefBB, IncomingBB, VB,
-                                /* PathDepth = */ 1, InterPathLimit);
+      IntermediatePaths =
+          paths(IncomingPhiDefBB, IncomingBB, VB, /* PathDepth = */ 1);
       if (IntermediatePaths.empty())
         continue;
 
-      assert(InterPathLimit >= IntermediatePaths.size());
-      auto PredPathLimit = InterPathLimit / IntermediatePaths.size();
       std::vector<ThreadingPath> PredPaths =
-          getPathsFromStateDefMap(StateDef, IncomingPhi, VB, PredPathLimit);
+          getPathsFromStateDefMap(StateDef, IncomingPhi, VB);
       for (const ThreadingPath &Path : PredPaths) {
         for (const PathType &IPath : IntermediatePaths) {
           ThreadingPath NewPath(Path);
@@ -698,7 +688,7 @@ struct AllSwitchPaths {
   }
 
   PathsType paths(BasicBlock *BB, BasicBlock *ToBB, VisitedBlocks &Visited,
-                  unsigned PathDepth, unsigned PathsLimit) {
+                  unsigned PathDepth) {
     PathsType Res;
 
     // Stop exploring paths after visiting MaxPathLength blocks
@@ -725,8 +715,6 @@ struct AllSwitchPaths {
     // is used to prevent a duplicate path from being generated
     SmallSet<BasicBlock *, 4> Successors;
     for (BasicBlock *Succ : successors(BB)) {
-      if (Res.size() >= PathsLimit)
-        break;
       if (!Successors.insert(Succ).second)
         continue;
 
@@ -748,12 +736,14 @@ struct AllSwitchPaths {
       // coverage and compile time.
       if (LI->getLoopFor(Succ) != CurrLoop)
         continue;
-      assert(PathsLimit > Res.size());
-      PathsType SuccPaths =
-          paths(Succ, ToBB, Visited, PathDepth + 1, PathsLimit - Res.size());
+
+      PathsType SuccPaths = paths(Succ, ToBB, Visited, PathDepth + 1);
       for (PathType &Path : SuccPaths) {
         Path.push_front(BB);
         Res.push_back(Path);
+        if (Res.size() >= MaxNumPaths) {
+          return Res;
+        }
       }
     }
     // This block could now be visited again from a 
diff erent predecessor. Note


        
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to