150
|
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 {
|
|
29 class DebugTranslation {
|
|
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.
|
|
53 DenseMap<std::pair<Location, llvm::DILocalScope *>, const llvm::DILocation *>
|
|
54 locationToLoc;
|
|
55
|
|
56 /// A mapping between filename and llvm debug file.
|
207
|
57 /// TODO: Change this to DenseMap<Identifier, ...> when we can
|
150
|
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 } // end namespace detail
|
|
71 } // end namespace LLVM
|
|
72 } // end namespace mlir
|
|
73
|
|
74 #endif // MLIR_LIB_TARGET_LLVMIR_DEBUGTRANSLATION_H_
|