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 */