//===-- llvm/CodeGen/MachineModuleInfo.h ------------------------*- 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 // //===----------------------------------------------------------------------===// // // Collect meta information for a module. This information should be in a // neutral form that can be used by different debugging and exception handling // schemes. // // The organization of information is primarily clustered around the source // compile units. The main exception is source line correspondence where // inlining may interleave code from various compile units. // // The following information can be retrieved from the MachineModuleInfo. // // -- Source directories - Directories are uniqued based on their canonical // string and assigned a sequential numeric ID (base 1.) // -- Source files - Files are also uniqued based on their name and directory // ID. A file ID is sequential number (base 1.) // -- Source line correspondence - A vector of file ID, line#, column# triples. // A DEBUG_LOCATION instruction is generated by the DAG Legalizer // corresponding to each entry in the source line list. This allows a debug // emitter to generate labels referenced by debug information tables. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_MACHINEMODULEINFO_H #define LLVM_CODEGEN_MACHINEMODULEINFO_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/IR/PassManager.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCSymbol.h" #include "llvm/Pass.h" #include <memory> #include <utility> #include <vector> namespace llvm { class Function; class LLVMTargetMachine; class MachineFunction; class Module; //===----------------------------------------------------------------------===// /// This class can be derived from and used by targets to hold private /// target-specific information for each Module. Objects of type are /// accessed/created with MachineModuleInfo::getObjFileInfo and destroyed when /// the MachineModuleInfo is destroyed. /// class MachineModuleInfoImpl { … }; //===----------------------------------------------------------------------===// /// This class contains meta information specific to a module. Queries can be /// made by different debugging and exception handling schemes and reformated /// for specific use. /// class MachineModuleInfo { … }; // End class MachineModuleInfo class MachineModuleInfoWrapperPass : public ImmutablePass { … }; /// An analysis that produces \c MachineModuleInfo for a module. /// This does not produce its own MachineModuleInfo because we need a consistent /// MachineModuleInfo to keep ownership of MachineFunctions regardless of /// analysis invalidation/clearing. So something outside the analysis /// infrastructure must own the MachineModuleInfo. class MachineModuleAnalysis : public AnalysisInfoMixin<MachineModuleAnalysis> { … }; } // end namespace llvm #endif // LLVM_CODEGEN_MACHINEMODULEINFO_H