[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