Skip to content

Commit 329b215

Browse files
authored
[MLIR][LLVM][Flang] Move the element param of DICompositeType to the end (llvm#156624)
This commit moves the "element" param of `DICompositeType` to the end of the parameter list. This is required as there seems to be a bug in the attribute parser that breaks a print + parse roundtrip. Related ticket: llvm#156623
1 parent 1efbd8e commit 329b215

File tree

11 files changed

+46
-40
lines changed

11 files changed

+46
-40
lines changed

flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertBoxedSequenceType(
178178
context, llvm::dwarf::DW_TAG_array_type, /*name=*/nullptr,
179179
/*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
180180
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0,
181-
elements, dataLocation, rank, /*allocated=*/nullptr,
182-
/*associated=*/nullptr);
181+
dataLocation, rank, /*allocated=*/nullptr,
182+
/*associated=*/nullptr, elements);
183183
}
184184

185185
addOp(llvm::dwarf::DW_OP_push_object_address, {});
@@ -255,8 +255,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertBoxedSequenceType(
255255
return mlir::LLVM::DICompositeTypeAttr::get(
256256
context, llvm::dwarf::DW_TAG_array_type, /*name=*/nullptr,
257257
/*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
258-
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0, elements,
259-
dataLocation, /*rank=*/nullptr, allocated, associated);
258+
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0,
259+
dataLocation, /*rank=*/nullptr, allocated, associated, elements);
260260
}
261261

262262
std::pair<std::uint64_t, unsigned short>
@@ -389,8 +389,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertRecordType(
389389
context, recId, /*isRecSelf=*/true, llvm::dwarf::DW_TAG_structure_type,
390390
mlir::StringAttr::get(context, ""), fileAttr, /*line=*/0, scope,
391391
/*baseType=*/nullptr, mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0,
392-
/*alignInBits=*/0, elements, /*dataLocation=*/nullptr, /*rank=*/nullptr,
393-
/*allocated=*/nullptr, /*associated=*/nullptr);
392+
/*alignInBits=*/0, /*dataLocation=*/nullptr, /*rank=*/nullptr,
393+
/*allocated=*/nullptr, /*associated=*/nullptr, elements);
394394
DerivedTypeCache::ActiveLevels nestedRecursions =
395395
derivedTypeCache.startTranslating(Ty, placeHolder);
396396

@@ -429,8 +429,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertRecordType(
429429
/*file=*/nullptr, /*line=*/0, /*scope=*/nullptr,
430430
convertType(seqTy.getEleTy(), fileAttr, scope, declOp),
431431
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0,
432-
arrayElements, /*dataLocation=*/nullptr, /*rank=*/nullptr,
433-
/*allocated=*/nullptr, /*associated=*/nullptr);
432+
/*dataLocation=*/nullptr, /*rank=*/nullptr,
433+
/*allocated=*/nullptr, /*associated=*/nullptr, arrayElements);
434434
} else
435435
elemTy = convertType(fieldTy, fileAttr, scope, /*declOp=*/nullptr);
436436
offset = llvm::alignTo(offset, byteAlign);
@@ -448,8 +448,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertRecordType(
448448
context, recId, /*isRecSelf=*/false, llvm::dwarf::DW_TAG_structure_type,
449449
mlir::StringAttr::get(context, sourceName.name), fileAttr, line, scope,
450450
/*baseType=*/nullptr, mlir::LLVM::DIFlags::Zero, offset * 8,
451-
/*alignInBits=*/0, elements, /*dataLocation=*/nullptr, /*rank=*/nullptr,
452-
/*allocated=*/nullptr, /*associated=*/nullptr);
451+
/*alignInBits=*/0, /*dataLocation=*/nullptr, /*rank=*/nullptr,
452+
/*allocated=*/nullptr, /*associated=*/nullptr, elements);
453453

454454
derivedTypeCache.finalize(Ty, finalAttr, std::move(nestedRecursions));
455455

@@ -490,8 +490,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertTupleType(
490490
context, llvm::dwarf::DW_TAG_structure_type,
491491
mlir::StringAttr::get(context, ""), fileAttr, /*line=*/0, scope,
492492
/*baseType=*/nullptr, mlir::LLVM::DIFlags::Zero, offset * 8,
493-
/*alignInBits=*/0, elements, /*dataLocation=*/nullptr, /*rank=*/nullptr,
494-
/*allocated=*/nullptr, /*associated=*/nullptr);
493+
/*alignInBits=*/0, /*dataLocation=*/nullptr, /*rank=*/nullptr,
494+
/*allocated=*/nullptr, /*associated=*/nullptr, elements);
495495
derivedTypeCache.finalize(Ty, typeAttr, std::move(nestedRecursions));
496496
return typeAttr;
497497
}
@@ -554,9 +554,9 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertSequenceType(
554554
return mlir::LLVM::DICompositeTypeAttr::get(
555555
context, llvm::dwarf::DW_TAG_array_type, /*name=*/nullptr,
556556
/*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
557-
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0, elements,
557+
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0,
558558
/*dataLocation=*/nullptr, /*rank=*/nullptr, /*allocated=*/nullptr,
559-
/*associated=*/nullptr);
559+
/*associated=*/nullptr, elements);
560560
}
561561

562562
mlir::LLVM::DITypeAttr DebugTypeGenerator::convertVectorType(
@@ -587,9 +587,9 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertVectorType(
587587
context, llvm::dwarf::DW_TAG_array_type,
588588
mlir::StringAttr::get(context, name),
589589
/*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
590-
mlir::LLVM::DIFlags::Vector, sizeInBits, /*alignInBits=*/0, elements,
590+
mlir::LLVM::DIFlags::Vector, sizeInBits, /*alignInBits=*/0,
591591
/*dataLocation=*/nullptr, /*rank=*/nullptr, /*allocated=*/nullptr,
592-
/*associated=*/nullptr);
592+
/*associated=*/nullptr, elements);
593593
}
594594

595595
mlir::LLVM::DITypeAttr DebugTypeGenerator::convertCharacterType(

flang/test/Transforms/debug-allocatable-1.fir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module {
1919
#loc3 = loc("test.f90":1:3)
2020

2121
// CHECK-DAG: #[[TY1:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "real"{{.*}}>
22-
// CHECK-DAG: #[[TY2:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}#llvm.di_subrange{{.*}}#llvm.di_subrange{{.*}}allocated = <[DW_OP_push_object_address, DW_OP_deref, DW_OP_lit0, DW_OP_ne]>>
22+
// CHECK-DAG: #[[TY2:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}allocated = <[DW_OP_push_object_address, DW_OP_deref, DW_OP_lit0, DW_OP_ne]>{{.*}}elements = #llvm.di_subrange{{.*}}#llvm.di_subrange
2323
// CHECK-DAG: #[[TY3:.*]] = #llvm.di_derived_type<tag = DW_TAG_pointer_type{{.*}}baseType = #[[TY1]]{{.*}}>
2424

2525
// CHECK-DAG: #llvm.di_local_variable<{{.*}}name = "ar2"{{.*}}type = #[[TY2]]>

flang/test/Transforms/debug-assumed-rank-array.fir

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ module {
1010
#loc1 = loc("test1.f90":1:1)
1111
#loc2 = loc("test1.f90":3:16)
1212

13-
// CHECK: #[[TY:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}elements = #llvm.di_generic_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_over, DW_OP_constu(24), DW_OP_mul, DW_OP_plus_uconst(32), DW_OP_plus, DW_OP_deref]>, lowerBound = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_over, DW_OP_constu(24), DW_OP_mul, DW_OP_plus_uconst(24), DW_OP_plus, DW_OP_deref]>, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_over, DW_OP_constu(24), DW_OP_mul, DW_OP_plus_uconst(40), DW_OP_plus, DW_OP_deref]>>, dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>, rank = <[DW_OP_push_object_address, DW_OP_plus_uconst(20), DW_OP_deref_size(1)]>>
13+
// CHECK: #[[TY:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type
14+
// CHECK-SAME: dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>, rank = <[DW_OP_push_object_address, DW_OP_plus_uconst(20), DW_OP_deref_size(1)]>
15+
// CHECK-SAME: elements = #llvm.di_generic_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_over, DW_OP_constu(24), DW_OP_mul, DW_OP_plus_uconst(32), DW_OP_plus, DW_OP_deref]>, lowerBound = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_over, DW_OP_constu(24), DW_OP_mul, DW_OP_plus_uconst(24), DW_OP_plus, DW_OP_deref]>, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_over, DW_OP_constu(24), DW_OP_mul, DW_OP_plus_uconst(40), DW_OP_plus, DW_OP_deref]>>>
1416
// CHECK: #llvm.di_local_variable<{{.*}}name = "x"{{.*}}type = #[[TY]]{{.*}}>

flang/test/Transforms/debug-assumed-shape-array-2.fir

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ module {
2020
#loc3 = loc("test1.f90":4:16)
2121

2222
// CHECK: #[[VAR:.*]] = #llvm.di_local_variable<{{.*}}name = "._QFFfnEb1"{{.*}}flags = Artificial>
23-
// CHECK: #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}elements = #llvm.di_subrange<count = #llvm.di_expression<[{{.*}}]>, lowerBound = #[[VAR]], stride = #llvm.di_expression<[{{.*}}]>>, dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>>
23+
// CHECK: #llvm.di_composite_type<tag = DW_TAG_array_type
24+
// CHECK-SAME: dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>
25+
// CHECK-SAME: elements = #llvm.di_subrange<count = #llvm.di_expression<[{{.*}}]>, lowerBound = #[[VAR]], stride = #llvm.di_expression<[{{.*}}]>>

flang/test/Transforms/debug-assumed-shape-array.fir

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<i64, dense<64> :
1515
#loc3 = loc("test1.f90":4:16)
1616

1717
// CHECK: #[[TY1:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type
18+
// CHECK-SAME: dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>
1819
// CHECK-SAME: elements = #llvm.di_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(32), DW_OP_deref]>, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(40), DW_OP_deref]>>,
19-
// CHECK-SAME: #llvm.di_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(56), DW_OP_deref]>, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(64), DW_OP_deref]>>
20-
// CHECK-SAME: dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>>
20+
// CHECK-SAME: #llvm.di_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(56), DW_OP_deref]>, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(64), DW_OP_deref]>>>
2121
// CHECK: #[[TY2:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type
22+
// CHECK-SAME: dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>
2223
// CHECK-SAME: elements = #llvm.di_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(32), DW_OP_deref]>, lowerBound = 3 : i64, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(40), DW_OP_deref]>>,
23-
// CHECK-SAME: #llvm.di_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(56), DW_OP_deref]>, lowerBound = 4 : i64, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(64), DW_OP_deref]>>, dataLocation = <[DW_OP_push_object_address, DW_OP_deref]>>
24+
// CHECK-SAME: #llvm.di_subrange<count = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(56), DW_OP_deref]>, lowerBound = 4 : i64, stride = #llvm.di_expression<[DW_OP_push_object_address, DW_OP_plus_uconst(64), DW_OP_deref]>>>
2425
// CHECK: #llvm.di_local_variable<{{.*}}name = "arr"{{.*}}type = #[[TY1]]>
2526
// CHECK: #llvm.di_local_variable<{{.*}}name = "arr1"{{.*}}type = #[[TY2]]>

flang/test/Transforms/debug-ptr-type.fir

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ module {
3232
#loc4 = loc("test.f90":8:1)
3333

3434
// CHECK-DAG: #[[INT_TY:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "integer"{{.*}}>
35-
// CHECK-DAG: #[[ARR1_TY:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}elements = #llvm.di_subrange<count = #llvm.di_expression<{{.*}}>, lowerBound = #llvm.di_expression<{{.*}}>, #llvm.di_subrange<count = #llvm.di_expression<{{.*}}>, lowerBound = #llvm.di_expression<{{.*}}>>, dataLocation = {{.*}}, associated = <[DW_OP_push_object_address, DW_OP_deref, DW_OP_lit0, DW_OP_ne]>>
36-
// CHECK-DAG: #[[ARR2_TY:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}elements = #llvm.di_subrange<count = #llvm.di_expression<{{.*}}>, lowerBound = #llvm.di_expression<{{.*}}>>, dataLocation = {{.*}}, associated = <[DW_OP_push_object_address, DW_OP_deref, DW_OP_lit0, DW_OP_ne]>>
35+
// CHECK-DAG: #[[ARR1_TY:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}dataLocation = {{.*}}, associated = <[DW_OP_push_object_address, DW_OP_deref, DW_OP_lit0, DW_OP_ne]>, elements = #llvm.di_subrange<count = #llvm.di_expression<{{.*}}>, lowerBound = #llvm.di_expression<{{.*}}>, #llvm.di_subrange<count = #llvm.di_expression<{{.*}}>, lowerBound = #llvm.di_expression<{{.*}}>>>
36+
// CHECK-DAG: #[[ARR2_TY:.*]] = #llvm.di_composite_type<tag = DW_TAG_array_type{{.*}}dataLocation = {{.*}}, associated = <[DW_OP_push_object_address, DW_OP_deref, DW_OP_lit0, DW_OP_ne]>, elements = #llvm.di_subrange<count = #llvm.di_expression<{{.*}}>, lowerBound = #llvm.di_expression<{{.*}}>>>
37+
3738
// CHECK-DAG: #[[PTR_TY:.*]] = #llvm.di_derived_type<tag = DW_TAG_pointer_type{{.*}}baseType = #[[INT_TY]]{{.*}}>
3839
// CHECK-DAG: #llvm.di_global_variable<{{.*}}name = "par"{{.*}}type = #[[ARR1_TY]]{{.*}}>
3940
// CHECK-DAG: #llvm.di_global_variable<{{.*}}name = "par2"{{.*}}type = #[[ARR2_TY]]{{.*}}>

mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -464,25 +464,25 @@ def LLVM_DICompositeTypeAttr : LLVM_Attr<"DICompositeType", "di_composite_type",
464464
OptionalParameter<"DIFlags">:$flags,
465465
OptionalParameter<"uint64_t">:$sizeInBits,
466466
OptionalParameter<"uint64_t">:$alignInBits,
467-
OptionalArrayRefParameter<"DINodeAttr">:$elements,
468467
OptionalParameter<"DIExpressionAttr">:$dataLocation,
469468
OptionalParameter<"DIExpressionAttr">:$rank,
470469
OptionalParameter<"DIExpressionAttr">:$allocated,
471-
OptionalParameter<"DIExpressionAttr">:$associated
470+
OptionalParameter<"DIExpressionAttr">:$associated,
471+
OptionalArrayRefParameter<"DINodeAttr">:$elements
472472
);
473473
let builders = [
474474
AttrBuilder<(ins
475475
"unsigned":$tag, "StringAttr":$name, "DIFileAttr":$file,
476476
"uint32_t":$line, "DIScopeAttr":$scope, "DITypeAttr":$baseType,
477477
"DIFlags":$flags, "uint64_t":$sizeInBits, "uint64_t":$alignInBits,
478-
"ArrayRef<DINodeAttr>":$elements, "DIExpressionAttr":$dataLocation,
479-
"DIExpressionAttr":$rank, "DIExpressionAttr":$allocated,
480-
"DIExpressionAttr":$associated
478+
"DIExpressionAttr":$dataLocation, "DIExpressionAttr":$rank,
479+
"DIExpressionAttr":$allocated, "DIExpressionAttr":$associated,
480+
"ArrayRef<DINodeAttr>":$elements
481481
), [{
482482
return $_get($_ctxt, /*recId=*/nullptr, /*isRecSelf=*/nullptr,
483483
tag, name, file, line, scope, baseType, flags, sizeInBits,
484-
alignInBits, elements, dataLocation, rank, allocated,
485-
associated);
484+
alignInBits, dataLocation, rank, allocated,
485+
associated, elements);
486486
}]>
487487
];
488488
let assemblyFormat = "`<` struct(params) `>`";

mlir/lib/CAPI/Dialect/LLVM.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,12 @@ MlirAttribute mlirLLVMDICompositeTypeAttrGet(
197197
cast<StringAttr>(unwrap(name)), cast<DIFileAttr>(unwrap(file)), line,
198198
cast<DIScopeAttr>(unwrap(scope)), cast<DITypeAttr>(unwrap(baseType)),
199199
DIFlags(flags), sizeInBits, alignInBits,
200-
llvm::map_to_vector(unwrapList(nElements, elements, elementsStorage),
201-
[](Attribute a) { return cast<DINodeAttr>(a); }),
202200
cast<DIExpressionAttr>(unwrap(dataLocation)),
203201
cast<DIExpressionAttr>(unwrap(rank)),
204202
cast<DIExpressionAttr>(unwrap(allocated)),
205-
cast<DIExpressionAttr>(unwrap(associated))));
203+
cast<DIExpressionAttr>(unwrap(associated)),
204+
llvm::map_to_vector(unwrapList(nElements, elements, elementsStorage),
205+
[](Attribute a) { return cast<DINodeAttr>(a); })));
206206
}
207207

208208
MlirAttribute mlirLLVMDIDerivedTypeAttrGet(

mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,8 @@ DICompositeTypeAttr::withRecId(DistinctAttr recId) {
306306
return DICompositeTypeAttr::get(
307307
getContext(), recId, getIsRecSelf(), getTag(), getName(), getFile(),
308308
getLine(), getScope(), getBaseType(), getFlags(), getSizeInBits(),
309-
getAlignInBits(), getElements(), getDataLocation(), getRank(),
310-
getAllocated(), getAssociated());
309+
getAlignInBits(), getDataLocation(), getRank(), getAllocated(),
310+
getAssociated(), getElements());
311311
}
312312

313313
DIRecursiveTypeAttrInterface

mlir/lib/Target/LLVMIR/DebugImporter.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,10 @@ DICompositeTypeAttr DebugImporter::translateImpl(llvm::DICompositeType *node) {
8888
context, node->getTag(), getStringAttrOrNull(node->getRawName()),
8989
translate(node->getFile()), node->getLine(), translate(node->getScope()),
9090
baseType, flags.value_or(DIFlags::Zero), node->getSizeInBits(),
91-
node->getAlignInBits(), elements,
92-
translateExpression(node->getDataLocationExp()),
91+
node->getAlignInBits(), translateExpression(node->getDataLocationExp()),
9392
translateExpression(node->getRankExp()),
9493
translateExpression(node->getAllocatedExp()),
95-
translateExpression(node->getAssociatedExp()));
94+
translateExpression(node->getAssociatedExp()), elements);
9695
}
9796

9897
DIDerivedTypeAttr DebugImporter::translateImpl(llvm::DIDerivedType *node) {

0 commit comments

Comments
 (0)