From: Tom Stellard <thomas.stell...@amd.com> --- src/gallium/drivers/r600/evergreen_compute.c | 1 + src/gallium/drivers/r600/llvm_wrapper.cpp | 13 +++++++++++++ src/gallium/drivers/r600/llvm_wrapper.h | 1 + 3 files changed, 15 insertions(+)
diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index 3533312..72c27ae 100644 --- a/src/gallium/drivers/r600/evergreen_compute.c +++ b/src/gallium/drivers/r600/evergreen_compute.c @@ -143,6 +143,7 @@ void *evergreen_create_compute_state( #ifdef HAVE_OPENCL shader->mod = llvm_parse_bitcode(code, header->num_bytes); + llvm_strip_unused_kernels(shader->mod, cso->entry_symbol); r600_compute_shader_create(ctx_, shader->mod, &shader->bc); #endif diff --git a/src/gallium/drivers/r600/llvm_wrapper.cpp b/src/gallium/drivers/r600/llvm_wrapper.cpp index 174fb01..df2976a 100644 --- a/src/gallium/drivers/r600/llvm_wrapper.cpp +++ b/src/gallium/drivers/r600/llvm_wrapper.cpp @@ -1,9 +1,11 @@ #include <llvm/ADT/OwningPtr.h> #include <llvm/ADT/StringRef.h> #include <llvm/LLVMContext.h> +#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" @@ -17,3 +19,14 @@ extern "C" LLVMModuleRef llvm_parse_bitcode(const unsigned char * bitcode, unsig 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); +} diff --git a/src/gallium/drivers/r600/llvm_wrapper.h b/src/gallium/drivers/r600/llvm_wrapper.h index 3a69645..e65f3a0 100644 --- a/src/gallium/drivers/r600/llvm_wrapper.h +++ b/src/gallium/drivers/r600/llvm_wrapper.h @@ -8,6 +8,7 @@ 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); #ifdef __cplusplus } -- 1.7.11.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev