diff -r c789c1390911 -r 5280c546bd37 llvm_c_ext/lib/CoreExt.cpp --- 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(Scope) : nullptr, InlinedAt ? unwrap(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(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(unwrap(Value))) { + if (CI->getBitWidth() <= 64) { + return CI->getZExtValue(); + } + } + // Not a constant integer value, + return 0; +}