Introduce DebugScope which gets embedded into the machine instructions' DebugLoc.
DebugScope refers to a debug region, function or block.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72191 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp
index cacfed1..d1d782c 100644
--- a/lib/CodeGen/MachineFunction.cpp
+++ b/lib/CodeGen/MachineFunction.cpp
@@ -403,8 +403,9 @@
 /// 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, Line, Col);
+  DebugLocTuple Tuple(CompileUnit, Scope, Line, Col);
   DenseMap<DebugLocTuple, unsigned>::iterator II
     = DebugLocInfo.DebugIdMap.find(Tuple);
   if (II != DebugLocInfo.DebugIdMap.end())
@@ -424,6 +425,21 @@
   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
 //===----------------------------------------------------------------------===//