Maybe should use the new version for older llvm versions too? I think it
would work back to around llvm 3.4 or 3.5. Meaning you don't need a
ifdef for the radeon drivers.
Or ist there any disadvantage of this versus the older method?

Roland

Am 28.01.2017 um 17:40 schrieb Bas Nieuwenhuizen:
> 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.
> 
> Signed-off-by: Bas Nieuwenhuizen <ba...@google.com>
> ---
>  src/amd/common/ac_llvm_util.c            | 12 ++++++++++++
>  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, 26 insertions(+), 5 deletions(-)
> 
> diff --git a/src/amd/common/ac_llvm_util.c b/src/amd/common/ac_llvm_util.c
> index 770e3bd13c1..73181330b30 100644
> --- a/src/amd/common/ac_llvm_util.c
> +++ b/src/amd/common/ac_llvm_util.c
> @@ -504,3 +504,15 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx,
>  
>       memcpy(coords_arg, coords, sizeof(coords));
>  }
> +
> +void
> +ac_dump_module(LLVMModuleRef module)
> +{
> +#if HAVE_LLVM >= 0x500
> +     char *str = LLVMPrintModuleToString(module);
> +     fprintf(stderr, "%s", str);
> +     LLVMDisposeMessage(str);
> +#else
> +     DumpModule(module);
> +#endif
> +}
> 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..b15de129557 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 >= 0x500
> +             char *str = LLVMPrintModuleToString(gallivm->module);
> +             fprintf(stderr, "%s", str);
> +             LLVMDisposeMessage(str);
> +#else
> +             DumpModule(gallivm->module);
> +#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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to