@@ -701,19 +701,22 @@ fn trans_stmt<'tcx>(
701
701
fx. bcx . call_memset ( fx. cx . module . target_config ( ) , addr, val, times) ;
702
702
} else {
703
703
let loop_block = fx. bcx . create_block ( ) ;
704
+ let loop_block2 = fx. bcx . create_block ( ) ;
704
705
let done_block = fx. bcx . create_block ( ) ;
705
706
let index = fx. bcx . append_block_param ( loop_block, fx. pointer_type ) ;
706
707
let zero = fx. bcx . ins ( ) . iconst ( fx. pointer_type , 0 ) ;
707
708
fx. bcx . ins ( ) . jump ( loop_block, & [ zero] ) ;
708
709
709
710
fx. bcx . switch_to_block ( loop_block) ;
711
+ let done = fx. bcx . ins ( ) . icmp_imm ( IntCC :: Equal , index, times as i64 ) ;
712
+ fx. bcx . ins ( ) . brnz ( done, done_block, & [ ] ) ;
713
+ fx. bcx . ins ( ) . jump ( loop_block2, & [ ] ) ;
714
+
715
+ fx. bcx . switch_to_block ( loop_block2) ;
710
716
let to = lval. place_index ( fx, index) ;
711
717
to. write_cvalue ( fx, operand) ;
712
-
713
718
let index = fx. bcx . ins ( ) . iadd_imm ( index, 1 ) ;
714
- let done = fx. bcx . ins ( ) . icmp_imm ( IntCC :: Equal , index, times as i64 ) ;
715
- fx. bcx . ins ( ) . brz ( done, loop_block, & [ index] ) ;
716
- fx. bcx . ins ( ) . jump ( done_block, & [ ] ) ;
719
+ fx. bcx . ins ( ) . jump ( loop_block, & [ index] ) ;
717
720
718
721
fx. bcx . switch_to_block ( done_block) ;
719
722
}
0 commit comments