diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 20 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader_internal.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c | 10 |
3 files changed, 12 insertions, 21 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 2928fc9039c..736084f1ad1 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -7015,13 +7015,8 @@ si_generate_gs_copy_shader(struct si_screen *sscreen, LLVMBuildRetVoid(gallivm->builder); - /* Dump LLVM IR before any optimization passes */ - if (sscreen->b.debug_flags & DBG_PREOPT_IR && - r600_can_dump_shader(&sscreen->b, PIPE_SHADER_GEOMETRY)) - ac_dump_module(ctx.gallivm.module); - - si_llvm_finalize_module(&ctx, - r600_extra_shader_checks(&sscreen->b, PIPE_SHADER_GEOMETRY)); + ctx.type = PIPE_SHADER_GEOMETRY; /* override for shader dumping */ + si_llvm_optimize_module(&ctx); r = si_compile_llvm(sscreen, &ctx.shader->binary, &ctx.shader->config, ctx.tm, @@ -8152,13 +8147,7 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, need_prolog ? 1 : 0, 0); } - /* Dump LLVM IR before any optimization passes */ - if (sscreen->b.debug_flags & DBG_PREOPT_IR && - r600_can_dump_shader(&sscreen->b, ctx.type)) - LLVMDumpModule(ctx.gallivm.module); - - si_llvm_finalize_module(&ctx, - r600_extra_shader_checks(&sscreen->b, ctx.type)); + si_llvm_optimize_module(&ctx); /* Post-optimization transformations and analysis. */ si_eliminate_const_vs_outputs(&ctx); @@ -8327,8 +8316,7 @@ si_get_shader_part(struct si_screen *sscreen, build(&ctx, key); /* Compile. */ - si_llvm_finalize_module(&ctx, - r600_extra_shader_checks(&sscreen->b, PIPE_SHADER_FRAGMENT)); + si_llvm_optimize_module(&ctx); if (si_compile_llvm(sscreen, &result->binary, &result->config, tm, gallivm->module, debug, ctx.type, name)) { diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index 03bf83d85ac..b54db20c704 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -271,8 +271,7 @@ void si_llvm_create_func(struct si_shader_context *ctx, void si_llvm_dispose(struct si_shader_context *ctx); -void si_llvm_finalize_module(struct si_shader_context *ctx, - bool run_verifier); +void si_llvm_optimize_module(struct si_shader_context *ctx); LLVMValueRef si_llvm_emit_fetch_64bit(struct lp_build_tgsi_context *bld_base, enum tgsi_opcode_type type, diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c index a2c7e67cf52..2b0d6001fd5 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c @@ -1409,20 +1409,24 @@ void si_llvm_create_func(struct si_shader_context *ctx, LLVMPositionBuilderAtEnd(ctx->gallivm.builder, main_fn_body); } -void si_llvm_finalize_module(struct si_shader_context *ctx, - bool run_verifier) +void si_llvm_optimize_module(struct si_shader_context *ctx) { struct gallivm_state *gallivm = &ctx->gallivm; const char *triple = LLVMGetTarget(gallivm->module); LLVMTargetLibraryInfoRef target_library_info; + /* Dump LLVM IR before any optimization passes */ + if (ctx->screen->b.debug_flags & DBG_PREOPT_IR && + r600_can_dump_shader(&ctx->screen->b, ctx->type)) + LLVMDumpModule(ctx->gallivm.module); + /* Create the pass manager */ gallivm->passmgr = LLVMCreatePassManager(); target_library_info = gallivm_create_target_library_info(triple); LLVMAddTargetLibraryInfo(target_library_info, gallivm->passmgr); - if (run_verifier) + if (r600_extra_shader_checks(&ctx->screen->b, ctx->type)) LLVMAddVerifierPass(gallivm->passmgr); LLVMAddAlwaysInlinerPass(gallivm->passmgr); |