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