[flang-commits] [flang] 27b50fc - [flang] Add option to exclude array literals from isCompilerGenerated (#225164)
via flang-commits
flang-commits at lists.llvm.org
Mon Sep 21 13:02:03 PDT 2026
Author: Valentin Clement (バレンタイン クレメン)
Date: 2026-09-21T20:01:55Z
New Revision: 27b50fc8e7908bc969635c61a96d6d3f08f79941
URL: https://github.com/llvm/llvm-project/commit/27b50fc8e7908bc969635c61a96d6d3f08f79941
DIFF: https://github.com/llvm/llvm-project/commit/27b50fc8e7908bc969635c61a96d6d3f08f79941.diff
LOG: [flang] Add option to exclude array literals from isCompilerGenerated (#225164)
This is used to register variables under -gpu=mem:unified and array
literals can stay as device resident.
Added:
Modified:
flang/include/flang/Optimizer/Support/InternalNames.h
flang/lib/Optimizer/Support/InternalNames.cpp
flang/unittests/Optimizer/InternalNamesTest.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Optimizer/Support/InternalNames.h b/flang/include/flang/Optimizer/Support/InternalNames.h
index f35c76b65f80d..d5da47818e1c0 100644
--- a/flang/include/flang/Optimizer/Support/InternalNames.h
+++ b/flang/include/flang/Optimizer/Support/InternalNames.h
@@ -198,8 +198,11 @@ struct NameUniquer {
/// Returns true if the passed name denotes a compiler generated name.
/// If \p excludeStringLiterals is true, string literals are excluded from the
/// check.
+ /// If \p excludeArrayLiterals is true, array literals are excluded from the
+ /// check.
static bool isCompilerGenerated(llvm::StringRef name,
- bool excludeStringLiterals = true);
+ bool excludeStringLiterals = true,
+ bool excludeArrayLiterals = true);
private:
static std::string intAsString(std::int64_t i);
diff --git a/flang/lib/Optimizer/Support/InternalNames.cpp b/flang/lib/Optimizer/Support/InternalNames.cpp
index 4c7d56ec2c3ed..ed4d3a15e631d 100644
--- a/flang/lib/Optimizer/Support/InternalNames.cpp
+++ b/flang/lib/Optimizer/Support/InternalNames.cpp
@@ -442,7 +442,8 @@ bool fir::NameUniquer::isSpecialSymbol(llvm::StringRef name) {
}
bool fir::NameUniquer::isCompilerGenerated(llvm::StringRef name,
- bool excludeStringLiterals) {
+ bool excludeStringLiterals,
+ bool excludeArrayLiterals) {
auto [nameKind, deconstructed] = fir::NameUniquer::deconstruct(name);
// Names that are not mangled by flang belong to the user (e.g. BIND(C)
@@ -455,6 +456,8 @@ bool fir::NameUniquer::isCompilerGenerated(llvm::StringRef name,
if (nameKind == fir::NameUniquer::NameKind::GENERATED) {
if (excludeStringLiterals && name.starts_with("_QQcl"))
return false;
+ if (excludeArrayLiterals && name.starts_with("_QQro"))
+ return false;
return true;
}
diff --git a/flang/unittests/Optimizer/InternalNamesTest.cpp b/flang/unittests/Optimizer/InternalNamesTest.cpp
index d37b26bf89dd3..5e8290615d22c 100644
--- a/flang/unittests/Optimizer/InternalNamesTest.cpp
+++ b/flang/unittests/Optimizer/InternalNamesTest.cpp
@@ -301,6 +301,10 @@ TEST(InternalNamesTest, isCompilerGenerated) {
ASSERT_TRUE(NameUniquer::isCompilerGenerated(
"_QQcl.2E2F6669725F7064745F6578616D706C652E66393000",
/*excludeStringLiterals=*/false));
+ // Test for array literals
+ ASSERT_FALSE(NameUniquer::isCompilerGenerated("_QQro.4x3xc1.0"));
+ ASSERT_TRUE(NameUniquer::isCompilerGenerated("_QQro.4x3xc1.0",
+ /*excludeStringLiterals=*/true, /*excludeArrayLiterals=*/false));
}
// main() from gtest_main
More information about the flang-commits
mailing list