Meanwhile I've obtained commit permission, so committed as d2cd2c6.
On Fri, Jul 31, 2015 at 4:06 PM, Zoltán Gilián <zoltan.gil...@gmail.com> wrote: > Could you please commit this? > > On Mon, Jul 27, 2015 at 1:20 PM, Francisco Jerez <curroje...@riseup.net> > wrote: >> Zoltan Gilian <zoltan.gil...@gmail.com> writes: >> >>> --- >>> .../state_trackers/clover/llvm/invocation.cpp | 28 >>> ++++++++++++---------- >>> 1 file changed, 15 insertions(+), 13 deletions(-) >>> >>> diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp >>> b/src/gallium/state_trackers/clover/llvm/invocation.cpp >>> index 967284d..924cb36 100644 >>> --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp >>> +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp >>> @@ -269,17 +269,19 @@ namespace { >>> #endif >>> } >>> >>> - void >>> - find_kernels(llvm::Module *mod, std::vector<llvm::Function *> &kernels) >>> { >>> + std::vector<llvm::Function *> >>> + find_kernels(const llvm::Module *mod) { >>> const llvm::NamedMDNode *kernel_node = >>> mod->getNamedMetadata("opencl.kernels"); >>> // This means there are no kernels in the program. The spec does not >>> // require that we return an error here, but there will be an error >>> if >>> // the user tries to pass this program to a clCreateKernel() call. >>> if (!kernel_node) { >>> - return; >>> + return std::vector<llvm::Function *>(); >>> } >>> >>> + std::vector<llvm::Function *> kernels; >>> + kernels.reserve(kernel_node->getNumOperands()); >>> for (unsigned i = 0; i < kernel_node->getNumOperands(); ++i) { >>> #if HAVE_LLVM >= 0x0306 >>> kernels.push_back(llvm::mdconst::dyn_extract<llvm::Function>( >>> @@ -288,11 +290,11 @@ namespace { >>> #endif >>> >>> kernel_node->getOperand(i)->getOperand(0))); >>> } >>> + return kernels; >>> } >>> >>> void >>> - optimize(llvm::Module *mod, unsigned optimization_level, >>> - const std::vector<llvm::Function *> &kernels) { >>> + optimize(llvm::Module *mod, unsigned optimization_level) { >>> >>> #if HAVE_LLVM >= 0x0307 >>> llvm::legacy::PassManager PM; >>> @@ -300,6 +302,8 @@ namespace { >>> llvm::PassManager PM; >>> #endif >>> >>> + const std::vector<llvm::Function *> kernels = find_kernels(mod); >>> + >>> // Add a function internalizer pass. >>> // >>> // By default, the function internalizer pass will look for a >>> function >>> @@ -435,7 +439,6 @@ namespace { >>> >>> module >>> build_module_llvm(llvm::Module *mod, >>> - const std::vector<llvm::Function *> &kernels, >>> clang::LangAS::Map& address_spaces) { >>> >>> module m; >>> @@ -447,6 +450,7 @@ namespace { >>> llvm::WriteBitcodeToFile(mod, bitcode_ostream); >>> bitcode_ostream.flush(); >>> >>> + const std::vector<llvm::Function *> kernels = find_kernels(mod); >>> for (unsigned i = 0; i < kernels.size(); ++i) { >>> std::string kernel_name = kernels[i]->getName(); >>> std::vector<module::argument> args = >>> @@ -610,10 +614,11 @@ namespace { >>> module >>> build_module_native(std::vector<char> &code, >>> const llvm::Module *mod, >>> - const std::vector<llvm::Function *> &kernels, >>> const clang::LangAS::Map &address_spaces, >>> std::string &r_log) { >>> >>> + const std::vector<llvm::Function *> kernels = find_kernels(mod); >>> + >>> std::map<std::string, unsigned> kernel_offsets = >>> get_kernel_offsets(code, kernels, r_log); >>> >>> @@ -697,7 +702,6 @@ clover::compile_program_llvm(const std::string &source, >>> >>> init_targets(); >>> >>> - std::vector<llvm::Function *> kernels; >>> size_t processor_str_len = std::string(target).find_first_of("-"); >>> std::string processor(target, 0, processor_str_len); >>> std::string triple(target, processor_str_len + 1, >>> @@ -717,9 +721,7 @@ clover::compile_program_llvm(const std::string &source, >>> triple, processor, opts, >>> address_spaces, >>> optimization_level, r_log); >>> >>> - find_kernels(mod, kernels); >>> - >>> - optimize(mod, optimization_level, kernels); >>> + optimize(mod, optimization_level); >>> >>> if (get_debug_flags() & DBG_LLVM) { >>> std::string log; >>> @@ -738,13 +740,13 @@ clover::compile_program_llvm(const std::string >>> &source, >>> m = module(); >>> break; >>> case PIPE_SHADER_IR_LLVM: >>> - m = build_module_llvm(mod, kernels, address_spaces); >>> + m = build_module_llvm(mod, address_spaces); >>> break; >>> case PIPE_SHADER_IR_NATIVE: { >>> std::vector<char> code = compile_native(mod, triple, processor, >>> get_debug_flags() & >>> DBG_ASM, >>> r_log); >>> - m = build_module_native(code, mod, kernels, address_spaces, >>> r_log); >>> + m = build_module_native(code, mod, address_spaces, r_log); >>> break; >>> } >>> } >>> -- >>> 2.4.6 >> >> Looks good, >> Reviewed-by: Francisco Jerez <curroje...@riseup.net> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev