diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_flow.c | 16 | 
1 files changed, 9 insertions, 7 deletions
| diff --git a/src/gallium/drivers/llvmpipe/lp_bld_flow.c b/src/gallium/drivers/llvmpipe/lp_bld_flow.c index 161ec95d8c..693742ff85 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_flow.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_flow.c @@ -647,9 +647,12 @@ lp_build_if(struct lp_build_if_state *ctx,     LLVMPositionBuilderAtEnd(builder, ifthen->merge_block);     /* create a phi node for each variable */ -   for (i = 0; i < flow->num_variables; i++) +   for (i = 0; i < flow->num_variables; i++) {        ifthen->phi[i] = LLVMBuildPhi(builder, LLVMTypeOf(*flow->variables[i]), ""); +      /* add add the initial value of the var from the entry block */ +      LLVMAddIncoming(ifthen->phi[i], flow->variables[i], &ifthen->entry_block, 1); +   }     /* create/insert true_block before merge_block */     ifthen->true_block = LLVMInsertBasicBlock(ifthen->merge_block, "if-true-block"); @@ -706,21 +709,20 @@ lp_build_endif(struct lp_build_if_state *ctx)        for (i = 0; i < flow->num_variables; i++) {           assert(*flow->variables[i]);           LLVMAddIncoming(ifthen->phi[i], flow->variables[i], &ifthen->false_block, 1); + +         /* replace the variable ref with the phi function */ +         *flow->variables[i] = ifthen->phi[i];        }     }     else {        /* no else clause */        LLVMPositionBuilderAtEnd(ctx->builder, ifthen->merge_block);        for (i = 0; i < flow->num_variables; i++) { -         LLVMValueRef undef; -           assert(*flow->variables[i]); -           LLVMAddIncoming(ifthen->phi[i], flow->variables[i], &ifthen->true_block, 1); -         /* undef value from the block preceeding the 'if' */ -         undef = LLVMGetUndef(LLVMTypeOf(*flow->variables[i])); -         LLVMAddIncoming(ifthen->phi[i], &undef, &ifthen->entry_block, 1); +         /* replace the variable ref with the phi function */ +         *flow->variables[i] = ifthen->phi[i];        }     } | 
