fix file header.
[oota-llvm.git] / include / llvm / Support / DebugLoc.h
1 //===---- llvm/Support/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   public:
29     DebugLoc() : Idx(~0U) {}  // Defaults to invalid.
30
31     static DebugLoc getUnknownLoc()   { DebugLoc L; L.Idx = ~0U; return L; }
32     static DebugLoc get(unsigned idx) { DebugLoc L; L.Idx = idx; return L; }
33
34     unsigned getIndex() const { return Idx; }
35
36     /// isUnknown - Return true if there is no debug info for the SDNode /
37     /// MachineInstr.
38     bool isUnknown() const { return Idx == ~0U; }
39
40     bool operator==(const DebugLoc &DL) const { return Idx == DL.Idx; }
41     bool operator!=(const DebugLoc &DL) const { return !(*this == DL); }
42   };
43
44     /// DebugLocTracker - This class tracks debug location information.
45   ///
46   struct DebugLocTracker {
47     /// DebugLocations - A vector of unique DebugLocTuple's.
48     ///
49     std::vector<MDNode *> DebugLocations;
50
51     /// DebugIdMap - This maps DebugLocTuple's to indices into the
52     /// DebugLocations vector.
53     DenseMap<MDNode *, unsigned> DebugIdMap;
54
55     DebugLocTracker() {}
56   };
57   
58 } // end namespace llvm
59
60 #endif /* LLVM_DEBUGLOC_H */