diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp index ffde597ac83c1..7dccd9d29ecbd 100644 --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp @@ -90,8 +90,8 @@ bool DINodeAttr::classof(Attribute attr) { bool DIScopeAttr::classof(Attribute attr) { return llvm::isa( - attr); + DIDerivedTypeAttr, DIFileAttr, DILocalScopeAttr, + DIModuleAttr, DINamespaceAttr>(attr); } //===----------------------------------------------------------------------===// diff --git a/mlir/test/Dialect/LLVMIR/debuginfo.mlir b/mlir/test/Dialect/LLVMIR/debuginfo.mlir index 1147cb110199d..e480d65d956ab 100644 --- a/mlir/test/Dialect/LLVMIR/debuginfo.mlir +++ b/mlir/test/Dialect/LLVMIR/debuginfo.mlir @@ -131,6 +131,12 @@ annotations = #llvm.di_annotation > +// CHECK-DAG: #[[SP3:.*]] = #llvm.di_subprogram +#sp3 = #llvm.di_subprogram< + // Omit the optional parameters. + scope = #ptr2, file = #file, type = #spType1 +> + // CHECK-DAG: #[[BLOCK0:.*]] = #llvm.di_lexical_block #block0 = #llvm.di_lexical_block @@ -140,6 +146,9 @@ // CHECK-DAG: #[[BLOCK2:.*]] = #llvm.di_lexical_block #block2 = #llvm.di_lexical_block +// CHECK-DAG: #[[BLOCK3:.*]] = #llvm.di_lexical_block +#block3 = #llvm.di_lexical_block + // CHECK-DAG: #[[VAR0:.*]] = #llvm.di_local_variable #var0 = #llvm.di_local_variable< scope = #block0, name = "alloc", file = #file, @@ -158,6 +167,12 @@ scope = #block2, name = "arg2" > +// CHECK-DAG: #[[VAR3:.*]] = #llvm.di_local_variable +#var3 = #llvm.di_local_variable< + // Omit the optional parameters. + scope = #block3, name = "arg3" +> + // CHECK-DAG: #[[LABEL1:.*]] = #llvm.di_label #label1 = #llvm.di_label @@ -194,12 +209,14 @@ llvm.func @addr(%arg: i64) { llvm.return } -// CHECK: llvm.func @value(%[[ARG1:.*]]: i32, %[[ARG2:.*]]: i32) -llvm.func @value(%arg1: i32, %arg2: i32) { +// CHECK: llvm.func @value(%[[ARG1:.*]]: i32, %[[ARG2:.*]]: i32, %[[ARG3:.*]]: i32) +llvm.func @value(%arg1: i32, %arg2: i32, %arg3 : i32) { // CHECK: llvm.intr.dbg.value #[[VAR1]] #llvm.di_expression<[DW_OP_LLVM_fragment(16, 8), DW_OP_plus_uconst(2), DW_OP_deref]> = %[[ARG1]] llvm.intr.dbg.value #var1 #llvm.di_expression<[DW_OP_LLVM_fragment(16, 8), DW_OP_plus_uconst(2), DW_OP_deref]> = %arg1 : i32 // CHECK: llvm.intr.dbg.value #[[VAR2]] = %[[ARG2]] llvm.intr.dbg.value #var2 = %arg2 : i32 + // CHECK: llvm.intr.dbg.value #[[VAR3]] = %[[ARG3]] + llvm.intr.dbg.value #var3 = %arg3 : i32 // CHECK: llvm.intr.dbg.label #[[LABEL1]] llvm.intr.dbg.label #label1 // CHECK: llvm.intr.dbg.label #[[LABEL2]]