--- a/llvm_c_ext/lib/CoreExt.cpp Mon Aug 17 09:08:47 2015 +0100
+++ b/llvm_c_ext/lib/CoreExt.cpp Mon Aug 17 09:14:38 2015 +0100
@@ -22,6 +22,7 @@
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/Module.h"
using namespace llvm;
@@ -103,3 +104,43 @@
DebugLoc::get(Line, Col, Scope ? unwrap<MDNode>(Scope) : nullptr,
InlinedAt ? unwrap<MDNode>(InlinedAt) : nullptr));
}
+
+LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Bref) {
+ return wrap(unwrap(Bref)->getCurrentDebugLocation());
+}
+
+void LLVMModuleAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior, const char *Key, LLVMMetadataRef Val) {
+ unwrap(M)->addModuleFlag((Module::ModFlagBehavior)Behavior, StringRef(Key), unwrap(Val));
+}
+
+LLVMValueRef LLVMMetadataAsValue(LLVMMetadataRef MD) {
+ return LLVMMetadataAsValueInContext(LLVMGetGlobalContext(), MD);
+}
+
+LLVMValueRef LLVMMetadataAsValueInContext(LLVMContextRef C, LLVMMetadataRef MD) {
+ return wrap(MetadataAsValue::get(*unwrap(C), unwrap(MD)));
+}
+
+LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Value) {
+ return wrap(ValueAsMetadata::get(unwrap(Value)));
+}
+
+int64_t LLVMValueAsSInt64(LLVMValueRef Value) {
+ if (ConstantInt* CI = dyn_cast<ConstantInt>(unwrap(Value))) {
+ if (CI->getBitWidth() <= 64) {
+ return CI->getSExtValue();
+ }
+ }
+ // Not a constant integer value,
+ return 0;
+}
+
+uint64_t LLVMValueAsUInt64(LLVMValueRef Value) {
+ if (ConstantInt* CI = dyn_cast<ConstantInt>(unwrap(Value))) {
+ if (CI->getBitWidth() <= 64) {
+ return CI->getZExtValue();
+ }
+ }
+ // Not a constant integer value,
+ return 0;
+}