[flang-commits] [flang] [flang][NFC] do not copy fields in fir::RecordType::getTypeList (PR #145530)
via flang-commits
flang-commits at lists.llvm.org
Wed Jun 25 00:40:03 PDT 2025
https://github.com/jeanPerier updated https://github.com/llvm/llvm-project/pull/145530
>From bb2744fb229edcf8a263a904b7b4ab117a9ff864 Mon Sep 17 00:00:00 2001
From: Jean Perier <jperier at nvidia.com>
Date: Tue, 24 Jun 2025 08:09:02 -0700
Subject: [PATCH 1/2] [flang][NFC] do not copy fields in
fir::RecordType::getTypeList
---
flang/include/flang/Optimizer/Dialect/FIRTypes.td | 3 ++-
flang/lib/Optimizer/Dialect/FIRType.cpp | 6 ++++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/flang/include/flang/Optimizer/Dialect/FIRTypes.td b/flang/include/flang/Optimizer/Dialect/FIRTypes.td
index 6fad77dffd9bc..0ead54df3ca97 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRTypes.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRTypes.td
@@ -330,7 +330,8 @@ def fir_RecordType : FIR_Type<"Record", "type"> {
let extraClassDeclaration = [{
using TypePair = std::pair<std::string, mlir::Type>;
- using TypeList = std::vector<TypePair>;
+ using TypeList = llvm::ArrayRef<TypePair>;
+ using TypeVector = llvm::SmallVector<TypePair>;
TypeList getTypeList() const;
TypeList getLenParamList() const;
diff --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp
index 78571f1f4bc2d..2ff1d6d945ba3 100644
--- a/flang/lib/Optimizer/Dialect/FIRType.cpp
+++ b/flang/lib/Optimizer/Dialect/FIRType.cpp
@@ -261,6 +261,8 @@ mlir::Type dyn_cast_ptrOrBoxEleTy(mlir::Type t) {
}
static bool hasDynamicSize(fir::RecordType recTy) {
+ if (recTy.getLenParamList().empty())
+ return false;
for (auto field : recTy.getTypeList()) {
if (auto arr = mlir::dyn_cast<fir::SequenceType>(field.second)) {
if (sequenceWithNonConstantShape(arr))
@@ -1006,7 +1008,7 @@ mlir::Type fir::RecordType::parse(mlir::AsmParser &parser) {
return {};
RecordType result = RecordType::get(parser.getContext(), name);
- RecordType::TypeList lenParamList;
+ RecordType::TypeVector lenParamList;
if (!parser.parseOptionalLParen()) {
while (true) {
llvm::StringRef lenparam;
@@ -1024,7 +1026,7 @@ mlir::Type fir::RecordType::parse(mlir::AsmParser &parser) {
return {};
}
- RecordType::TypeList typeList;
+ RecordType::TypeVector typeList;
if (!parser.parseOptionalLess()) {
result.pack(true);
}
>From 12579f0c9925d2222a0085a4d2356cf6a8f04c7a Mon Sep 17 00:00:00 2001
From: Jean Perier <jperier at nvidia.com>
Date: Wed, 25 Jun 2025 00:39:03 -0700
Subject: [PATCH 2/2] fix tests
---
flang/test/Fir/convert-to-llvm.fir | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/flang/test/Fir/convert-to-llvm.fir b/flang/test/Fir/convert-to-llvm.fir
index 6d8a8bb606b90..0e2bfe48a807d 100644
--- a/flang/test/Fir/convert-to-llvm.fir
+++ b/flang/test/Fir/convert-to-llvm.fir
@@ -1817,8 +1817,8 @@ func.func private @custom_typeP.field_1.offset() -> i32
func.func private @custom_typeP.field_2.offset() -> i32
func.func @field_index_dynamic_size() -> () {
- %1 = fir.field_index field_1, !fir.type<custom_type{field_1:i32, field_2:!fir.array<?xf32>}>
- %2 = fir.field_index field_2, !fir.type<custom_type{field_1:i32, field_2:!fir.array<?xf32>}>
+ %1 = fir.field_index field_1, !fir.type<custom_type(l:i32){field_1:i32, field_2:!fir.array<?xf32>}>
+ %2 = fir.field_index field_2, !fir.type<custom_type(l:i32){field_1:i32, field_2:!fir.array<?xf32>}>
return
}
More information about the flang-commits
mailing list