MLIR  16.0.0git
DebugTranslation.h
Go to the documentation of this file.
1 //===- DebugTranslation.h - MLIR to LLVM Debug conversion -------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the translation between an MLIR debug information and
10 // the corresponding LLVMIR representation.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef MLIR_LIB_TARGET_LLVMIR_DEBUGTRANSLATION_H_
15 #define MLIR_LIB_TARGET_LLVMIR_DEBUGTRANSLATION_H_
16 
17 #include "mlir/IR/Location.h"
18 #include "llvm/ADT/SmallString.h"
19 #include "llvm/ADT/StringMap.h"
20 #include "llvm/IR/DIBuilder.h"
21 
22 namespace mlir {
23 class Operation;
24 
25 namespace LLVM {
26 class LLVMFuncOp;
27 
28 namespace detail {
30 public:
31  DebugTranslation(Operation *module, llvm::Module &llvmModule);
32 
33  /// Finalize the translation of debug information.
34  void finalize();
35 
36  /// Translate the given location to an llvm debug location.
37  const llvm::DILocation *translateLoc(Location loc, llvm::DILocalScope *scope);
38 
39  /// Translate the debug information for the given function.
40  void translate(LLVMFuncOp func, llvm::Function &llvmFunc);
41 
42 private:
43  /// Translate the given location to an llvm debug location with the given
44  /// scope and inlinedAt parameters.
45  const llvm::DILocation *translateLoc(Location loc, llvm::DILocalScope *scope,
46  const llvm::DILocation *inlinedAt);
47 
48  /// Create an llvm debug file for the given file path.
49  llvm::DIFile *translateFile(StringRef fileName);
50 
51  /// A mapping between mlir location+scope and the corresponding llvm debug
52  /// metadata.
54  locationToLoc;
55 
56  /// A mapping between filename and llvm debug file.
57  /// TODO: Change this to DenseMap<Identifier, ...> when we can
58  /// access the Identifier filename in FileLineColLoc.
59  llvm::StringMap<llvm::DIFile *> fileMap;
60 
61  /// A string containing the current working directory of the compiler.
62  SmallString<256> currentWorkingDir;
63 
64  /// Debug information fields.
65  llvm::DIBuilder builder;
66  llvm::LLVMContext &llvmCtx;
67  llvm::DICompileUnit *compileUnit;
68 };
69 
70 } // namespace detail
71 } // namespace LLVM
72 } // namespace mlir
73 
74 #endif // MLIR_LIB_TARGET_LLVMIR_DEBUGTRANSLATION_H_
Include the generated interface declarations.
const llvm::DILocation * translateLoc(Location loc, llvm::DILocalScope *scope)
Translate the given location to an llvm debug location.
Operation is a basic unit of execution within MLIR.
Definition: Operation.h:28
This class defines the main interface for locations in MLIR and acts as a non-nullable wrapper around...
Definition: Location.h:48
void translate(LLVMFuncOp func, llvm::Function &llvmFunc)
Translate the debug information for the given function.
void finalize()
Finalize the translation of debug information.
DebugTranslation(Operation *module, llvm::Module &llvmModule)