various: Fix missing DumpModule with recent LLVM.
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@google.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
@@ -504,3 +504,11 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx,
|
|||||||
|
|
||||||
memcpy(coords_arg, coords, sizeof(coords));
|
memcpy(coords_arg, coords, sizeof(coords));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ac_dump_module(LLVMModuleRef module)
|
||||||
|
{
|
||||||
|
char *str = LLVMPrintModuleToString(module);
|
||||||
|
fprintf(stderr, "%s", str);
|
||||||
|
LLVMDisposeMessage(str);
|
||||||
|
}
|
||||||
|
@@ -95,6 +95,9 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx,
|
|||||||
LLVMValueRef *coords_arg,
|
LLVMValueRef *coords_arg,
|
||||||
LLVMValueRef *derivs_arg);
|
LLVMValueRef *derivs_arg);
|
||||||
|
|
||||||
|
void
|
||||||
|
ac_dump_module(LLVMModuleRef module);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -4569,7 +4569,7 @@ static void ac_compile_llvm_module(LLVMTargetMachineRef tm,
|
|||||||
bool dump_shader)
|
bool dump_shader)
|
||||||
{
|
{
|
||||||
if (dump_shader)
|
if (dump_shader)
|
||||||
LLVMDumpModule(llvm_module);
|
ac_dump_module(llvm_module);
|
||||||
|
|
||||||
memset(binary, 0, sizeof(*binary));
|
memset(binary, 0, sizeof(*binary));
|
||||||
int v = ac_llvm_compile(llvm_module, binary, tm);
|
int v = ac_llvm_compile(llvm_module, binary, tm);
|
||||||
|
@@ -222,7 +222,13 @@ lp_jit_create_types(struct lp_fragment_shader_variant *lp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (gallivm_debug & GALLIVM_DEBUG_IR) {
|
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);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6400,7 +6400,7 @@ int si_compile_llvm(struct si_screen *sscreen,
|
|||||||
|
|
||||||
if (!(sscreen->b.debug_flags & (DBG_NO_IR | DBG_PREOPT_IR))) {
|
if (!(sscreen->b.debug_flags & (DBG_NO_IR | DBG_PREOPT_IR))) {
|
||||||
fprintf(stderr, "%s LLVM IR:\n\n", name);
|
fprintf(stderr, "%s LLVM IR:\n\n", name);
|
||||||
LLVMDumpModule(mod);
|
ac_dump_module(mod);
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6599,7 +6599,7 @@ si_generate_gs_copy_shader(struct si_screen *sscreen,
|
|||||||
/* Dump LLVM IR before any optimization passes */
|
/* Dump LLVM IR before any optimization passes */
|
||||||
if (sscreen->b.debug_flags & DBG_PREOPT_IR &&
|
if (sscreen->b.debug_flags & DBG_PREOPT_IR &&
|
||||||
r600_can_dump_shader(&sscreen->b, PIPE_SHADER_GEOMETRY))
|
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,
|
si_llvm_finalize_module(&ctx,
|
||||||
r600_extra_shader_checks(&sscreen->b, PIPE_SHADER_GEOMETRY));
|
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 */
|
/* Dump LLVM IR before any optimization passes */
|
||||||
if (sscreen->b.debug_flags & DBG_PREOPT_IR &&
|
if (sscreen->b.debug_flags & DBG_PREOPT_IR &&
|
||||||
r600_can_dump_shader(&sscreen->b, ctx.type))
|
r600_can_dump_shader(&sscreen->b, ctx.type))
|
||||||
LLVMDumpModule(mod);
|
ac_dump_module(mod);
|
||||||
|
|
||||||
si_llvm_finalize_module(&ctx,
|
si_llvm_finalize_module(&ctx,
|
||||||
r600_extra_shader_checks(&sscreen->b, ctx.type));
|
r600_extra_shader_checks(&sscreen->b, ctx.type));
|
||||||
|
Reference in New Issue
Block a user