[flang-commits] [flang] [flang] use set_union instead of merge in added DerivedTypeCache (PR #147024)
via flang-commits
flang-commits at lists.llvm.org
Fri Jul 4 02:21:08 PDT 2025
https://github.com/jeanPerier created https://github.com/llvm/llvm-project/pull/147024
When merging the list of recursive reference under two components, duplicates should be removed.
If the recursive reference to parents nodes (referred by depth of the parents node) are [1, 2, 5] and [4, 5], the new list should be [1,2,4,5].
With std::merge, the order was correct but 5 was duplicated use std::set_union instead that removes duplicates.
With this patch Fujitsu tests [0394_0030.f90](https://github.com/fujitsu/compiler-test-suite/blob/0d02267bb98b6bfdf46d1f6bbd92e9781c24356c/Fortran/0394/0394_0030.f90) and [0390_0230.f90](https://github.com/fujitsu/compiler-test-suite/blob/0d02267bb98b6bfdf46d1f6bbd92e9781c24356c/Fortran/0390/0390_0230.f90) finally compile with -g in about 10s. Their compilation was hanging before https://github.com/llvm/llvm-project/pull/146543, and they were now hitting an error "LLVM ERROR: SmallVector unable to grow" which is fixed by this patch.
>From f7a6224e3037b45a9ba3e24caeb4a489e15f1db6 Mon Sep 17 00:00:00 2001
From: Jean Perier <jperier at nvidia.com>
Date: Fri, 4 Jul 2025 02:08:49 -0700
Subject: [PATCH] [flang] use set_union instead of merge in added
DerivedTypeCache
---
flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
index a848058486e2c..abad500d3f657 100644
--- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
+++ b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
@@ -303,9 +303,9 @@ void DerivedTypeCache::postComponentVisitUpdate(
return;
ActiveLevels oldLevels;
oldLevels.swap(activeRecursionLevels);
- std::merge(componentActiveRecursionLevels.begin(),
- componentActiveRecursionLevels.end(), oldLevels.begin(),
- oldLevels.end(), std::back_inserter(activeRecursionLevels));
+ std::set_union(componentActiveRecursionLevels.begin(),
+ componentActiveRecursionLevels.end(), oldLevels.begin(),
+ oldLevels.end(), std::back_inserter(activeRecursionLevels));
}
void DerivedTypeCache::finalize(mlir::Type ty, mlir::LLVM::DITypeAttr attr,
More information about the flang-commits
mailing list