diff --git a/include/llvm/CodeGen/DebugLoc.h b/include/llvm/CodeGen/DebugLoc.h
index baf6583..89c51c4 100644
--- a/include/llvm/CodeGen/DebugLoc.h
+++ b/include/llvm/CodeGen/DebugLoc.h
@@ -33,16 +33,21 @@
     unsigned Idx;
 
   public:
-    DebugLoc() : Idx(~0U) {}
+    DebugLoc() : Idx(~0U) {}  // Defaults to invalid.
 
-    static DebugLoc getNoDebugLoc()   { DebugLoc L; L.Idx = 0;   return L; }
+    static DebugLoc getUnknownLoc()   { DebugLoc L; L.Idx = 0;   return L; }
     static DebugLoc get(unsigned idx) { DebugLoc L; L.Idx = idx; return L; }
 
-    bool isInvalid() { return Idx == ~0U; }
-    bool isUnknown() { return Idx == 0; }
+    // isInvalid - Return true if the DebugLoc is invalid.
+    bool isInvalid() const { return Idx == ~0U; }
+
+    // isUnknown - Return true if there is no debug info for the SDNode /
+    // MachineInstr.
+    bool isUnknown() const { return Idx == 0; }
   };
 
-  struct DebugLocTupleDenseMapInfo {
+  // Partially specialize DenseMapInfo for DebugLocTyple.
+  template<>  struct DenseMapInfo<DebugLocTuple> {
     static inline DebugLocTuple getEmptyKey() {
       return DebugLocTuple(~0U, ~0U, ~0U);
     }
@@ -63,9 +68,6 @@
     static bool isPod() { return true; }
   };
 
-  typedef DenseMap<DebugLocTuple, unsigned, DebugLocTupleDenseMapInfo>
-    DebugIdMapType;
-    
   /// DebugLocTracker - This class tracks debug location information.
   ///
   struct DebugLocTracker {
@@ -75,7 +77,7 @@
 
     // DebugIdsMap - This maps DebugLocTuple's to indices into
     // DebugLocations vector.
-    DebugIdMapType DebugIdMap;
+    DenseMap<DebugLocTuple, unsigned> DebugIdMap;
 
     DebugLocTracker() {}
 
diff --git a/include/llvm/CodeGen/MachineFunction.h b/include/llvm/CodeGen/MachineFunction.h
index 4fa70fc..0d5a71d 100644
--- a/include/llvm/CodeGen/MachineFunction.h
+++ b/include/llvm/CodeGen/MachineFunction.h
@@ -311,10 +311,10 @@
   // Debug location.
   //
 
-  /// lookUpDebugLocId - Look up the DebugLocTuple index with the given
-  /// source file, line, and column. It may add a new filename and / or
-  /// a new DebugLocTuple.
-  unsigned lookUpDebugLocId(unsigned Src, unsigned Line, unsigned Col);
+  /// getOrCreateDebugLocID - Look up the DebugLocTuple index with the given
+  /// source file, line, and column. If none currently exists, create add a new
+  /// new DebugLocTuple and insert it into the DebugIdMap.
+  unsigned getOrCreateDebugLocID(unsigned Src, unsigned Line, unsigned Col);
 };
 
 //===--------------------------------------------------------------------===//
diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp
index abd84ec..b303b1b 100644
--- a/lib/CodeGen/MachineFunction.cpp
+++ b/lib/CodeGen/MachineFunction.cpp
@@ -378,13 +378,14 @@
   return *mc;
 }
 
-/// lookUpDebugLocId - Look up the DebugLocTuple index with the given
-/// source file, line, and column. It may add a new filename and / or
-/// a new DebugLocTuple.
-unsigned MachineFunction::lookUpDebugLocId(unsigned Src, unsigned Line,
-                                           unsigned Col) {
+/// getOrCreateDebugLocID - Look up the DebugLocTuple index with the given
+/// source file, line, and column. If none currently exists, create add a new
+/// new DebugLocTuple and insert it into the DebugIdMap.
+unsigned MachineFunction::getOrCreateDebugLocID(unsigned Src, unsigned Line,
+                                                unsigned Col) {
   struct DebugLocTuple Tuple(Src, Line, Col);
-  DebugIdMapType::iterator II = DebugLocInfo.DebugIdMap.find(Tuple);
+  DenseMap<DebugLocTuple, unsigned>::iterator II
+    = DebugLocInfo.DebugIdMap.find(Tuple);
   if (II != DebugLocInfo.DebugIdMap.end())
     return II->second;
   // Add a new tuple.
