From f3101f30985962b6aef76a4a4503d5f90454f89b Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Mon, 6 Oct 2025 15:24:47 -0700 Subject: [PATCH 1/2] [NFC][LLVM] Cleanup namespace usage in DFAJumpThreading.cpp --- .../Transforms/Scalar/DFAJumpThreading.cpp | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp b/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp index e9a3e983bc1e2..506980455d782 100644 --- a/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp @@ -121,7 +121,6 @@ static cl::opt cl::Hidden, cl::init(50)); namespace { - class SelectInstToUnfold { SelectInst *SI; PHINode *SIUse; @@ -134,11 +133,14 @@ class SelectInstToUnfold { explicit operator bool() const { return SI && SIUse; } }; +} // namespace -void unfold(DomTreeUpdater *DTU, LoopInfo *LI, SelectInstToUnfold SIToUnfold, - std::vector *NewSIsToUnfold, - std::vector *NewBBs); +static void unfold(DomTreeUpdater *DTU, LoopInfo *LI, + SelectInstToUnfold SIToUnfold, + std::vector *NewSIsToUnfold, + std::vector *NewBBs); +namespace { class DFAJumpThreading { public: DFAJumpThreading(AssumptionCache *AC, DominatorTree *DT, LoopInfo *LI, @@ -173,10 +175,7 @@ class DFAJumpThreading { TargetTransformInfo *TTI; OptimizationRemarkEmitter *ORE; }; - -} // end anonymous namespace - -namespace { +} // namespace /// Unfold the select instruction held in \p SIToUnfold by replacing it with /// control flow. @@ -185,9 +184,10 @@ namespace { /// created basic blocks into \p NewBBs. /// /// TODO: merge it with CodeGenPrepare::optimizeSelectInst() if possible. -void unfold(DomTreeUpdater *DTU, LoopInfo *LI, SelectInstToUnfold SIToUnfold, - std::vector *NewSIsToUnfold, - std::vector *NewBBs) { +static void unfold(DomTreeUpdater *DTU, LoopInfo *LI, + SelectInstToUnfold SIToUnfold, + std::vector *NewSIsToUnfold, + std::vector *NewBBs) { SelectInst *SI = SIToUnfold.getInst(); PHINode *SIUse = SIToUnfold.getUse(); assert(SI->hasOneUse()); @@ -342,10 +342,12 @@ void unfold(DomTreeUpdater *DTU, LoopInfo *LI, SelectInstToUnfold SIToUnfold, SI->eraseFromParent(); } +namespace { struct ClonedBlock { BasicBlock *BB; APInt State; ///< \p State corresponds to the next value of a switch stmnt. }; +} // namespace typedef std::deque PathType; typedef std::vector PathsType; @@ -379,6 +381,7 @@ inline raw_ostream &operator<<(raw_ostream &OS, const PathType &Path) { /// by cloning necessary basic blocks and replacing conditional branches with /// unconditional ones. A threading path includes a list of basic blocks, the /// exit state, and the block that determines the next state. +namespace { struct ThreadingPath { /// Exit value is DFA's exit state for the given path. APInt getExitValue() const { return ExitVal; } @@ -1336,6 +1339,7 @@ struct TransformDFA { SmallPtrSet EphValues; std::vector TPaths; }; +} // namespace bool DFAJumpThreading::run(Function &F) { LLVM_DEBUG(dbgs() << "\nDFA Jump threading: " << F.getName() << "\n"); @@ -1415,8 +1419,6 @@ bool DFAJumpThreading::run(Function &F) { return MadeChanges; } -} // end anonymous namespace - /// Integrate with the new Pass Manager PreservedAnalyses DFAJumpThreadingPass::run(Function &F, FunctionAnalysisManager &AM) { From 57c57515a4abe97a41539b765976b7005a3eafff Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Tue, 7 Oct 2025 05:45:01 -0700 Subject: [PATCH 2/2] Review feedback --- .../Transforms/Scalar/DFAJumpThreading.cpp | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp b/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp index 506980455d782..45ed7a83f66f0 100644 --- a/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/DFAJumpThreading.cpp @@ -133,14 +133,7 @@ class SelectInstToUnfold { explicit operator bool() const { return SI && SIUse; } }; -} // namespace - -static void unfold(DomTreeUpdater *DTU, LoopInfo *LI, - SelectInstToUnfold SIToUnfold, - std::vector *NewSIsToUnfold, - std::vector *NewBBs); -namespace { class DFAJumpThreading { public: DFAJumpThreading(AssumptionCache *AC, DominatorTree *DT, LoopInfo *LI, @@ -169,6 +162,11 @@ class DFAJumpThreading { } } + static void unfold(DomTreeUpdater *DTU, LoopInfo *LI, + SelectInstToUnfold SIToUnfold, + std::vector *NewSIsToUnfold, + std::vector *NewBBs); + AssumptionCache *AC; DominatorTree *DT; LoopInfo *LI; @@ -184,10 +182,10 @@ class DFAJumpThreading { /// created basic blocks into \p NewBBs. /// /// TODO: merge it with CodeGenPrepare::optimizeSelectInst() if possible. -static void unfold(DomTreeUpdater *DTU, LoopInfo *LI, - SelectInstToUnfold SIToUnfold, - std::vector *NewSIsToUnfold, - std::vector *NewBBs) { +void DFAJumpThreading::unfold(DomTreeUpdater *DTU, LoopInfo *LI, + SelectInstToUnfold SIToUnfold, + std::vector *NewSIsToUnfold, + std::vector *NewBBs) { SelectInst *SI = SIToUnfold.getInst(); PHINode *SIUse = SIToUnfold.getUse(); assert(SI->hasOneUse()); @@ -377,11 +375,11 @@ inline raw_ostream &operator<<(raw_ostream &OS, const PathType &Path) { return OS; } +namespace { /// ThreadingPath is a path in the control flow of a loop that can be threaded /// by cloning necessary basic blocks and replacing conditional branches with /// unconditional ones. A threading path includes a list of basic blocks, the /// exit state, and the block that determines the next state. -namespace { struct ThreadingPath { /// Exit value is DFA's exit state for the given path. APInt getExitValue() const { return ExitVal; }