[Mesa-dev] [PATCH 1/2] clover: move find_kernels to functions

Zoltán Gilián zoltan.gilian at gmail.com
Fri Jul 31 07:06:53 PDT 2015


Could you please commit this?

On Mon, Jul 27, 2015 at 1:20 PM, Francisco Jerez <currojerez at riseup.net> wrote:
> 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>


More information about the mesa-dev mailing list