radeonsi: ensure that temp array allocas are in the entry block
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Sat, 29 Jul 2017 07:17:53 +0000 (09:17 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 31 Jul 2017 13:00:22 +0000 (15:00 +0200)
Otherwise, code generation fails. This has become necessary since some
shaders are wrapped in control flow.

Fixes: 081ac6e5c6d2 ("radeonsi/gfx9: always wrap GS and TCS in an if-block (v2)")
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c

index 9c4a2343f544b1c388335d807afbc2f8f820a448..df37267d37d8811cd118beb2bbf0120b5ffd4b18 100644 (file)
@@ -756,7 +756,7 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base,
                         */
                        if (array_size > 16 ||
                            !ctx->screen->llvm_has_working_vgpr_indexing) {
-                               array_alloca = LLVMBuildAlloca(builder,
+                               array_alloca = lp_build_alloca_undef(&ctx->gallivm,
                                        LLVMArrayType(ctx->f32,
                                                      array_size), "array");
                                ctx->temp_array_allocas[id] = array_alloca;