Hi, > The error is rectified. The bug is in the function that calls fuse_loops(). > Now I am trying to transfer all the statements, using code - > > /* The following function fuses two loops. */ > > void > fuse_loops (struct loop *loop_a, struct loop *loop_b) > { > debug_loop (loop_a, 10); > debug_loop (loop_b, 10); > block_stmt_iterator bsi_a = bsi_start (loop_a->header); > block_stmt_iterator bsi_a_last = bsi_last (loop_a->header); > block_stmt_iterator bsi_b = bsi_last (loop_b->header); > while (&bsi_a != &bsi_a_last) > { > bsi_move_before (&bsi_a, &bsi_b); > fprintf (stderr, " transferred one statement from loop %d to > loop %d ", loop_a->num, loop_b->num); > bsi_next (&bsi_a); > }
try bsi_b = bsi_last (loop_b->header); for (bsi_a = bsi_start (loop_a->header); !bsi_end_p (bsi_a); ) { if (some condition) /* you probably want to skip labels and cond_exprs */ bsi_move_before (&bsi_a, &bsi_b); else bsi_next (&bsi_a); } Zdenek