[flang-commits] [flang] [flang] Avoid unnecessary looping for constants (PR #156403)

Miguel Saldivar via flang-commits flang-commits at lists.llvm.org
Tue Sep 2 07:27:37 PDT 2025


================
@@ -152,6 +152,23 @@ class DenseGlobalBuilder {
                       : TC;
     attributeElementType =
         Fortran::lower::getFIRType(builder.getContext(), attrTc, KIND, {});
+
+    auto values = constant.values();
+    auto sameElements = [&]() -> bool {
+      if (values.empty())
+        return false;
+
+      return std::all_of(values.begin(), values.end(),
+                         [&](const auto &v) { return v == values.front(); });
+    };
+
+    if (sameElements()) {
+      auto attr = convertToAttribute<TC, KIND>(builder, values.front(),
+                                               attributeElementType);
+      attributes.assign(values.size(), attr);
+      return;
+    }
+
     for (auto element : constant.values())
----------------
Saldivarcher wrote:

Good catch!  :+1: 

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


More information about the flang-commits mailing list