[clang] Reduce memory usage in AST parent map generation by lazily checking if nodes have been seen (PR #129934)

via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 5 14:40:57 PST 2025


================
@@ -70,16 +93,37 @@ class ParentMapContext::ParentMap {
         push_back(Value);
     }
     bool contains(const DynTypedNode &Value) {
-      return Seen.contains(Value);
+      assert(Value.getMemoizationData());
+      bool found = FragileLazySeenCache.contains(&Value);
+      while (!found && ItemsProcessed < Items.size()) {
+        found |= FragileLazySeenCache.insert(&Items[ItemsProcessed]).second;
----------------
higher-performance wrote:

This couples the correctness of `found` on this line to its presence in the `while (!found && ...)` condition, which is why I felt it's better not to do that. I can change it you'd really like me to though - do you find this hurts readability?

https://github.com/llvm/llvm-project/pull/129934


More information about the cfe-commits mailing list