[Mesa-dev] [PATCH v2] various: Fix missing DumpModule with recent LLVM.

Marek Olšák maraeo at gmail.com
Mon Jan 30 16:51:35 UTC 2017


FYI, LLVMDumpModule is back:

r293436 - llvm-c: Keep LLVMDumpModule() even in release builds

Marek

On Mon, Jan 30, 2017 at 3:08 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> On 28.01.2017 23:08, Bas Nieuwenhuizen wrote:
>>
>> Since LLVM revision 293359 DumpModule gets only implemented when
>> either a debug build or LLVM_ENABLE_DUMP is set.
>>
>> This patch adds a direct replacement for the function for radv and
>> radeonsi, However, as I don't know a good place to put common LLVM
>> code for all three I inlined the implementation for LLVMPipe.
>>
>> v2: Use the new code for LLVM 3.4+ instead of LLVM 5+ & fixed indentation
>>
>> Signed-off-by: Bas Nieuwenhuizen <basni at google.com>
>> ---
>>  src/amd/common/ac_llvm_util.c            | 8 ++++++++
>>  src/amd/common/ac_llvm_util.h            | 3 +++
>>  src/amd/common/ac_nir_to_llvm.c          | 2 +-
>>  src/gallium/drivers/llvmpipe/lp_jit.c    | 8 +++++++-
>>  src/gallium/drivers/radeonsi/si_shader.c | 6 +++---
>>  5 files changed, 22 insertions(+), 5 deletions(-)
>>
>> diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
>> index 770e3bd13c1..7317db76baa 100644
>> --- a/src/amd/common/ac_llvm_util.c
>> +++ b/src/amd/common/ac_llvm_util.c
>> @@ -504,3 +504,11 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx,
>>
>>         memcpy(coords_arg, coords, sizeof(coords));
>>  }
>> +
>> +void
>> +ac_dump_module(LLVMModuleRef module)
>> +{
>> +       char *str = LLVMPrintModuleToString(module);
>> +       fprintf(stderr, "%s", str);
>> +       LLVMDisposeMessage(str);
>> +}
>> diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
>> index 802c2662470..2d301c93575 100644
>> --- a/src/amd/common/ac_llvm_util.h
>> +++ b/src/amd/common/ac_llvm_util.h
>> @@ -95,6 +95,9 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx,
>>                        LLVMValueRef *coords_arg,
>>                        LLVMValueRef *derivs_arg);
>>
>> +void
>> +ac_dump_module(LLVMModuleRef module);
>> +
>>  #ifdef __cplusplus
>>  }
>>  #endif
>> diff --git a/src/amd/common/ac_nir_to_llvm.c
>> b/src/amd/common/ac_nir_to_llvm.c
>> index 26b87e8782b..5dc74e82da0 100644
>> --- a/src/amd/common/ac_nir_to_llvm.c
>> +++ b/src/amd/common/ac_nir_to_llvm.c
>> @@ -4566,7 +4566,7 @@ static void
>> ac_compile_llvm_module(LLVMTargetMachineRef tm,
>>                                    bool dump_shader)
>>  {
>>         if (dump_shader)
>> -               LLVMDumpModule(llvm_module);
>> +               ac_dump_module(llvm_module);
>>
>>         memset(binary, 0, sizeof(*binary));
>>         int v = ac_llvm_compile(llvm_module, binary, tm);
>> diff --git a/src/gallium/drivers/llvmpipe/lp_jit.c
>> b/src/gallium/drivers/llvmpipe/lp_jit.c
>> index 21260369aca..bb2b87f862f 100644
>> --- a/src/gallium/drivers/llvmpipe/lp_jit.c
>> +++ b/src/gallium/drivers/llvmpipe/lp_jit.c
>> @@ -222,7 +222,13 @@ lp_jit_create_types(struct lp_fragment_shader_variant
>> *lp)
>>     }
>>
>>     if (gallivm_debug & GALLIVM_DEBUG_IR) {
>> -      LLVMDumpModule(gallivm->module);
>> +#if HAVE_LLVM >= 0x304
>> +      char *str = LLVMPrintModuleToString(gallivm->module);
>> +      fprintf(stderr, "%s", str);
>> +      LLVMDisposeMessage(str);
>> +#else
>> +      DumpModule(gallivm->module);
>
>
> Should be: LLVMDumpModule
>
> Apart from that:
>
> Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
>
>> +#endif
>>     }
>>  }
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_shader.c
>> b/src/gallium/drivers/radeonsi/si_shader.c
>> index 5ca974e48b4..cad7bf7a024 100644
>> --- a/src/gallium/drivers/radeonsi/si_shader.c
>> +++ b/src/gallium/drivers/radeonsi/si_shader.c
>> @@ -6400,7 +6400,7 @@ int si_compile_llvm(struct si_screen *sscreen,
>>
>>                 if (!(sscreen->b.debug_flags & (DBG_NO_IR |
>> DBG_PREOPT_IR))) {
>>                         fprintf(stderr, "%s LLVM IR:\n\n", name);
>> -                       LLVMDumpModule(mod);
>> +                       ac_dump_module(mod);
>>                         fprintf(stderr, "\n");
>>                 }
>>         }
>> @@ -6599,7 +6599,7 @@ si_generate_gs_copy_shader(struct si_screen
>> *sscreen,
>>         /* Dump LLVM IR before any optimization passes */
>>         if (sscreen->b.debug_flags & DBG_PREOPT_IR &&
>>             r600_can_dump_shader(&sscreen->b, PIPE_SHADER_GEOMETRY))
>> -               LLVMDumpModule(bld_base->base.gallivm->module);
>> +               ac_dump_module(bld_base->base.gallivm->module);
>>
>>         si_llvm_finalize_module(&ctx,
>>                 r600_extra_shader_checks(&sscreen->b,
>> PIPE_SHADER_GEOMETRY));
>> @@ -7603,7 +7603,7 @@ int si_compile_tgsi_shader(struct si_screen
>> *sscreen,
>>         /* Dump LLVM IR before any optimization passes */
>>         if (sscreen->b.debug_flags & DBG_PREOPT_IR &&
>>             r600_can_dump_shader(&sscreen->b, ctx.type))
>> -               LLVMDumpModule(mod);
>> +               ac_dump_module(mod);
>>
>>         si_llvm_finalize_module(&ctx,
>>                                     r600_extra_shader_checks(&sscreen->b,
>> ctx.type));
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list