Mesa (master): radeon/llvm: Implement radeon_llvm_get_kernel_module() using the C API

Tom Stellard tstellar at kemper.freedesktop.org
Wed Mar 13 17:29:02 UTC 2013


Module: Mesa
Branch: master
Commit: 2ace79dce5b6df453a903eb1ab51b688e0c00dd6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ace79dce5b6df453a903eb1ab51b688e0c00dd6

Author: Tom Stellard <thomas.stellard at amd.com>
Date:   Thu Mar  7 16:51:11 2013 -0500

radeon/llvm: Implement radeon_llvm_get_kernel_module() using the C API

---

 src/gallium/drivers/radeon/Makefile.am          |    1 +
 src/gallium/drivers/radeon/radeon_llvm_util.cpp |   21 ++++++++++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/radeon/Makefile.am b/src/gallium/drivers/radeon/Makefile.am
index e6eb241..678a0cb 100644
--- a/src/gallium/drivers/radeon/Makefile.am
+++ b/src/gallium/drivers/radeon/Makefile.am
@@ -14,6 +14,7 @@ noinst_LTLIBRARIES = libllvmradeon at VERSION@.la
 endif
 
 AM_CXXFLAGS = \
+	$(GALLIUM_CFLAGS) \
 	$(filter-out -DDEBUG, $(LLVM_CXXFLAGS)) \
 	$(DEFINES)
 
diff --git a/src/gallium/drivers/radeon/radeon_llvm_util.cpp b/src/gallium/drivers/radeon/radeon_llvm_util.cpp
index fcfb6d8..17a3122 100644
--- a/src/gallium/drivers/radeon/radeon_llvm_util.cpp
+++ b/src/gallium/drivers/radeon/radeon_llvm_util.cpp
@@ -14,6 +14,7 @@
 #include <llvm-c/Core.h>
 
 #include "radeon_llvm_util.h"
+#include "util/u_memory.h"
 
 
 static LLVMModuleRef radeon_llvm_parse_bitcode(const unsigned char * bitcode,
@@ -49,13 +50,19 @@ extern "C" unsigned radeon_llvm_get_num_kernels(const unsigned char *bitcode,
 extern "C" LLVMModuleRef radeon_llvm_get_kernel_module(unsigned index,
 		const unsigned char *bitcode, unsigned bitcode_len)
 {
-	LLVMModuleRef mod = radeon_llvm_parse_bitcode(bitcode, bitcode_len);
-	llvm::Module *M = llvm::unwrap(mod);
-	const llvm::NamedMDNode *kernel_node =
-				M->getNamedMetadata("opencl.kernels");
-	const char* kernel_name = kernel_node->getOperand(index)->
-					getOperand(0)->getName().data();
+	LLVMModuleRef mod;
+	unsigned num_kernels;
+	LLVMValueRef *kernel_metadata;
+	LLVMValueRef kernel_signature, kernel_function;
+
+	mod = radeon_llvm_parse_bitcode(bitcode, bitcode_len);
+	num_kernels = LLVMGetNamedMetadataNumOperands(mod, "opencl.kernels");
+	kernel_metadata = (LLVMValueRef*)MALLOC(num_kernels * sizeof(LLVMValueRef));
+	LLVMGetNamedMetadataOperands(mod, "opencl.kernels", kernel_metadata);
+	kernel_signature = kernel_metadata[index];
+	LLVMGetMDNodeOperands(kernel_signature, &kernel_function);
+	const char* kernel_name = LLVMGetValueName(kernel_function);
 	radeon_llvm_strip_unused_kernels(mod, kernel_name);
+	FREE(kernel_metadata);
 	return mod;
-
 }




More information about the mesa-commit mailing list