Skip to content

Commit 097138f

Browse files
authored
[mlir] Add option to control the emissionKind to DIScopeForLLVMFuncOp pass (#106229)
This is currently not controllable by the user and always set to `DIEmissionKind::LineTablesOnly`. The added option allows to set it to the other values accepted by LLVM (`None`, `Full`, and `DebugDirectivesOnly`). --------- Co-authored-by: jingzec <[email protected]>
1 parent 7a4013f commit 097138f

File tree

4 files changed

+15
-1
lines changed

4 files changed

+15
-1
lines changed

mlir/include/mlir/Dialect/LLVMIR/Transforms/Passes.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#ifndef MLIR_DIALECT_LLVMIR_TRANSFORMS_PASSES_H
1010
#define MLIR_DIALECT_LLVMIR_TRANSFORMS_PASSES_H
1111

12+
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
1213
#include "mlir/Dialect/LLVMIR/Transforms/AddComdats.h"
1314
#include "mlir/Dialect/LLVMIR/Transforms/LegalizeForExport.h"
1415
#include "mlir/Dialect/LLVMIR/Transforms/OptimizeForNVVM.h"
@@ -23,6 +24,7 @@ namespace LLVM {
2324
std::unique_ptr<Pass> createDIScopeForLLVMFuncOpPass();
2425

2526
/// Generate the code for registering conversion passes.
27+
#define GEN_PASS_DECL
2628
#define GEN_PASS_REGISTRATION
2729
#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc"
2830

mlir/include/mlir/Dialect/LLVMIR/Transforms/Passes.td

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ def DIScopeForLLVMFuncOp : Pass<"ensure-debug-info-scope-on-llvm-func", "::mlir:
6161
}];
6262

6363
let constructor = "mlir::LLVM::createDIScopeForLLVMFuncOpPass()";
64+
let options = [
65+
Option<"emissionKind", "emission-kind", "mlir::LLVM::DIEmissionKind",
66+
/*default=*/"mlir::LLVM::DIEmissionKind::LineTablesOnly", "Emission kind to generate debug info.",
67+
[{::llvm::cl::values(
68+
clEnumValN(::mlir::LLVM::DIEmissionKind::None, "None", "None"),
69+
clEnumValN(::mlir::LLVM::DIEmissionKind::Full, "Full", "Full"),
70+
clEnumValN(::mlir::LLVM::DIEmissionKind::LineTablesOnly, "LineTablesOnly", "LineTablesOnly (default)"),
71+
clEnumValN(::mlir::LLVM::DIEmissionKind::DebugDirectivesOnly, "DebugDirectivesOnly", "DebugDirectivesOnly")
72+
)}]>,
73+
];
6474
}
6575

6676
#endif // MLIR_DIALECT_LLVMIR_TRANSFORMS_PASSES

mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ struct DIScopeForLLVMFuncOp
118118
compileUnitAttr = LLVM::DICompileUnitAttr::get(
119119
DistinctAttr::create(UnitAttr::get(context)), llvm::dwarf::DW_LANG_C,
120120
fileAttr, StringAttr::get(context, "MLIR"),
121-
/*isOptimized=*/true, LLVM::DIEmissionKind::LineTablesOnly);
121+
/*isOptimized=*/true, emissionKind);
122122
}
123123

124124
// Create subprograms for each function with the same distinct compile unit.

mlir/test/Dialect/LLVMIR/add-debuginfo-func-scope.mlir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: mlir-opt %s --pass-pipeline="builtin.module(ensure-debug-info-scope-on-llvm-func)" --split-input-file --mlir-print-debuginfo | FileCheck %s
2+
// RUN: mlir-opt %s --pass-pipeline="builtin.module(ensure-debug-info-scope-on-llvm-func{emission-kind=DebugDirectivesOnly})" --split-input-file --mlir-print-debuginfo | FileCheck --check-prefix=CHECK_OTHER_KIND %s
23

34
// CHECK-LABEL: llvm.func @func_no_debug()
45
// CHECK: llvm.return loc(#loc
@@ -31,6 +32,7 @@ module {
3132
// CHECK: #di_file = #llvm.di_file<"<unknown>" in "">
3233
// CHECK: #di_subprogram = #llvm.di_subprogram<id = distinct[{{.*}}]<>, compileUnit = #di_compile_unit, scope = #di_file, name = "func_with_debug", linkageName = "func_with_debug", file = #di_file, line = 42, scopeLine = 42, subprogramFlags = "Definition|Optimized", type = #di_subroutine_type>
3334
// CHECK: #loc[[LOC]] = loc(fused<#di_subprogram>
35+
// CHECK_OTHER_KIND: emissionKind = DebugDirectivesOnly
3436
module {
3537
llvm.func @func_with_debug() {
3638
llvm.return loc(#loc1)

0 commit comments

Comments
 (0)