//===---- llvm/Support/DebugLoc.h - Debug Location Information --*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines a number of light weight data structures used // to describe and track debug location information. // //===----------------------------------------------------------------------===// #ifndef LLVM_DEBUGLOC_H #define LLVM_DEBUGLOC_H #include "llvm/ADT/DenseMap.h" #include namespace llvm { class MDNode; /// DebugLoc - Debug location id. This is carried by SDNode and MachineInstr /// to index into a vector of unique debug location tuples. class DebugLoc { unsigned Idx; public: DebugLoc() : Idx(~0U) {} // Defaults to invalid. static DebugLoc getUnknownLoc() { DebugLoc L; L.Idx = ~0U; return L; } static DebugLoc get(unsigned idx) { DebugLoc L; L.Idx = idx; return L; } unsigned getIndex() const { return Idx; } /// isUnknown - Return true if there is no debug info for the SDNode / /// MachineInstr. bool isUnknown() const { return Idx == ~0U; } bool operator==(const DebugLoc &DL) const { return Idx == DL.Idx; } bool operator!=(const DebugLoc &DL) const { return !(*this == DL); } }; /// DebugLocTracker - This class tracks debug location information. /// struct DebugLocTracker { /// DebugLocations - A vector of unique DebugLocTuple's. /// std::vector DebugLocations; /// DebugIdMap - This maps DebugLocTuple's to indices into the /// DebugLocations vector. DenseMap DebugIdMap; DebugLocTracker() {} }; } // end namespace llvm #endif /* LLVM_DEBUGLOC_H */