-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Reapply "[MLIR][LLVM] Make DISubprogramAttr cyclic" (#106571) with fixes #106947
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…h fixes This reverts commit fa93be4, restoring commit d884b77, with fixes that ensure the CAPI declarations are exported properly. This commit implements LLVM_DIRecursiveTypeAttrInterface for the DISubprogramAttr to ensure cyclic subprograms can be imported properly. In the process multiple shortcuts around the recently introduced DIImportedEntityAttr can be removed.
@llvm/pr-subscribers-mlir @llvm/pr-subscribers-mlir-llvm Author: Tobias Gysi (gysit) ChangesThis reverts commit fa93be4, restoring This commit implements LLVM_DIRecursiveTypeAttrInterface for the DISubprogramAttr to ensure cyclic subprograms can be imported properly. In the process multiple shortcuts around the recently introduced DIImportedEntityAttr can be removed. Patch is 53.61 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/106947.diff 14 Files Affected:
diff --git a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
index 54f2a12d800085..029d3776bcc0b8 100644
--- a/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
+++ b/flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp
@@ -146,8 +146,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertBoxedSequenceType(
elements.push_back(subrangeTy);
}
return mlir::LLVM::DICompositeTypeAttr::get(
- context, llvm::dwarf::DW_TAG_array_type, /*recursive_id=*/{},
- /*name=*/nullptr, /*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
+ context, llvm::dwarf::DW_TAG_array_type, /*name=*/nullptr,
+ /*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0, elements,
dataLocation, /*rank=*/nullptr, allocated, associated);
}
@@ -188,7 +188,7 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertRecordType(
}
return mlir::LLVM::DICompositeTypeAttr::get(
- context, llvm::dwarf::DW_TAG_structure_type, /*recursive_id=*/{},
+ context, llvm::dwarf::DW_TAG_structure_type,
mlir::StringAttr::get(context, result.second.name), fileAttr, line, scope,
/*baseType=*/nullptr, mlir::LLVM::DIFlags::Zero, offset * 8,
/*alignInBits=*/0, elements, /*dataLocation=*/nullptr, /*rank=*/nullptr,
@@ -236,8 +236,8 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertSequenceType(
// have been set to some valid default values.
return mlir::LLVM::DICompositeTypeAttr::get(
- context, llvm::dwarf::DW_TAG_array_type, /*recursive_id=*/{},
- /*name=*/nullptr, /*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
+ context, llvm::dwarf::DW_TAG_array_type, /*name=*/nullptr,
+ /*file=*/nullptr, /*line=*/0, /*scope=*/nullptr, elemTy,
mlir::LLVM::DIFlags::Zero, /*sizeInBits=*/0, /*alignInBits=*/0, elements,
/*dataLocation=*/nullptr, /*rank=*/nullptr, /*allocated=*/nullptr,
/*associated=*/nullptr);
diff --git a/mlir/include/mlir-c/Dialect/LLVM.h b/mlir/include/mlir-c/Dialect/LLVM.h
index 5eb96a86e472d6..d6062bed5c0c0f 100644
--- a/mlir/include/mlir-c/Dialect/LLVM.h
+++ b/mlir/include/mlir-c/Dialect/LLVM.h
@@ -234,10 +234,14 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIBasicTypeAttrGet(
MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits,
MlirLLVMTypeEncoding encoding);
+/// Creates a self-referencing LLVM DICompositeType attribute.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMDICompositeTypeAttrGetRecSelf(MlirAttribute recId);
+
/// Creates a LLVM DICompositeType attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompositeTypeAttrGet(
- MlirContext ctx, unsigned int tag, MlirAttribute recId, MlirAttribute name,
- MlirAttribute file, uint32_t line, MlirAttribute scope,
+ MlirContext ctx, MlirAttribute recId, bool isRecSelf, unsigned int tag,
+ MlirAttribute name, MlirAttribute file, uint32_t line, MlirAttribute scope,
MlirAttribute baseType, int64_t flags, uint64_t sizeInBits,
uint64_t alignInBits, intptr_t nElements, MlirAttribute const *elements,
MlirAttribute dataLocation, MlirAttribute rank, MlirAttribute allocated,
@@ -311,13 +315,17 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILocalVariableAttrGet(
MlirAttribute diFile, unsigned int line, unsigned int arg,
unsigned int alignInBits, MlirAttribute diType, int64_t flags);
+/// Creates a self-referencing LLVM DISubprogramAttr attribute.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMDISubprogramAttrGetRecSelf(MlirAttribute recId);
+
/// Creates a LLVM DISubprogramAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDISubprogramAttrGet(
- MlirContext ctx, MlirAttribute id, MlirAttribute compileUnit,
- MlirAttribute scope, MlirAttribute name, MlirAttribute linkageName,
- MlirAttribute file, unsigned int line, unsigned int scopeLine,
- uint64_t subprogramFlags, MlirAttribute type, intptr_t nRetainedNodes,
- MlirAttribute const *retainedNodes);
+ MlirContext ctx, MlirAttribute recId, bool isRecSelf, MlirAttribute id,
+ MlirAttribute compileUnit, MlirAttribute scope, MlirAttribute name,
+ MlirAttribute linkageName, MlirAttribute file, unsigned int line,
+ unsigned int scopeLine, uint64_t subprogramFlags, MlirAttribute type,
+ intptr_t nRetainedNodes, MlirAttribute const *retainedNodes);
/// Gets the scope from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirAttribute
@@ -356,9 +364,9 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIModuleAttrGet(
/// Creates a LLVM DIImportedEntityAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIImportedEntityAttrGet(
- MlirContext ctx, unsigned int tag, MlirAttribute entity, MlirAttribute file,
- unsigned int line, MlirAttribute name, intptr_t nElements,
- MlirAttribute const *elements);
+ MlirContext ctx, unsigned int tag, MlirAttribute scope,
+ MlirAttribute entity, MlirAttribute file, unsigned int line,
+ MlirAttribute name, intptr_t nElements, MlirAttribute const *elements);
/// Gets the scope of this DIModuleAttr.
MLIR_CAPI_EXPORTED MlirAttribute
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
index e57be7f760d380..49e54df3436ff3 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td
@@ -271,7 +271,7 @@ def LLVM_DILanguageParameter : LLVM_DIParameter<
>;
def LLVM_DITagParameter : LLVM_DIParameter<
- "tag", /*default=*/"", "Tag", /*errorCase=*/"llvm::dwarf::DW_TAG_invalid"
+ "tag", /*default=*/"0", "Tag", /*errorCase=*/"llvm::dwarf::DW_TAG_invalid"
>;
def LLVM_DIOperationEncodingParameter : LLVM_DIParameter<
@@ -375,14 +375,17 @@ def LLVM_DICompositeTypeAttr : LLVM_Attr<"DICompositeType", "di_composite_type",
[LLVM_DIRecursiveTypeAttrInterface],
"DITypeAttr"> {
let parameters = (ins
- LLVM_DITagParameter:$tag,
+ // DIRecursiveTypeAttrInterface specific parameters.
OptionalParameter<"DistinctAttr">:$recId,
+ OptionalParameter<"bool">:$isRecSelf,
+ // DICompositeType specific parameters.
+ LLVM_DITagParameter:$tag,
OptionalParameter<"StringAttr">:$name,
OptionalParameter<"DIFileAttr">:$file,
OptionalParameter<"uint32_t">:$line,
OptionalParameter<"DIScopeAttr">:$scope,
OptionalParameter<"DITypeAttr">:$baseType,
- OptionalParameter<"DIFlags", "DIFlags::Zero">:$flags,
+ OptionalParameter<"DIFlags">:$flags,
OptionalParameter<"uint64_t">:$sizeInBits,
OptionalParameter<"uint64_t">:$alignInBits,
OptionalArrayRefParameter<"DINodeAttr">:$elements,
@@ -391,14 +394,26 @@ def LLVM_DICompositeTypeAttr : LLVM_Attr<"DICompositeType", "di_composite_type",
OptionalParameter<"DIExpressionAttr">:$allocated,
OptionalParameter<"DIExpressionAttr">:$associated
);
+ let builders = [
+ AttrBuilder<(ins
+ "unsigned":$tag, "StringAttr":$name, "DIFileAttr":$file,
+ "uint32_t":$line, "DIScopeAttr":$scope, "DITypeAttr":$baseType,
+ "DIFlags":$flags, "uint64_t":$sizeInBits, "uint64_t":$alignInBits,
+ "ArrayRef<DINodeAttr>":$elements, "DIExpressionAttr":$dataLocation,
+ "DIExpressionAttr":$rank, "DIExpressionAttr":$allocated,
+ "DIExpressionAttr":$associated
+ ), [{
+ return $_get($_ctxt, /*recId=*/nullptr, /*isRecSelf=*/nullptr,
+ tag, name, file, line, scope, baseType, flags, sizeInBits,
+ alignInBits, elements, dataLocation, rank, allocated,
+ associated);
+ }]>
+ ];
let assemblyFormat = "`<` struct(params) `>`";
let extraClassDeclaration = [{
/// Requirements of DIRecursiveTypeAttrInterface.
/// @{
- /// Get whether this attr describes a recursive self reference.
- bool isRecSelf() { return getTag() == 0; }
-
/// Get a copy of this type attr but with the recursive ID set to `recId`.
DIRecursiveTypeAttrInterface withRecId(DistinctAttr recId);
@@ -554,14 +569,19 @@ def LLVM_DILocalVariableAttr : LLVM_Attr<"DILocalVariable", "di_local_variable",
//===----------------------------------------------------------------------===//
def LLVM_DISubprogramAttr : LLVM_Attr<"DISubprogram", "di_subprogram",
- /*traits=*/[], "DIScopeAttr"> {
+ [LLVM_DIRecursiveTypeAttrInterface],
+ "DIScopeAttr"> {
let parameters = (ins
+ // DIRecursiveTypeAttrInterface specific parameters.
+ OptionalParameter<"DistinctAttr">:$recId,
+ OptionalParameter<"bool">:$isRecSelf,
+ // DISubprogramAttr specific parameters.
OptionalParameter<"DistinctAttr">:$id,
OptionalParameter<"DICompileUnitAttr">:$compileUnit,
- "DIScopeAttr":$scope,
+ OptionalParameter<"DIScopeAttr">:$scope,
OptionalParameter<"StringAttr">:$name,
OptionalParameter<"StringAttr">:$linkageName,
- "DIFileAttr":$file,
+ OptionalParameter<"DIFileAttr">:$file,
OptionalParameter<"unsigned">:$line,
OptionalParameter<"unsigned">:$scopeLine,
OptionalParameter<"DISubprogramFlags">:$subprogramFlags,
@@ -569,21 +589,31 @@ def LLVM_DISubprogramAttr : LLVM_Attr<"DISubprogram", "di_subprogram",
OptionalArrayRefParameter<"DINodeAttr">:$retainedNodes
);
let builders = [
- AttrBuilderWithInferredContext<(ins
+ AttrBuilder<(ins
"DistinctAttr":$id, "DICompileUnitAttr":$compileUnit,
- "DIScopeAttr":$scope, "StringRef":$name, "StringRef":$linkageName,
+ "DIScopeAttr":$scope, "StringAttr":$name, "StringAttr":$linkageName,
"DIFileAttr":$file, "unsigned":$line, "unsigned":$scopeLine,
"DISubprogramFlags":$subprogramFlags, "DISubroutineTypeAttr":$type,
"ArrayRef<DINodeAttr>":$retainedNodes
), [{
- MLIRContext *ctx = file.getContext();
- return $_get(ctx, id, compileUnit, scope, StringAttr::get(ctx, name),
- StringAttr::get(ctx, linkageName), file, line,
- scopeLine, subprogramFlags, type, retainedNodes);
+ return $_get($_ctxt, /*recId=*/nullptr, /*isRecSelf=*/false, id, compileUnit,
+ scope, name, linkageName, file, line, scopeLine,
+ subprogramFlags, type, retainedNodes);
}]>
];
-
let assemblyFormat = "`<` struct(params) `>`";
+ let extraClassDeclaration = [{
+ /// Requirements of DIRecursiveTypeAttrInterface.
+ /// @{
+
+ /// Get a copy of this type attr but with the recursive ID set to `recId`.
+ DIRecursiveTypeAttrInterface withRecId(DistinctAttr recId);
+
+ /// Build a rec-self instance using the provided `recId`.
+ static DIRecursiveTypeAttrInterface getRecSelf(DistinctAttr recId);
+
+ /// @}
+ }];
}
//===----------------------------------------------------------------------===//
@@ -627,13 +657,9 @@ def LLVM_DINamespaceAttr : LLVM_Attr<"DINamespace", "di_namespace",
def LLVM_DIImportedEntityAttr : LLVM_Attr<"DIImportedEntity", "di_imported_entity",
/*traits=*/[], "DINodeAttr"> {
- /// TODO: DIImportedEntity has a 'scope' field which represents the scope where
- /// this entity is imported. Currently, we are not adding a 'scope' field in
- /// DIImportedEntityAttr to avoid cyclic dependency. As DIImportedEntityAttr
- /// entries will be contained inside a scope entity (e.g. DISubprogramAttr),
- /// the scope can easily be inferred.
let parameters = (ins
LLVM_DITagParameter:$tag,
+ "DIScopeAttr":$scope,
"DINodeAttr":$entity,
OptionalParameter<"DIFileAttr">:$file,
OptionalParameter<"unsigned">:$line,
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMInterfaces.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMInterfaces.td
index 7085f81e203a1e..e2180410a8f04e 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMInterfaces.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMInterfaces.td
@@ -406,7 +406,7 @@ def LLVM_DIRecursiveTypeAttrInterface
let methods = [
InterfaceMethod<[{
Get whether this attr describes a recursive self reference.
- }], "bool", "isRecSelf", (ins)>,
+ }], "bool", "getIsRecSelf", (ins)>,
InterfaceMethod<[{
Get the recursive ID used for matching "rec-decl" with "rec-self".
If this attr instance is not recursive, return a null attribute.
diff --git a/mlir/lib/CAPI/Dialect/LLVM.cpp b/mlir/lib/CAPI/Dialect/LLVM.cpp
index 13341f0c4de881..03b536d7aad98f 100644
--- a/mlir/lib/CAPI/Dialect/LLVM.cpp
+++ b/mlir/lib/CAPI/Dialect/LLVM.cpp
@@ -159,9 +159,14 @@ MlirAttribute mlirLLVMDIBasicTypeAttrGet(MlirContext ctx, unsigned int tag,
unwrap(ctx), tag, cast<StringAttr>(unwrap(name)), sizeInBits, encoding));
}
+MlirAttribute mlirLLVMDICompositeTypeAttrGetRecSelf(MlirAttribute recId) {
+ return wrap(
+ DICompositeTypeAttr::getRecSelf(cast<DistinctAttr>(unwrap(recId))));
+}
+
MlirAttribute mlirLLVMDICompositeTypeAttrGet(
- MlirContext ctx, unsigned int tag, MlirAttribute recId, MlirAttribute name,
- MlirAttribute file, uint32_t line, MlirAttribute scope,
+ MlirContext ctx, MlirAttribute recId, bool isRecSelf, unsigned int tag,
+ MlirAttribute name, MlirAttribute file, uint32_t line, MlirAttribute scope,
MlirAttribute baseType, int64_t flags, uint64_t sizeInBits,
uint64_t alignInBits, intptr_t nElements, MlirAttribute const *elements,
MlirAttribute dataLocation, MlirAttribute rank, MlirAttribute allocated,
@@ -170,7 +175,7 @@ MlirAttribute mlirLLVMDICompositeTypeAttrGet(
elementsStorage.reserve(nElements);
return wrap(DICompositeTypeAttr::get(
- unwrap(ctx), tag, cast<DistinctAttr>(unwrap(recId)),
+ unwrap(ctx), cast<DistinctAttr>(unwrap(recId)), isRecSelf, tag,
cast<StringAttr>(unwrap(name)), cast<DIFileAttr>(unwrap(file)), line,
cast<DIScopeAttr>(unwrap(scope)), cast<DITypeAttr>(unwrap(baseType)),
DIFlags(flags), sizeInBits, alignInBits,
@@ -289,16 +294,21 @@ MlirAttribute mlirLLVMDISubroutineTypeAttrGet(MlirContext ctx,
[](Attribute a) { return cast<DITypeAttr>(a); })));
}
+MlirAttribute mlirLLVMDISubprogramAttrGetRecSelf(MlirAttribute recId) {
+ return wrap(DISubprogramAttr::getRecSelf(cast<DistinctAttr>(unwrap(recId))));
+}
+
MlirAttribute mlirLLVMDISubprogramAttrGet(
- MlirContext ctx, MlirAttribute id, MlirAttribute compileUnit,
- MlirAttribute scope, MlirAttribute name, MlirAttribute linkageName,
- MlirAttribute file, unsigned int line, unsigned int scopeLine,
- uint64_t subprogramFlags, MlirAttribute type, intptr_t nRetainedNodes,
- MlirAttribute const *retainedNodes) {
+ MlirContext ctx, MlirAttribute recId, bool isRecSelf, MlirAttribute id,
+ MlirAttribute compileUnit, MlirAttribute scope, MlirAttribute name,
+ MlirAttribute linkageName, MlirAttribute file, unsigned int line,
+ unsigned int scopeLine, uint64_t subprogramFlags, MlirAttribute type,
+ intptr_t nRetainedNodes, MlirAttribute const *retainedNodes) {
SmallVector<Attribute> nodesStorage;
nodesStorage.reserve(nRetainedNodes);
return wrap(DISubprogramAttr::get(
- unwrap(ctx), cast<DistinctAttr>(unwrap(id)),
+ unwrap(ctx), cast<DistinctAttr>(unwrap(recId)), isRecSelf,
+ cast<DistinctAttr>(unwrap(id)),
cast<DICompileUnitAttr>(unwrap(compileUnit)),
cast<DIScopeAttr>(unwrap(scope)), cast<StringAttr>(unwrap(name)),
cast<StringAttr>(unwrap(linkageName)), cast<DIFileAttr>(unwrap(file)),
@@ -353,14 +363,15 @@ MlirAttribute mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule) {
}
MlirAttribute mlirLLVMDIImportedEntityAttrGet(
- MlirContext ctx, unsigned int tag, MlirAttribute entity, MlirAttribute file,
- unsigned int line, MlirAttribute name, intptr_t nElements,
- MlirAttribute const *elements) {
+ MlirContext ctx, unsigned int tag, MlirAttribute scope,
+ MlirAttribute entity, MlirAttribute file, unsigned int line,
+ MlirAttribute name, intptr_t nElements, MlirAttribute const *elements) {
SmallVector<Attribute> elementsStorage;
elementsStorage.reserve(nElements);
return wrap(DIImportedEntityAttr::get(
- unwrap(ctx), tag, cast<DINodeAttr>(unwrap(entity)),
- cast<DIFileAttr>(unwrap(file)), line, cast<StringAttr>(unwrap(name)),
+ unwrap(ctx), tag, cast<DIScopeAttr>(unwrap(scope)),
+ cast<DINodeAttr>(unwrap(entity)), cast<DIFileAttr>(unwrap(file)), line,
+ cast<StringAttr>(unwrap(name)),
llvm::map_to_vector(unwrapList(nElements, elements, elementsStorage),
[](Attribute a) { return cast<DINodeAttr>(a); })));
}
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
index 98a9659735e7e6..491dcc7f01e73d 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
@@ -203,16 +203,33 @@ void printExpressionArg(AsmPrinter &printer, uint64_t opcode,
DIRecursiveTypeAttrInterface
DICompositeTypeAttr::withRecId(DistinctAttr recId) {
return DICompositeTypeAttr::get(
- getContext(), getTag(), recId, getName(), getFile(), getLine(),
- getScope(), getBaseType(), getFlags(), getSizeInBits(), getAlignInBits(),
- getElements(), getDataLocation(), getRank(), getAllocated(),
- getAssociated());
+ getContext(), recId, getIsRecSelf(), getTag(), getName(), getFile(),
+ getLine(), getScope(), getBaseType(), getFlags(), getSizeInBits(),
+ getAlignInBits(), getElements(), getDataLocation(), getRank(),
+ getAllocated(), getAssociated());
}
DIRecursiveTypeAttrInterface
DICompositeTypeAttr::getRecSelf(DistinctAttr recId) {
- return DICompositeTypeAttr::get(recId.getContext(), 0, recId, {}, {}, 0, {},
- {}, DIFlags(), 0, 0, {}, {}, {}, {}, {});
+ return DICompositeTypeAttr::get(recId.getContext(), recId, /*isRecSelf=*/true,
+ 0, {}, {}, 0, {}, {}, DIFlags(), 0, 0, {}, {},
+ {}, {}, {});
+}
+
+//===----------------------------------------------------------------------===//
+// DISubprogramAttr
+//===----------------------------------------------------------------------===//
+
+DIRecursiveTypeAttrInterface DISubprogramAttr::withRecId(DistinctAttr recId) {
+ return DISubprogramAttr::get(
+ getContext(), recId, getIsRecSelf(), getId(), getCompileUnit(),
+ getScope(), getName(), getLinkageName(), getFile(), getLine(),
+ getScopeLine(), getSubprogramFlags(), getType(), getRetainedNodes());
+}
+
+DIRecursiveTypeAttrInterface DISubprogramAttr::getRecSelf(DistinctAttr recId) {
+ return DISubprogramAttr::get(recId.getContext(), recId, /*isRecSelf=*/true,
+ {}, {}, {}, {}, {}, 0, 0, {}, {}, {}, {});
}
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
index 3870aab52f199d..6e4a964f1fc93c 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
@@ -3155,9 +3155,9 @@ struct LLVMOpAsmDialectInterface : public OpAsmDialectInterface {
.Case<AccessGroupAttr, AliasScopeAttr, AliasScopeDomainAttr,
DIBasicTypeAttr, DICompileUnitAttr, DICompositeTypeAttr,
DIDerivedTypeAttr, DIFileAttr, DIGlobalVariableAttr,
- DIGlobalVariableExpressionAttr, DILabelAttr, DILexicalBlockAttr,
- DILexicalBlockFileAttr, DILocalVariableAttr, DIModuleAttr,
- DINamespaceAttr, DINullTypeAttr, DIStringTypeAttr,
+ DIGlobalVariableExpressionAttr, DIImportedEntityAttr, DILabelAttr,
+ DILexicalBlockAttr, DILexicalBlockFileAttr, DILocalVariableAttr,
+ DIModuleAttr, DINamespaceAttr, DINullTypeAttr, DIStringTypeAttr,
DISubprogramAttr, DISubroutineTypeAttr, LoopAnnotationAttr,
LoopVectorizeAttr, LoopInterleaveAttr, LoopUnrollAttr,
LoopUnrollAndJamAttr, LoopLICMAttr, LoopDistributeAttr,
diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp
index c75f44bf3976a9..2cfaffa7c8efce 100644
--- a/mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp
++...
[truncated]
|
@@ -234,10 +234,14 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIBasicTypeAttrGet( | |||
MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits, | |||
MlirLLVMTypeEncoding encoding); | |||
|
|||
/// Creates a self-referencing LLVM DICompositeType attribute. | |||
MLIR_CAPI_EXPORTED MlirAttribute |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mlirLLVMDICompositeTypeAttrGetRecSelf and mlirLLVMDISubprogramAttrGetRecSelf have been missing the MLIR_CAPI_EXPORTED prefix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks for the fix.
This reverts commit fa93be4, restoring
commit d884b77, with fixes that ensure the CAPI declarations are exported properly.
This commit implements LLVM_DIRecursiveTypeAttrInterface for the DISubprogramAttr to ensure cyclic subprograms can be imported properly. In the process multiple shortcuts around the recently introduced DIImportedEntityAttr can be removed.