[llvm] [LoopInterchange] Defer CacheCost calculation until needed (PR #146874)
Ryotaro Kasuga via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 3 06:45:37 PDT 2025
================
@@ -407,6 +407,33 @@ class LoopInterchangeLegality {
SmallVector<PHINode *, 8> InnerLoopInductions;
};
+/// Manages information utilized by the profitability check for cache. The main
+/// purpose of this class is to delay the computation of CacheCost until it is
+/// actually needed.
+class LoopInterchangeCacheCostManager {
+ Loop *OutermostLoop;
+ LoopStandardAnalysisResults *AR;
+ DependenceInfo *DI;
+
+ /// CacheCost for \ref OutermostLoop. Once it is computed, it is cached. Note
+ /// that the result can be nullptr.
+ std::optional<std::unique_ptr<CacheCost>> CC;
+
+ /// Maps each loop to an index representing the optimal position within the
+ /// loop-nest, as determined by the cache cost analysis.
+ DenseMap<const Loop *, unsigned> CostMap;
+
+ void computeIfUnitinialized();
+
+public:
+ LoopInterchangeCacheCostManager(Loop *OutermostLoop,
+ LoopStandardAnalysisResults *AR,
+ DependenceInfo *DI)
+ : OutermostLoop(OutermostLoop), AR(AR), DI(DI) {}
+ std::unique_ptr<CacheCost> &getCacheCost();
----------------
kasuga-fj wrote:
While I chose this to maintain the argument types of the other functions, I think returning a reference to unique_ptr is bad design. Should we change to return `CacheCost *` instead?
https://github.com/llvm/llvm-project/pull/146874
More information about the llvm-commits
mailing list