diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp
index d1d782c..cacfed1 100644
--- a/lib/CodeGen/MachineFunction.cpp
+++ b/lib/CodeGen/MachineFunction.cpp
@@ -403,9 +403,8 @@
 /// source file, line, and column. If none currently exists, create a new
 /// DebugLocTuple, and insert it into the DebugIdMap.
 unsigned MachineFunction::getOrCreateDebugLocID(GlobalVariable *CompileUnit,
-                                                DebugScope Scope,
                                                 unsigned Line, unsigned Col) {
-  DebugLocTuple Tuple(CompileUnit, Scope, Line, Col);
+  DebugLocTuple Tuple(CompileUnit, Line, Col);
   DenseMap<DebugLocTuple, unsigned>::iterator II
     = DebugLocInfo.DebugIdMap.find(Tuple);
   if (II != DebugLocInfo.DebugIdMap.end())
@@ -425,21 +424,6 @@
   return DebugLocInfo.DebugLocations[Idx];
 }
 
-/// CreateDebugScope - Create a new debug scope.
-DebugScope MachineFunction::CreateDebugScope(GlobalVariable *ScopeGV,
-                                             DebugScope Parent) {
-  DbgScopeInfos.push_back(DebugScopeInfo(ScopeGV, Parent));
-  return DebugScope::get(DbgScopeInfos.size() - 1);
-}
-
-/// getDebugScopeInfo - Get the DebugScopeInfo for a given DebugScope object.
-const DebugScopeInfo &MachineFunction::getDebugScopeInfo(DebugScope DS) const {
-  unsigned Idx = DS.getIndex();
-  assert(Idx < DbgScopeInfos.size() && "Invalid index into debug scopes!");
-  return DbgScopeInfos[Idx];
-}
-
-
 //===----------------------------------------------------------------------===//
 //  MachineFrameInfo implementation
 //===----------------------------------------------------------------------===//
