[llvm-branch-commits] [clang] release/20.x: Reduce memory usage in AST parent map generation by lazily checking if nodes have been seen (#129934) (PR #131209)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Mar 13 13:24:32 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 8c7f0eaa6ee3f84e3d8260535cced234bed4fa28
Requested by: @<!-- -->higher-performance
---
Full diff: https://github.com/llvm/llvm-project/pull/131209.diff
1 Files Affected:
- (modified) clang/lib/AST/ParentMapContext.cpp (+11-6)
``````````diff
diff --git a/clang/lib/AST/ParentMapContext.cpp b/clang/lib/AST/ParentMapContext.cpp
index 7ff492443031d..d8dd352c42d6b 100644
--- a/clang/lib/AST/ParentMapContext.cpp
+++ b/clang/lib/AST/ParentMapContext.cpp
@@ -12,10 +12,11 @@
//===----------------------------------------------------------------------===//
#include "clang/AST/ParentMapContext.h"
-#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/Decl.h"
#include "clang/AST/Expr.h"
+#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/TemplateBase.h"
+#include "llvm/ADT/SmallPtrSet.h"
using namespace clang;
@@ -69,17 +70,21 @@ class ParentMapContext::ParentMap {
for (; N > 0; --N)
push_back(Value);
}
- bool contains(const DynTypedNode &Value) {
- return Seen.contains(Value);
+ bool contains(const DynTypedNode &Value) const {
+ const void *Identity = Value.getMemoizationData();
+ assert(Identity);
+ return Dedup.contains(Identity);
}
void push_back(const DynTypedNode &Value) {
- if (!Value.getMemoizationData() || Seen.insert(Value).second)
+ const void *Identity = Value.getMemoizationData();
+ if (!Identity || Dedup.insert(Identity).second) {
Items.push_back(Value);
+ }
}
llvm::ArrayRef<DynTypedNode> view() const { return Items; }
private:
- llvm::SmallVector<DynTypedNode, 2> Items;
- llvm::SmallDenseSet<DynTypedNode, 2> Seen;
+ llvm::SmallVector<DynTypedNode, 1> Items;
+ llvm::SmallPtrSet<const void *, 2> Dedup;
};
/// Maps from a node to its parents. This is used for nodes that have
``````````
</details>
https://github.com/llvm/llvm-project/pull/131209
More information about the llvm-branch-commits
mailing list