[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