diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp @@ -53,8 +53,9 @@ //===----------------------------------------------------------------------===// bool DIScopeAttr::classof(Attribute attr) { - return llvm::isa(attr); + return llvm::isa(attr); } //===----------------------------------------------------------------------===// diff --git a/mlir/test/Dialect/LLVMIR/debuginfo.mlir b/mlir/test/Dialect/LLVMIR/debuginfo.mlir --- a/mlir/test/Dialect/LLVMIR/debuginfo.mlir +++ b/mlir/test/Dialect/LLVMIR/debuginfo.mlir @@ -47,12 +47,10 @@ elements = #llvm.di_subrange > -// CHECK-DAG: #[[COMP2:.*]] = #llvm.di_composite_type> +// CHECK-DAG: #[[COMP2:.*]] = #llvm.di_composite_type #comp2 = #llvm.di_composite_type< - tag = DW_TAG_array_type, name = "array2", file = #file, - scope = #file, baseType = #int0, - // Specify the subrange bounds. - elements = #llvm.di_subrange + tag = DW_TAG_class_type, name = "class_name", file = #file, scope = #file, + flags = "TypePassByReference|NonTrivial" > // CHECK-DAG: #[[SPTYPE0:.*]] = #llvm.di_subroutine_type @@ -72,10 +70,10 @@ file = #file, line = 3, scopeLine = 3, subprogramFlags = "Definition|Optimized", type = #spType0 > -// CHECK-DAG: #[[SP1:.*]] = #llvm.di_subprogram +// CHECK-DAG: #[[SP1:.*]] = #llvm.di_subprogram #sp1 = #llvm.di_subprogram< // Omit the optional linkageName parameter. - compileUnit = #cu, scope = #file, name = "value", + compileUnit = #cu, scope = #comp2, name = "value", file = #file, subprogramFlags = "Definition", type = #spType1 > diff --git a/mlir/test/Target/LLVMIR/Import/debug-info.ll b/mlir/test/Target/LLVMIR/Import/debug-info.ll --- a/mlir/test/Target/LLVMIR/Import/debug-info.ll +++ b/mlir/test/Target/LLVMIR/Import/debug-info.ll @@ -269,3 +269,24 @@ !7 = !DILocation(line: 1, column: 2, scope: !3) !8 = !DILocation(line: 2, column: 2, scope: !3) !9 = !DILocation(line: 3, column: 2, scope: !3) + +; // ----- + +; CHECK-LABEL: @class_method +define void @class_method(ptr %arg1) { + ; CHECK: llvm.return loc(#[[LOC:.+]]) + ret void, !dbg !5 +} + +; CHECK: #[[COMP:.+]] = #llvm.di_composite_type +; CHECK: #[[SP:.+]] = #llvm.di_subprogram +; CHECK: #[[LOC]] = loc(fused<#[[SP]]> + +!llvm.dbg.cu = !{!1} +!llvm.module.flags = !{!0} +!0 = !{i32 2, !"Debug Info Version", i32 3} +!1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2) +!2 = !DIFile(filename: "debug-info.ll", directory: "/") +!3 = !DICompositeType(tag: DW_TAG_class_type, name: "class_name", file: !2, line: 42, flags: DIFlagTypePassByReference | DIFlagNonTrivial) +!4 = distinct !DISubprogram(name: "class_method", scope: !3, file: !2, spFlags: DISPFlagDefinition, unit: !1) +!5 = !DILocation(line: 1, column: 2, scope: !4) diff --git a/mlir/test/Target/LLVMIR/llvmir-debug.mlir b/mlir/test/Target/LLVMIR/llvmir-debug.mlir --- a/mlir/test/Target/LLVMIR/llvmir-debug.mlir +++ b/mlir/test/Target/LLVMIR/llvmir-debug.mlir @@ -58,7 +58,7 @@ resultType = #si64, argumentTypes = #si64> #callee = #llvm.di_subprogram< // Omit the optional linkageName, line, and scopeLine parameters. - compileUnit = #cu, scope = #file, name = "callee", + compileUnit = #cu, scope = #composite, name = "callee", file = #file, subprogramFlags = "Definition", type = #calleeType > #fileScope = #llvm.di_lexical_block_file @@ -127,7 +127,7 @@ // CHECK: ![[FUSEDWITH_LOC]] = !DILocation(line: 2, column: 4, scope: ![[FUSEDWITH_SCOPE:.*]], inlinedAt: ![[INLINE_LOC:.*]]) // CHECK: ![[FUSEDWITH_SCOPE]] = !DILexicalBlockFile(scope: ![[CALLEE_LOC:.*]], file: -// CHECK: ![[CALLEE_LOC]] = distinct !DISubprogram(name: "callee", scope: ![[CU_FILE_LOC]], file: ![[CU_FILE_LOC]], type: ![[CALLEE_TYPE:.*]], spFlags: DISPFlagDefinition, unit: ![[CU_LOC]]) +// CHECK: ![[CALLEE_LOC]] = distinct !DISubprogram(name: "callee", scope: ![[COMPOSITE_TYPE]], file: ![[CU_FILE_LOC]], type: ![[CALLEE_TYPE:.*]], spFlags: DISPFlagDefinition, unit: ![[CU_LOC]]) // CHECK: ![[CALLEE_TYPE]] = !DISubroutineType(types: ![[CALLEE_ARGS:.*]]) // CHECK: ![[CALLEE_ARGS]] = !{![[ARG_TYPE:.*]], ![[ARG_TYPE:.*]]} // CHECK: ![[INLINE_LOC]] = !DILocation(line: 28, column: 5,