On Mon, 26 Mar 2012, Razya Ladelsky wrote:
> > +
> > + /* if the latch contains more than the one statemnt of control
> > + increment then it contains the body. */
> > + if (exit_1->dest == loop->latch && last_and_only_stmt (loop->latch))
> > new_rhs = gimple_cond_rhs (cond_stmt);
> > please check what the comment suggests, thus,
> > && last_and_only_stmt (loop->latch) == cond_stmt
> There's no simple way to do such a check,
> as the control variable increment stmt is explicitly created in
> What we do know is that it is put in the latch because we ask for it when
> we call
> canonicalize_loop_ivs from parloops.
> One way to get the control variable increment stmt is to use
> canonicalize_loop_ivs return value and look for the stmts that use it.
> Do you think I should add all this functionality to the code in order to
> the stmt that is in the latch? or can I skip it ?
No, you do not need to do that. I see the check is basically
verifying the latch is empty (apart from the newly inserted
Well, looking at the code simply checking for an empty latch
(before canonicalize_loop_ivs) is not going to make the case
correct when we do _not_ have an empty latch. That is, the whole
logic in transform_to_exit_first_loop seems to assume that either
the latch is empty or the header is empty, but this does not seem
to be verified anywhere (AFAIU)? We copy the loop anyway but
exempt the code in the latch (well, it's not exactly clear
how gimple_duplicate_sese_tail will end up turning the loop
into while (...) style to me).
It might be that the patch is a progression, so it's ok in its