From: Nicolai Hähnle <nicolai.haeh...@amd.com>

---
 src/gallium/drivers/radeonsi/si_shader.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 6ae63c8..5a0153c 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -6776,46 +6776,47 @@ int si_compile_tgsi_shader(struct si_screen *sscreen,
        ctx.is_monolithic = is_monolithic;
 
        memset(shader->info.vs_output_param_offset, 0xff,
               sizeof(shader->info.vs_output_param_offset));
 
        shader->info.uses_instanceid = sel->info.uses_instanceid;
 
        bld_base = &ctx.soa.bld_base;
        ctx.load_system_value = declare_system_value;
 
-       if (!si_compile_tgsi_main(&ctx, shader))
-               goto out;
+       if (!si_compile_tgsi_main(&ctx, shader)) {
+               si_llvm_dispose(&ctx);
+               return -1;
+       }
 
        mod = bld_base->base.gallivm->module;
 
        /* 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);
 
        si_llvm_finalize_module(&ctx,
                                    r600_extra_shader_checks(&sscreen->b, 
ctx.type));
 
        /* Post-optimization transformations. */
        si_eliminate_const_vs_outputs(&ctx);
 
        /* Compile to bytecode. */
        r = si_compile_llvm(sscreen, &shader->binary, &shader->config, tm,
                            mod, debug, ctx.type, "TGSI shader");
+       si_llvm_dispose(&ctx);
        if (r) {
                fprintf(stderr, "LLVM failed to compile shader\n");
-               goto out;
+               return r;
        }
 
-       si_llvm_dispose(&ctx);
-
        /* Validate SGPR and VGPR usage for compute to detect compiler bugs.
         * LLVM 3.9svn has this bug.
         */
        if (sel->type == PIPE_SHADER_COMPUTE) {
                unsigned *props = sel->info.properties;
                unsigned wave_size = 64;
                unsigned max_vgprs = 256;
                unsigned max_sgprs = sscreen->b.chip_class >= VI ? 800 : 512;
                unsigned max_sgprs_per_wave = 128;
                unsigned max_block_threads;
@@ -6891,31 +6892,30 @@ int si_compile_tgsi_shader(struct si_screen *sscreen,
                if 
(G_0286CC_SAMPLE_COVERAGE_ENA(shader->config.spi_ps_input_addr))
                        shader->info.num_input_vgprs += 1;
                if (G_0286CC_POS_FIXED_PT_ENA(shader->config.spi_ps_input_addr))
                        shader->info.num_input_vgprs += 1;
        }
 
        if (ctx.type == PIPE_SHADER_GEOMETRY) {
                shader->gs_copy_shader = CALLOC_STRUCT(si_shader);
                shader->gs_copy_shader->selector = shader->selector;
                ctx.shader = shader->gs_copy_shader;
-               if ((r = si_generate_gs_copy_shader(sscreen, &ctx,
-                                                   shader, debug))) {
+               r = si_generate_gs_copy_shader(sscreen, &ctx,
+                                              shader, debug);
+               if (r) {
                        free(shader->gs_copy_shader);
                        shader->gs_copy_shader = NULL;
-                       goto out;
+                       return r;
                }
        }
 
-       r = 0;
-out:
-       return r;
+       return 0;
 }
 
 /**
  * Create, compile and return a shader part (prolog or epilog).
  *
  * \param sscreen      screen
  * \param list         list of shader parts of the same category
  * \param key          shader part key
  * \param tm           LLVM target machine
  * \param debug                debug callback
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to