diff options
Diffstat (limited to 'src/gallium/drivers/r600')
-rw-r--r-- | src/gallium/drivers/r600/Makefile.am | 6 | ||||
-rw-r--r-- | src/gallium/drivers/r600/Makefile.sources | 1 | ||||
-rw-r--r-- | src/gallium/drivers/r600/evergreen_compute.c | 6 | ||||
-rw-r--r-- | src/gallium/drivers/r600/llvm_wrapper.cpp | 61 | ||||
-rw-r--r-- | src/gallium/drivers/r600/llvm_wrapper.h | 20 |
5 files changed, 4 insertions, 90 deletions
diff --git a/src/gallium/drivers/r600/Makefile.am b/src/gallium/drivers/r600/Makefile.am index e1c8574eb9e..a067f2c4e72 100644 --- a/src/gallium/drivers/r600/Makefile.am +++ b/src/gallium/drivers/r600/Makefile.am @@ -16,8 +16,7 @@ libr600_la_SOURCES = \ if R600_NEED_RADEON_GALLIUM libr600_la_SOURCES += \ - $(LLVM_C_SOURCES) \ - $(LLVM_CXX_SOURCES) + $(LLVM_C_SOURCES) libr600_la_LIBADD = ../radeon/libllvmradeon@[email protected] @@ -25,9 +24,6 @@ AM_CFLAGS += \ $(LLVM_CFLAGS) \ -I$(top_srcdir)/src/gallium/drivers/radeon/ -AM_CXXFLAGS= \ - $(LLVM_CXXFLAGS) \ - $(DEFINES) endif if USE_R600_LLVM_COMPILER diff --git a/src/gallium/drivers/r600/Makefile.sources b/src/gallium/drivers/r600/Makefile.sources index a99ef110d0c..b51f2742ef0 100644 --- a/src/gallium/drivers/r600/Makefile.sources +++ b/src/gallium/drivers/r600/Makefile.sources @@ -20,4 +20,3 @@ C_SOURCES = \ compute_memory_pool.c LLVM_C_SOURCES = r600_llvm.c -LLVM_CXX_SOURCES = llvm_wrapper.cpp diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index 80ce739e021..189ffacb7f7 100644 --- a/src/gallium/drivers/r600/evergreen_compute.c +++ b/src/gallium/drivers/r600/evergreen_compute.c @@ -47,7 +47,7 @@ #include "evergreen_compute_internal.h" #include "compute_memory_pool.h" #ifdef HAVE_OPENCL -#include "llvm_wrapper.h" +#include "radeon_llvm_util.h" #endif /** @@ -140,12 +140,12 @@ void *evergreen_create_compute_state( shader->input_size = cso->req_input_mem; #ifdef HAVE_OPENCL - shader->num_kernels = llvm_get_num_kernels(code, header->num_bytes); + shader->num_kernels = radeon_llvm_get_num_kernels(code, header->num_bytes); shader->kernels = CALLOC(sizeof(struct r600_kernel), shader->num_kernels); for (i = 0; i < shader->num_kernels; i++) { struct r600_kernel *kernel = &shader->kernels[i]; - kernel->llvm_module = llvm_get_kernel_module(i, code, + kernel->llvm_module = radeon_llvm_get_kernel_module(i, code, header->num_bytes); } #endif diff --git a/src/gallium/drivers/r600/llvm_wrapper.cpp b/src/gallium/drivers/r600/llvm_wrapper.cpp deleted file mode 100644 index ae2f4d24f74..00000000000 --- a/src/gallium/drivers/r600/llvm_wrapper.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include <llvm/ADT/OwningPtr.h> -#include <llvm/ADT/StringRef.h> -#if HAVE_LLVM < 0x0303 -#include <llvm/LLVMContext.h> -#else -#include <llvm/IR/LLVMContext.h> -#endif -#include <llvm/PassManager.h> -#include <llvm/Support/IRReader.h> -#include <llvm/Support/MemoryBuffer.h> -#include <llvm/Support/SourceMgr.h> -#include <llvm/Transforms/IPO.h> - -#include "llvm_wrapper.h" - - -extern "C" LLVMModuleRef 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()); -} - -extern "C" void llvm_strip_unused_kernels(LLVMModuleRef mod, const char *kernel_name) -{ - llvm::Module *M = llvm::unwrap(mod); - std::vector<const char *> export_list; - export_list.push_back(kernel_name); - llvm::PassManager PM; - PM.add(llvm::createInternalizePass(export_list)); - PM.add(llvm::createGlobalDCEPass()); - PM.run(*M); -} - -extern "C" unsigned llvm_get_num_kernels(const unsigned char *bitcode, - unsigned bitcode_len) -{ - LLVMModuleRef mod = llvm_parse_bitcode(bitcode, bitcode_len); - llvm::Module *M = llvm::unwrap(mod); - const llvm::NamedMDNode *kernel_node - = M->getNamedMetadata("opencl.kernels"); - unsigned kernel_count = kernel_node->getNumOperands(); - delete M; - return kernel_count; -} - -extern "C" LLVMModuleRef llvm_get_kernel_module(unsigned index, - const unsigned char *bitcode, unsigned bitcode_len) -{ - LLVMModuleRef mod = 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(); - llvm_strip_unused_kernels(mod, kernel_name); - return mod; -} diff --git a/src/gallium/drivers/r600/llvm_wrapper.h b/src/gallium/drivers/r600/llvm_wrapper.h deleted file mode 100644 index 4b9b93f23c6..00000000000 --- a/src/gallium/drivers/r600/llvm_wrapper.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef LLVM_WRAPPER_H -#define LLVM_WRAPPER_H - -#include <llvm-c/Core.h> - -#ifdef __cplusplus -extern "C" { -#endif - -LLVMModuleRef llvm_parse_bitcode(const unsigned char * bitcode, unsigned bitcode_len); -void llvm_strip_unused_kernels(LLVMModuleRef mod, const char *kernel_name); -unsigned llvm_get_num_kernels(const unsigned char *bitcode, unsigned bitcode_len); -LLVMModuleRef llvm_get_kernel_module(unsigned index, - const unsigned char *bitcode, unsigned bitcode_len); - -#ifdef __cplusplus -} -#endif - -#endif |