Skip to content

Commit 18c34e4

Browse files
committed
Introduce Bx::switch_to_block
1 parent 56b7080 commit 18c34e4

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/builder.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,11 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
404404
func.new_block(name)
405405
}
406406

407+
fn switch_to_block(&mut self, block: Self::BasicBlock) {
408+
*self.cx.current_block.borrow_mut() = Some(block);
409+
self.block = Some(block);
410+
}
411+
407412
fn ret_void(&mut self) {
408413
self.llbb().end_with_void_return(None)
409414
}
@@ -886,19 +891,20 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
886891

887892
self.br(header_bb);
888893

889-
let mut header_bx = Builder::build(self.cx, header_bb);
890-
let keep_going = header_bx.icmp(IntPredicate::IntNE, current_val, end);
891-
header_bx.cond_br(keep_going, body_bb, next_bb);
894+
self.switch_to_block(header_bb);
895+
let keep_going = self.icmp(IntPredicate::IntNE, current_val, end);
896+
self.cond_br(keep_going, body_bb, next_bb);
892897

893-
let mut body_bx = Builder::build(self.cx, body_bb);
898+
self.switch_to_block(body_bb);
894899
let align = dest.align.restrict_for_offset(dest.layout.field(self.cx(), 0).size);
895-
cg_elem.val.store(&mut body_bx, PlaceRef::new_sized_aligned(current_val, cg_elem.layout, align));
900+
cg_elem.val.store(&mut self, PlaceRef::new_sized_aligned(current_val, cg_elem.layout, align));
896901

897-
let next = body_bx.inbounds_gep(self.backend_type(cg_elem.layout), current.to_rvalue(), &[self.const_usize(1)]);
898-
body_bx.llbb().add_assignment(None, current, next);
899-
body_bx.br(header_bb);
902+
let next = self.inbounds_gep(self.backend_type(cg_elem.layout), current.to_rvalue(), &[self.const_usize(1)]);
903+
self.llbb().add_assignment(None, current, next);
904+
self.br(header_bb);
900905

901-
Builder::build(self.cx, next_bb)
906+
self.switch_to_block(next_bb);
907+
self
902908
}
903909

904910
fn range_metadata(&mut self, _load: RValue<'gcc>, _range: WrappingRange) {

0 commit comments

Comments
 (0)