[Mesa-dev] [PATCH 2/7] radeon/llvm: Implement radeon_llvm_parse_bitcode() using C API

Tom Stellard tom at stellard.net
Thu Mar 7 13:51:09 PST 2013


From: Tom Stellard <thomas.stellard at amd.com>

Also make the function static since it is not used anywhere else.
---
 src/gallium/drivers/radeon/radeon_llvm_util.cpp |   18 +++++++++++-------
 src/gallium/drivers/radeon/radeon_llvm_util.h   |    1 -
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/radeon/radeon_llvm_util.cpp b/src/gallium/drivers/radeon/radeon_llvm_util.cpp
index 22c6dc6..5f63ed7 100644
--- a/src/gallium/drivers/radeon/radeon_llvm_util.cpp
+++ b/src/gallium/drivers/radeon/radeon_llvm_util.cpp
@@ -10,18 +10,22 @@
 #include <llvm/Support/MemoryBuffer.h>
 #include <llvm/Support/SourceMgr.h>
 #include <llvm/Transforms/IPO.h>
+#include <llvm-c/BitReader.h>
+#include <llvm-c/Core.h>
 
 #include "radeon_llvm_util.h"
 
 
-extern "C" LLVMModuleRef radeon_llvm_parse_bitcode(const unsigned char * bitcode, unsigned bitcode_len)
+static LLVMModuleRef radeon_llvm_parse_bitcode(const unsigned char * bitcode,
+							unsigned bitcode_len)
 {
-	llvm::OwningPtr<llvm::Module> M;
-	llvm::StringRef str((const char*)bitcode, bitcode_len);
-	llvm::MemoryBuffer*  buffer = llvm::MemoryBuffer::getMemBufferCopy(str);
-	llvm::SMDiagnostic Err;
-	M.reset(llvm::ParseIR(buffer, Err, llvm::getGlobalContext()));
-	return wrap(M.take());
+	LLVMMemoryBufferRef buf;
+	LLVMModuleRef module = LLVMModuleCreateWithName("radeon");
+
+	buf = LLVMCreateMemoryBufferWithMemoryRangeCopy((const char*)bitcode,
+							bitcode_len, "radeon");
+	LLVMParseBitcode(buf, &module, NULL);
+	return module;
 }
 
 extern "C" void radeon_llvm_strip_unused_kernels(LLVMModuleRef mod, const char *kernel_name)
diff --git a/src/gallium/drivers/radeon/radeon_llvm_util.h b/src/gallium/drivers/radeon/radeon_llvm_util.h
index a7dfa9b..e144164 100644
--- a/src/gallium/drivers/radeon/radeon_llvm_util.h
+++ b/src/gallium/drivers/radeon/radeon_llvm_util.h
@@ -7,7 +7,6 @@
 extern "C" {
 #endif
 
-LLVMModuleRef radeon_llvm_parse_bitcode(const unsigned char * bitcode, unsigned bitcode_len);
 void radeon_llvm_strip_unused_kernels(LLVMModuleRef mod, const char *kernel_name);
 unsigned radeon_llvm_get_num_kernels(const unsigned char *bitcode, unsigned bitcode_len);
 LLVMModuleRef radeon_llvm_get_kernel_module(unsigned index,
-- 
1.7.8.6



More information about the mesa-dev mailing list