Go bindings: add DIBuilder.InsertValueAtEnd
authorPeter Collingbourne <peter@pcc.me.uk>
Tue, 25 Nov 2014 21:05:04 +0000 (21:05 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Tue, 25 Nov 2014 21:05:04 +0000 (21:05 +0000)
Expose llvm::DIBuilder::insertDbgValueIntrinsic as
DIBuilder.InsertValueAtEnd in the Go bindings, to support attaching
debug metadata to register values.

Patch by Andrew Wilkins!

Differential Revision: http://reviews.llvm.org/D6374

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222790 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/go/llvm/DIBuilderBindings.cpp
bindings/go/llvm/DIBuilderBindings.h
bindings/go/llvm/dibuilder.go

index 94fa96f20e35259fffd07420fb7f1f12e2e9029b..cb7ac8ddd9c4929d3bc834b772902ff968f3410c 100644 (file)
@@ -19,8 +19,7 @@
 using namespace llvm;
 
 namespace {
 using namespace llvm;
 
 namespace {
-template <typename T>
-T unwrapDI(LLVMValueRef v) {
+template <typename T> T unwrapDI(LLVMValueRef v) {
   return v ? T(unwrap<MDNode>(v)) : T();
 }
 }
   return v ? T(unwrap<MDNode>(v)) : T();
 }
 }
@@ -220,3 +219,15 @@ LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef Dref,
                        unwrapDI<DIExpression>(Expr), unwrap(Block));
   return wrap(Instr);
 }
                        unwrapDI<DIExpression>(Expr), unwrap(Block));
   return wrap(Instr);
 }
+
+LLVMValueRef LLVMDIBuilderInsertValueAtEnd(LLVMDIBuilderRef Dref,
+                                           LLVMValueRef Val, uint64_t Offset,
+                                           LLVMValueRef VarInfo,
+                                           LLVMValueRef Expr,
+                                           LLVMBasicBlockRef Block) {
+  DIBuilder *D = unwrap(Dref);
+  Instruction *Instr = D->insertDbgValueIntrinsic(
+      unwrap(Val), Offset, unwrapDI<DIVariable>(VarInfo),
+      unwrapDI<DIExpression>(Expr), unwrap(Block));
+  return wrap(Instr);
+}
index e6fe02a9387d46268f5f9dcdb2e2af4e1a0ba4ce..4df79108c6bca7a8202023929614fb6cf6f5c6ac 100644 (file)
@@ -116,6 +116,13 @@ LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef D,
                                              LLVMValueRef Expr,
                                              LLVMBasicBlockRef Block);
 
                                              LLVMValueRef Expr,
                                              LLVMBasicBlockRef Block);
 
+LLVMValueRef LLVMDIBuilderInsertValueAtEnd(LLVMDIBuilderRef D,
+                                           LLVMValueRef Val,
+                                           uint64_t Offset,
+                                           LLVMValueRef VarInfo,
+                                           LLVMValueRef Expr,
+                                           LLVMBasicBlockRef Block);
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif
 #ifdef __cplusplus
 }  // extern "C"
 #endif
index 1d07e98c839b1cbb3cf7cec8a74f7d5a749e403b..bcbea93a44e7c5293880cb58700e256d50456da3 100644 (file)
@@ -484,6 +484,13 @@ func (d *DIBuilder) InsertDeclareAtEnd(v, diVarInfo, expr Value, bb BasicBlock)
        return Value{C: result}
 }
 
        return Value{C: result}
 }
 
+// InsertValueAtEnd inserts a call to llvm.dbg.value at the end of the
+// specified basic block for the given value and associated debug metadata.
+func (d *DIBuilder) InsertValueAtEnd(v, diVarInfo, expr Value, offset uint64, bb BasicBlock) Value {
+       result := C.LLVMDIBuilderInsertValueAtEnd(d.ref, v.C, C.uint64_t(offset), diVarInfo.C, expr.C, bb.C)
+       return Value{C: result}
+}
+
 func boolToCInt(v bool) C.int {
        if v {
                return 1
 func boolToCInt(v bool) C.int {
        if v {
                return 1