[llvm] r332010 - [LLVM-C] Move DIBuilder Bindings For Temporary MDNodes
Robert Widmann via llvm-commits
llvm-commits at lists.llvm.org
Thu May 10 11:09:54 PDT 2018
Author: codafi
Date: Thu May 10 11:09:53 2018
New Revision: 332010
URL: http://llvm.org/viewvc/llvm-project?rev=332010&view=rev
Log:
[LLVM-C] Move DIBuilder Bindings For Temporary MDNodes
Summary: Move LLVMTemporaryMDNode and LLVMMetadataReplaceAllUsesWith to the C bindings and add LLVMDeleteTemporaryMDNode for deleting non-RAUW'ed temporary nodes.
Reviewers: whitequark, harlanhaskins, deadalnix
Reviewed By: whitequark
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D46632
Modified:
llvm/trunk/bindings/go/llvm/IRBindings.cpp
llvm/trunk/bindings/go/llvm/IRBindings.h
llvm/trunk/bindings/go/llvm/dibuilder.go
llvm/trunk/bindings/go/llvm/ir.go
llvm/trunk/include/llvm-c/DebugInfo.h
llvm/trunk/lib/IR/DebugInfo.cpp
llvm/trunk/tools/llvm-c-test/debuginfo.c
Modified: llvm/trunk/bindings/go/llvm/IRBindings.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/go/llvm/IRBindings.cpp?rev=332010&r1=332009&r2=332010&view=diff
==============================================================================
--- llvm/trunk/bindings/go/llvm/IRBindings.cpp (original)
+++ llvm/trunk/bindings/go/llvm/IRBindings.cpp Thu May 10 11:09:53 2018
@@ -36,13 +36,6 @@ LLVMMetadataRef LLVMMDNode2(LLVMContextR
MDNode::get(*unwrap(C), ArrayRef<Metadata *>(unwrap(MDs), Count)));
}
-LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef C, LLVMMetadataRef *MDs,
- unsigned Count) {
- return wrap(MDTuple::getTemporary(*unwrap(C),
- ArrayRef<Metadata *>(unwrap(MDs), Count))
- .release());
-}
-
void LLVMAddNamedMetadataOperand2(LLVMModuleRef M, const char *name,
LLVMMetadataRef Val) {
NamedMDNode *N = unwrap(M)->getOrInsertNamedMetadata(name);
@@ -58,12 +51,6 @@ void LLVMSetMetadata2(LLVMValueRef Inst,
unwrap<Instruction>(Inst)->setMetadata(KindID, N);
}
-void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef MD, LLVMMetadataRef New) {
- auto *Node = unwrap<MDNode>(MD);
- Node->replaceAllUsesWith(unwrap<Metadata>(New));
- MDNode::deleteTemporary(Node);
-}
-
void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
unsigned Col, LLVMMetadataRef Scope,
LLVMMetadataRef InlinedAt) {
Modified: llvm/trunk/bindings/go/llvm/IRBindings.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/go/llvm/IRBindings.h?rev=332010&r1=332009&r2=332010&view=diff
==============================================================================
--- llvm/trunk/bindings/go/llvm/IRBindings.h (original)
+++ llvm/trunk/bindings/go/llvm/IRBindings.h Thu May 10 11:09:53 2018
@@ -38,15 +38,11 @@ LLVMMetadataRef LLVMConstantAsMetadata(L
LLVMMetadataRef LLVMMDString2(LLVMContextRef C, const char *Str, unsigned SLen);
LLVMMetadataRef LLVMMDNode2(LLVMContextRef C, LLVMMetadataRef *MDs,
unsigned Count);
-LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef C, LLVMMetadataRef *MDs,
- unsigned Count);
void LLVMAddNamedMetadataOperand2(LLVMModuleRef M, const char *name,
LLVMMetadataRef Val);
void LLVMSetMetadata2(LLVMValueRef Inst, unsigned KindID, LLVMMetadataRef MD);
-void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef MD, LLVMMetadataRef New);
-
void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
unsigned Col, LLVMMetadataRef Scope,
LLVMMetadataRef InlinedAt);
Modified: llvm/trunk/bindings/go/llvm/dibuilder.go
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/go/llvm/dibuilder.go?rev=332010&r1=332009&r2=332010&view=diff
==============================================================================
--- llvm/trunk/bindings/go/llvm/dibuilder.go (original)
+++ llvm/trunk/bindings/go/llvm/dibuilder.go Thu May 10 11:09:53 2018
@@ -585,3 +585,17 @@ func boolToCInt(v bool) C.int {
}
return 0
}
+
+//-------------------------------------------------------------------------
+// llvm.Metadata
+//-------------------------------------------------------------------------
+
+func (c Context) TemporaryMDNode(mds []Metadata) (md Metadata) {
+ ptr, nvals := llvmMetadataRefs(mds)
+ md.C = C.LLVMTemporaryMDNode(c.C, ptr, C.size_t(nvals))
+ return
+}
+
+func (md Metadata) ReplaceAllUsesWith(new Metadata) {
+ C.LLVMMetadataReplaceAllUsesWith(md.C, new.C)
+}
Modified: llvm/trunk/bindings/go/llvm/ir.go
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/go/llvm/ir.go?rev=332010&r1=332009&r2=332010&view=diff
==============================================================================
--- llvm/trunk/bindings/go/llvm/ir.go (original)
+++ llvm/trunk/bindings/go/llvm/ir.go Thu May 10 11:09:53 2018
@@ -784,11 +784,6 @@ func (c Context) MDNode(mds []Metadata)
md.C = C.LLVMMDNode2(c.C, ptr, nvals)
return
}
-func (c Context) TemporaryMDNode(mds []Metadata) (md Metadata) {
- ptr, nvals := llvmMetadataRefs(mds)
- md.C = C.LLVMTemporaryMDNode(c.C, ptr, nvals)
- return
-}
func (v Value) ConstantAsMetadata() (md Metadata) {
md.C = C.LLVMConstantAsMetadata(v.C)
return
@@ -1916,11 +1911,3 @@ func (pm PassManager) FinalizeFunc() boo
// the module provider.
// See llvm::PassManagerBase::~PassManagerBase.
func (pm PassManager) Dispose() { C.LLVMDisposePassManager(pm.C) }
-
-//-------------------------------------------------------------------------
-// llvm.Metadata
-//-------------------------------------------------------------------------
-
-func (md Metadata) ReplaceAllUsesWith(new Metadata) {
- C.LLVMMetadataReplaceAllUsesWith(md.C, new.C)
-}
Modified: llvm/trunk/include/llvm-c/DebugInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/DebugInfo.h?rev=332010&r1=332009&r2=332010&view=diff
==============================================================================
--- llvm/trunk/include/llvm-c/DebugInfo.h (original)
+++ llvm/trunk/include/llvm-c/DebugInfo.h Thu May 10 11:09:53 2018
@@ -830,6 +830,33 @@ LLVMDIBuilderCreateGlobalVariableExpress
LLVMMetadataRef Expr,
LLVMMetadataRef Decl,
uint32_t AlignInBits);
+/**
+ * Create a new temporary \c MDNode. Suitable for use in constructing cyclic
+ * \c MDNode structures. A temporary \c MDNode is not uniqued, may be RAUW'd,
+ * and must be manually deleted with \c LLVMDisposeTemporaryMDNode.
+ * \param Ctx The context in which to construct the temporary node.
+ * \param Data The metadata elements.
+ * \param NumElements Number of metadata elements.
+ */
+LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data,
+ size_t NumElements);
+
+/**
+ * Deallocate a temporary node.
+ *
+ * Calls \c replaceAllUsesWith(nullptr) before deleting, so any remaining
+ * references will be reset.
+ * \param TempNode The temporary metadata node.
+ */
+void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode);
+
+/**
+ * Replace all uses of temporary metadata.
+ * \param TempTargetMetadata The temporary metadata node.
+ * \param Replacement The replacement metadata node.
+ */
+void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata,
+ LLVMMetadataRef Replacement);
/**
* Create a new descriptor for the specified global variable that is temporary
Modified: llvm/trunk/lib/IR/DebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=332010&r1=332009&r2=332010&view=diff
==============================================================================
--- llvm/trunk/lib/IR/DebugInfo.cpp (original)
+++ llvm/trunk/lib/IR/DebugInfo.cpp Thu May 10 11:09:53 2018
@@ -1152,6 +1152,23 @@ LLVMDIBuilderCreateGlobalVariableExpress
unwrapDI<MDNode>(Decl), AlignInBits));
}
+LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data,
+ size_t Count) {
+ return wrap(
+ MDTuple::getTemporary(*unwrap(Ctx), {unwrap(Data), Count}).release());
+}
+
+void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode) {
+ MDNode::deleteTemporary(unwrapDI<MDNode>(TempNode));
+}
+
+void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TargetMetadata,
+ LLVMMetadataRef Replacement) {
+ auto *Node = unwrapDI<MDNode>(TargetMetadata);
+ Node->replaceAllUsesWith(unwrap<Metadata>(Replacement));
+ MDNode::deleteTemporary(Node);
+}
+
LLVMMetadataRef
LLVMDIBuilderCreateTempGlobalVariableFwdDecl(LLVMDIBuilderRef Builder,
LLVMMetadataRef Scope,
Modified: llvm/trunk/tools/llvm-c-test/debuginfo.c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-c-test/debuginfo.c?rev=332010&r1=332009&r2=332010&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-c-test/debuginfo.c (original)
+++ llvm/trunk/tools/llvm-c-test/debuginfo.c Thu May 10 11:09:53 2018
@@ -93,14 +93,23 @@ int llvm_test_dibuilder(void) {
LLVMMetadataRef ParamTypes[] = {Int64Ty, Int64Ty, VectorTy};
LLVMMetadataRef FunctionTy =
LLVMDIBuilderCreateSubroutineType(DIB, File, ParamTypes, 3, 0);
+
+ LLVMMetadataRef ReplaceableFunctionMetadata =
+ LLVMDIBuilderCreateReplaceableCompositeType(DIB, 0x15, "foo", 3,
+ File, File, 42,
+ 0, 0, 0,
+ LLVMDIFlagFwdDecl,
+ "", 0);
+
+ LLVMMetadataRef FooParamLocation =
+ LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 42, 0,
+ ReplaceableFunctionMetadata, NULL);
LLVMMetadataRef FunctionMetadata =
LLVMDIBuilderCreateFunction(DIB, File, "foo", 3, "foo", 3,
File, 42, FunctionTy, true, true,
42, 0, false);
+ LLVMMetadataReplaceAllUsesWith(ReplaceableFunctionMetadata, FunctionMetadata);
- LLVMMetadataRef FooParamLocation =
- LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 42, 0,
- FunctionMetadata, NULL);
LLVMMetadataRef FooParamExpression =
LLVMDIBuilderCreateExpression(DIB, NULL, 0);
LLVMMetadataRef FooParamVar1 =
More information about the llvm-commits
mailing list