1 //===---- llvm/DebugLoc.h - Debug Location Information ----------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines a number of light weight data structures used
11 // to describe and track debug location information.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_DEBUGLOC_H
16 #define LLVM_DEBUGLOC_H
18 #include "llvm/ADT/DenseMap.h"
24 /// DebugLoc - Debug location id. This is carried by SDNode and MachineInstr
25 /// to index into a vector of unique debug location tuples.
30 DebugLoc() : Idx(~0U) {} // Defaults to invalid.
32 static DebugLoc getUnknownLoc() { DebugLoc L; L.Idx = ~0U; return L; }
33 static DebugLoc get(unsigned idx) { DebugLoc L; L.Idx = idx; return L; }
35 unsigned getIndex() const { return Idx; }
37 /// isUnknown - Return true if there is no debug info for the SDNode /
39 bool isUnknown() const { return Idx == ~0U; }
41 bool operator==(const DebugLoc &DL) const { return Idx == DL.Idx; }
42 bool operator!=(const DebugLoc &DL) const { return !(*this == DL); }
45 /// DebugLocTracker - This class tracks debug location information.
47 struct DebugLocTracker {
48 /// DebugLocations - A vector of unique DebugLocTuple's.
50 std::vector<MDNode *> DebugLocations;
52 /// DebugIdMap - This maps DebugLocTuple's to indices into the
53 /// DebugLocations vector.
54 DenseMap<MDNode *, unsigned> DebugIdMap;
59 } // end namespace llvm
61 #endif /* LLVM_DEBUGLOC_H */