Introduce another Reset() method in BumpPtrAllocator that calls a destructor
[oota-llvm.git] / include / llvm / Support / DebugLoc.h
1 //===---- llvm/DebugLoc.h - Debug Location Information ----------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines a number of light weight data structures used
11 // to describe and track debug location information.
12 // 
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_DEBUGLOC_H
16 #define LLVM_DEBUGLOC_H
17
18 #include "llvm/ADT/DenseMap.h"
19 #include <vector>
20
21 namespace llvm {
22   class MDNode;
23
24   /// DebugLoc - Debug location id. This is carried by SDNode and MachineInstr
25   /// to index into a vector of unique debug location tuples.
26   class DebugLoc {
27     unsigned Idx;
28
29   public:
30     DebugLoc() : Idx(~0U) {}  // Defaults to invalid.
31
32     static DebugLoc getUnknownLoc()   { DebugLoc L; L.Idx = ~0U; return L; }
33     static DebugLoc get(unsigned idx) { DebugLoc L; L.Idx = idx; return L; }
34
35     unsigned getIndex() const { return Idx; }
36
37     /// isUnknown - Return true if there is no debug info for the SDNode /
38     /// MachineInstr.
39     bool isUnknown() const { return Idx == ~0U; }
40
41     bool operator==(const DebugLoc &DL) const { return Idx == DL.Idx; }
42     bool operator!=(const DebugLoc &DL) const { return !(*this == DL); }
43   };
44
45     /// DebugLocTracker - This class tracks debug location information.
46   ///
47   struct DebugLocTracker {
48     /// DebugLocations - A vector of unique DebugLocTuple's.
49     ///
50     std::vector<MDNode *> DebugLocations;
51
52     /// DebugIdMap - This maps DebugLocTuple's to indices into the
53     /// DebugLocations vector.
54     DenseMap<MDNode *, unsigned> DebugIdMap;
55
56     DebugLocTracker() {}
57   };
58   
59 } // end namespace llvm
60
61 #endif /* LLVM_DEBUGLOC_H */