diff options
author | Tobias Gysi <tobias.gysi@nextsilicon.com> | 2024-03-25 12:19:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-25 12:19:22 +0100 |
commit | aeeb7d566c9047d4e64b5fc7ea8930b93e80def9 (patch) | |
tree | 7d3aa11b0d5f006acc95c01e0498cbaea8497ca9 /mlir | |
parent | 13078cbc3eeb0ae91c370ce0f604f7165b26e0c8 (diff) | |
download | llvm-aeeb7d566c9047d4e64b5fc7ea8930b93e80def9.zip llvm-aeeb7d566c9047d4e64b5fc7ea8930b93e80def9.tar.gz llvm-aeeb7d566c9047d4e64b5fc7ea8930b93e80def9.tar.bz2 |
[MLIR][LLVM] Make subprogram flags optional (#86433)
This revision makes the subprogramFlags field in the DISubprogrammAttr
optional. This is necessary since the DISubprogram attached to a
declaration may have none of the subprogram flags set.
Diffstat (limited to 'mlir')
-rw-r--r-- | mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td | 2 | ||||
-rw-r--r-- | mlir/lib/Target/LLVMIR/DebugImporter.cpp | 8 | ||||
-rw-r--r-- | mlir/test/Dialect/LLVMIR/debuginfo.mlir | 8 | ||||
-rw-r--r-- | mlir/test/Target/LLVMIR/Import/debug-info.ll | 3 | ||||
-rw-r--r-- | mlir/test/Target/LLVMIR/llvmir-debug.mlir | 4 |
5 files changed, 12 insertions, 13 deletions
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td index 1b1824a..91bd370 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td @@ -546,7 +546,7 @@ def LLVM_DISubprogramAttr : LLVM_Attr<"DISubprogram", "di_subprogram", "DIFileAttr":$file, OptionalParameter<"unsigned">:$line, OptionalParameter<"unsigned">:$scopeLine, - "DISubprogramFlags":$subprogramFlags, + OptionalParameter<"DISubprogramFlags">:$subprogramFlags, OptionalParameter<"DISubroutineTypeAttr">:$type ); let builders = [ diff --git a/mlir/lib/Target/LLVMIR/DebugImporter.cpp b/mlir/lib/Target/LLVMIR/DebugImporter.cpp index 4bdc03a..779ad26 100644 --- a/mlir/lib/Target/LLVMIR/DebugImporter.cpp +++ b/mlir/lib/Target/LLVMIR/DebugImporter.cpp @@ -179,12 +179,13 @@ DISubprogramAttr DebugImporter::translateImpl(llvm::DISubprogram *node) { mlir::DistinctAttr id; if (node->isDistinct()) id = getOrCreateDistinctID(node); - std::optional<DISubprogramFlags> subprogramFlags = - symbolizeDISubprogramFlags(node->getSubprogram()->getSPFlags()); // Return nullptr if the scope or type is invalid. DIScopeAttr scope = translate(node->getScope()); if (node->getScope() && !scope) return nullptr; + std::optional<DISubprogramFlags> subprogramFlags = + symbolizeDISubprogramFlags(node->getSubprogram()->getSPFlags()); + assert(subprogramFlags && "expected valid subprogram flags"); DISubroutineTypeAttr type = translate(node->getType()); if (node->getType() && !type) return nullptr; @@ -192,8 +193,7 @@ DISubprogramAttr DebugImporter::translateImpl(llvm::DISubprogram *node) { getStringAttrOrNull(node->getRawName()), getStringAttrOrNull(node->getRawLinkageName()), translate(node->getFile()), node->getLine(), - node->getScopeLine(), subprogramFlags.value(), - type); + node->getScopeLine(), *subprogramFlags, type); } DISubrangeAttr DebugImporter::translateImpl(llvm::DISubrange *node) { diff --git a/mlir/test/Dialect/LLVMIR/debuginfo.mlir b/mlir/test/Dialect/LLVMIR/debuginfo.mlir index 4c2de0a..94bb2bb 100644 --- a/mlir/test/Dialect/LLVMIR/debuginfo.mlir +++ b/mlir/test/Dialect/LLVMIR/debuginfo.mlir @@ -96,11 +96,10 @@ file = #file, line = 3, scopeLine = 3, subprogramFlags = "Definition|Optimized", type = #spType0 > -// CHECK-DAG: #[[SP1:.*]] = #llvm.di_subprogram<compileUnit = #[[CU]], scope = #[[COMP2]], name = "value", file = #[[FILE]], subprogramFlags = Definition, type = #[[SPTYPE1]]> +// CHECK-DAG: #[[SP1:.*]] = #llvm.di_subprogram<scope = #[[COMP2]], file = #[[FILE]], type = #[[SPTYPE1]]> #sp1 = #llvm.di_subprogram< - // Omit the optional linkageName parameter. - compileUnit = #cu, scope = #comp2, name = "value", - file = #file, subprogramFlags = "Definition", type = #spType1 + // Omit the optional parameters. + scope = #comp2, file = #file, type = #spType1 > // CHECK-DAG: #[[MODULE:.*]] = #llvm.di_module<file = #[[FILE]], scope = #[[FILE]], name = "module", configMacros = "bar", includePath = "/", apinotes = "/", line = 42, isDecl = true> @@ -112,7 +111,6 @@ // CHECK-DAG: #[[SP2:.*]] = #llvm.di_subprogram<compileUnit = #[[CU]], scope = #[[MODULE]], name = "value", file = #[[FILE]], subprogramFlags = Definition, type = #[[SPTYPE2]]> #sp2 = #llvm.di_subprogram< - // Omit the optional linkageName parameter. compileUnit = #cu, scope = #module, name = "value", file = #file, subprogramFlags = "Definition", type = #spType2 > diff --git a/mlir/test/Target/LLVMIR/Import/debug-info.ll b/mlir/test/Target/LLVMIR/Import/debug-info.ll index a7947eb..959a5a1 100644 --- a/mlir/test/Target/LLVMIR/Import/debug-info.ll +++ b/mlir/test/Target/LLVMIR/Import/debug-info.ll @@ -601,8 +601,9 @@ declare !dbg !1 void @declaration() ; CHECK: #di_subprogram = #llvm.di_subprogram< ; CHECK-NOT: id = distinct +; CHECK-NOT: subprogramFlags = !llvm.module.flags = !{!0} !0 = !{i32 2, !"Debug Info Version", i32 3} -!1 = !DISubprogram(name: "declaration", scope: !2, file: !2, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized) +!1 = !DISubprogram(name: "declaration", scope: !2, file: !2, flags: DIFlagPrototyped, spFlags: 0) !2 = !DIFile(filename: "debug-info.ll", directory: "/") diff --git a/mlir/test/Target/LLVMIR/llvmir-debug.mlir b/mlir/test/Target/LLVMIR/llvmir-debug.mlir index c34f918..785a525 100644 --- a/mlir/test/Target/LLVMIR/llvmir-debug.mlir +++ b/mlir/test/Target/LLVMIR/llvmir-debug.mlir @@ -172,14 +172,14 @@ llvm.func @empty_types() { #di_file = #llvm.di_file<"foo.mlir" in "/test/"> #di_subprogram = #llvm.di_subprogram< - scope = #di_file, name = "func_decl_with_subprogram", file = #di_file, subprogramFlags = "Optimized" + scope = #di_file, name = "func_decl_with_subprogram", file = #di_file > // CHECK-LABEL: declare !dbg // CHECK-SAME: ![[SUBPROGRAM:.*]] i32 @func_decl_with_subprogram( llvm.func @func_decl_with_subprogram() -> (i32) loc(fused<#di_subprogram>["foo.mlir":2:1]) -// CHECK: ![[SUBPROGRAM]] = !DISubprogram(name: "func_decl_with_subprogram", scope: ![[FILE:.*]], file: ![[FILE]], spFlags: DISPFlagOptimized) +// CHECK: ![[SUBPROGRAM]] = !DISubprogram(name: "func_decl_with_subprogram", scope: ![[FILE:.*]], file: ![[FILE]], spFlags: 0) // CHECK: ![[FILE]] = !DIFile(filename: "foo.mlir", directory: "/test/") // ----- |