No phi node at all, just an conditional branch

This commit is contained in:
Chad Stearns 2020-08-08 01:26:25 -04:00
parent 0f717ac45a
commit 4e906a5156

View file

@ -1702,15 +1702,19 @@ fn list_join<'a, 'ctx, 'env>(
// inner_list_len > 0 // inner_list_len > 0
let inner_list_comparison = list_is_not_empty(builder, ctx, inner_list_len); let inner_list_comparison = list_is_not_empty(builder, ctx, inner_list_len);
let build_empty = || { let inner_list_non_empty_block =
BasicValueEnum::PointerValue( ctx.append_basic_block(parent, "inner_list_non_empty");
builder
.build_load(dest_elem_ptr_alloca, "load_dest_elem_ptr") let after_inner_list_non_empty_block =
.into_pointer_value(), ctx.append_basic_block(parent, "branchcont");
)
}; builder.build_conditional_branch(
inner_list_comparison,
inner_list_non_empty_block,
after_inner_list_non_empty_block,
);
builder.position_at_end(inner_list_non_empty_block);
let build_non_empty = || {
let inner_index_name = "#inner_index"; let inner_index_name = "#inner_index";
let inner_index_alloca = let inner_index_alloca =
builder.build_alloca(ctx.i64_type(), inner_index_name); builder.build_alloca(ctx.i64_type(), inner_index_name);
@ -1781,20 +1785,8 @@ fn list_join<'a, 'ctx, 'env>(
); );
builder.position_at_end(after_inner_loop_bb); builder.position_at_end(after_inner_loop_bb);
inc_dest_elem_ptr builder.build_unconditional_branch(after_inner_list_non_empty_block);
}; builder.position_at_end(after_inner_list_non_empty_block);
build_basic_phi2(
env,
parent,
inner_list_comparison,
build_non_empty,
build_empty,
BasicTypeEnum::PointerType(get_ptr_type(
&elem_type,
AddressSpace::Generic,
)),
);
} }
// #index < outer_list_len // #index < outer_list_len