Go bindings: introduce Metadata.ReplaceAllUsesWith.
authorPeter Collingbourne <peter@pcc.me.uk>
Sat, 13 Dec 2014 02:25:51 +0000 (02:25 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Sat, 13 Dec 2014 02:25:51 +0000 (02:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224177 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/go/llvm/IRBindings.cpp
bindings/go/llvm/IRBindings.h
bindings/go/llvm/ir.go

index 6247fbc3baad9ca60906aa02183cd1a42f9b9e70..3099fa562812517ee2b33f6b31f39eca2a021092 100644 (file)
@@ -75,6 +75,12 @@ void LLVMSetMetadata2(LLVMValueRef Inst, unsigned KindID, LLVMMetadataRef MD) {
   unwrap<Instruction>(Inst)->setMetadata(KindID, N);
 }
 
+void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef MD, LLVMMetadataRef New) {
+  auto *Node = unwrap<MDNodeFwdDecl>(MD);
+  Node->replaceAllUsesWith(unwrap<MDNode>(New));
+  MDNode::deleteTemporary(Node);
+}
+
 void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
                                   unsigned Col, LLVMMetadataRef Scope,
                                   LLVMMetadataRef InlinedAt) {
index 8be89445207cedcea0abe87e84dedd7e452d3fad..6bce4f71c2901715be62e58816668f9fed3fd4ba 100644 (file)
@@ -45,6 +45,8 @@ 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);
index af246fe2e65b3882e673be85cb64096c56ab02c9..178eda303bee88dfb47232bee82b91aa88d70e06 100644 (file)
@@ -1827,3 +1827,11 @@ func (pm PassManager) FinalizeFunc() bool { return C.LLVMFinalizeFunctionPassMan
 // 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)
+}