mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-11 06:28:09 +02:00
llvmpipe: fix more if/else/endif design bugs
This commit is contained in:
parent
855d7f51e4
commit
5208af7853
1 changed files with 9 additions and 7 deletions
|
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue