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