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");
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];
}
}