diff options
| author | Brian Paul <brianp@vmware.com> | 2010-01-08 12:47:30 -0700 | 
|---|---|---|
| committer | Brian Paul <brianp@vmware.com> | 2010-01-08 12:47:30 -0700 | 
| commit | 5208af7853989c30bea6ce8c4ac659a2f2304225 (patch) | |
| tree | e537948aff8848d69f5c470e117b1402ab6cd464 /src | |
| parent | 855d7f51e4cfd6f4ce04bf34164676ba3bc2fc39 (diff) | |
llvmpipe: fix more if/else/endif design bugs
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];        }     } | 
