aboutsummaryrefslogtreecommitdiffstats
path: root/bindings/go/llvm/IRBindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/go/llvm/IRBindings.cpp')
-rw-r--r--bindings/go/llvm/IRBindings.cpp56
1 files changed, 55 insertions, 1 deletions
diff --git a/bindings/go/llvm/IRBindings.cpp b/bindings/go/llvm/IRBindings.cpp
index 67a54a2..fb451ef 100644
--- a/bindings/go/llvm/IRBindings.cpp
+++ b/bindings/go/llvm/IRBindings.cpp
@@ -12,9 +12,12 @@
//===----------------------------------------------------------------------===//
#include "IRBindings.h"
-
#include "llvm/IR/Attributes.h"
+#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Function.h"
+#include "llvm/IR/IRBuilder.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
using namespace llvm;
@@ -45,3 +48,54 @@ void LLVMRemoveFunctionAttr2(LLVMValueRef Fn, uint64_t PA) {
AttributeSet::FunctionIndex, B));
Func->setAttributes(PALnew);
}
+
+LLVMMetadataRef LLVMConstantAsMetadata(LLVMValueRef C) {
+ return wrap(ConstantAsMetadata::get(unwrap<Constant>(C)));
+}
+
+LLVMMetadataRef LLVMMDString2(LLVMContextRef C, const char *Str, unsigned SLen) {
+ return wrap(MDString::get(*unwrap(C), StringRef(Str, SLen)));
+}
+
+LLVMMetadataRef LLVMMDNode2(LLVMContextRef C, LLVMMetadataRef *MDs,
+ unsigned Count) {
+ return wrap(
+ 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);
+ if (!N)
+ return;
+ if (!Val)
+ return;
+ N->addOperand(unwrap<MDNode>(Val));
+}
+
+void LLVMSetMetadata2(LLVMValueRef Inst, unsigned KindID, LLVMMetadataRef MD) {
+ MDNode *N = MD ? unwrap<MDNode>(MD) : nullptr;
+ unwrap<Instruction>(Inst)->setMetadata(KindID, N);
+}
+
+void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef MD, LLVMMetadataRef New) {
+ auto *Node = unwrap<MDTuple>(MD);
+ assert(Node->isTemporary() && "Expected temporary node");
+ Node->replaceAllUsesWith(unwrap<MDNode>(New));
+ MDNode::deleteTemporary(Node);
+}
+
+void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
+ unsigned Col, LLVMMetadataRef Scope,
+ LLVMMetadataRef InlinedAt) {
+ unwrap(Bref)->SetCurrentDebugLocation(
+ DebugLoc::get(Line, Col, Scope ? unwrap<MDNode>(Scope) : nullptr,
+ InlinedAt ? unwrap<MDNode>(InlinedAt) : nullptr));
+}