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>
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev