//===- DebugTranslation.h - MLIR to LLVM Debug conversion -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the translation between an MLIR debug information and // the corresponding LLVMIR representation. // //===----------------------------------------------------------------------===// #ifndef MLIR_LIB_TARGET_LLVMIR_DEBUGTRANSLATION_H_ #define MLIR_LIB_TARGET_LLVMIR_DEBUGTRANSLATION_H_ #include "mlir/IR/Location.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringMap.h" #include "llvm/IR/DIBuilder.h" namespace mlir { class Operation; namespace LLVM { class LLVMFuncOp; namespace detail { class DebugTranslation { public: DebugTranslation(Operation *module, llvm::Module &llvmModule); /// Finalize the translation of debug information. void finalize(); /// Translate the given location to an llvm debug location. const llvm::DILocation *translateLoc(Location loc, llvm::DILocalScope *scope); /// Translate the debug information for the given function. void translate(LLVMFuncOp func, llvm::Function &llvmFunc); private: /// Translate the given location to an llvm debug location with the given /// scope and inlinedAt parameters. const llvm::DILocation *translateLoc(Location loc, llvm::DILocalScope *scope, const llvm::DILocation *inlinedAt); /// Create an llvm debug file for the given file path. llvm::DIFile *translateFile(StringRef fileName); /// A mapping between mlir location+scope and the corresponding llvm debug /// metadata. DenseMap, const llvm::DILocation *> locationToLoc; /// A mapping between filename and llvm debug file. /// TODO: Change this to DenseMap when we can /// access the Identifier filename in FileLineColLoc. llvm::StringMap fileMap; /// A string containing the current working directory of the compiler. SmallString<256> currentWorkingDir; /// Debug information fields. llvm::DIBuilder builder; llvm::LLVMContext &llvmCtx; llvm::DICompileUnit *compileUnit; }; } // end namespace detail } // end namespace LLVM } // end namespace mlir #endif // MLIR_LIB_TARGET_LLVMIR_DEBUGTRANSLATION_H_