summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGDebugInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.h')
-rw-r--r--clang/lib/CodeGen/CGDebugInfo.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h
new file mode 100644
index 00000000000..2097a1d2f06
--- /dev/null
+++ b/clang/lib/CodeGen/CGDebugInfo.h
@@ -0,0 +1,84 @@
+//===--- CGDebugInfo.h - DebugInfo for LLVM CodeGen -----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This is the source level debug info generator for llvm translation.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_CODEGEN_CGDEBUGINFO_H
+#define CLANG_CODEGEN_CGDEBUGINFO_H
+
+#include "clang/Basic/SourceLocation.h"
+#include <map>
+#include <vector>
+
+
+namespace llvm {
+ class Function;
+ class IRBuilder;
+ class DISerializer;
+ class CompileUnitDesc;
+ class BasicBlock;
+ class AnchorDesc;
+ class DebugInfoDesc;
+ class Value;
+}
+
+namespace clang {
+namespace CodeGen {
+ class CodeGenModule;
+
+/// DebugInfo - This class gathers all debug information during compilation and
+/// is responsible for emitting to llvm globals or pass directly to the backend.
+class CGDebugInfo {
+private:
+ CodeGenModule *M;
+ llvm::DISerializer *SR;
+ SourceLocation CurLoc;
+ SourceLocation PrevLoc;
+
+ /// CompileUnitCache - Cache of previously constructed CompileUnits.
+ std::map<unsigned, llvm::CompileUnitDesc *> CompileUnitCache;
+
+ llvm::Function *StopPointFn;
+ llvm::AnchorDesc *CompileUnitAnchor;
+ llvm::Function *RegionStartFn;
+ llvm::Function *RegionEndFn;
+ std::vector<llvm::DebugInfoDesc *> RegionStack;
+
+public:
+ CGDebugInfo(CodeGenModule *m);
+ ~CGDebugInfo();
+
+ void setLocation(SourceLocation loc) { CurLoc = loc; };
+
+ /// EmitStopPoint - Emit a call to llvm.dbg.stoppoint to indicate a change of
+ /// source line.
+ void EmitStopPoint(llvm::Function *Fn, llvm::IRBuilder &Builder);
+
+ /// EmitRegionStart - Emit a call to llvm.dbg.region.start to indicate start
+ /// of a new block.
+ void EmitRegionStart(llvm::Function *Fn, llvm::IRBuilder &Builder);
+
+ /// EmitRegionEnd - Emit call to llvm.dbg.region.end to indicate end of a
+ /// block.
+ void EmitRegionEnd(llvm::Function *Fn, llvm::IRBuilder &Builder);
+
+ /// getOrCreateCompileUnit - Get the compile unit from the cache or create a
+ /// new one if necessary.
+ llvm::CompileUnitDesc *getOrCreateCompileUnit(SourceLocation loc);
+
+ /// getCastValueFor - Return a llvm representation for a given debug
+ /// information descriptor cast to an empty struct pointer.
+ llvm::Value *getCastValueFor(llvm::DebugInfoDesc *DD);
+};
+} // namespace CodeGen
+} // namespace clang
+
+#endif
OpenPOWER on IntegriCloud