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

Nicolai Hähnle nhaehnle at gmail.com
Mon Jan 30 14:08:14 UTC 2017


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));
>



More information about the mesa-dev mailing list