[Mesa-dev] [PATCH 1/2] clover: move find_kernels to functions
Francisco Jerez
currojerez at riseup.net
Mon Jul 27 04:20:27 PDT 2015
Zoltan Gilian <zoltan.gilian at 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 <currojerez at riseup.net>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150727/4805139a/attachment.sig>
More information about the mesa-dev
mailing list