On Tue, Apr 15, 2008 at 7:49 AM, Sandeep Maram <[EMAIL PROTECTED]> wrote:
> On Tue, Apr 15, 2008 at 10:34 AM, Daniel Berlin <[EMAIL PROTECTED]> wrote:
>  > To clarify what Richard means, your assertion that "you have updated
>  >  SSA information" is false.
>  >  If you had updated the SSA information, the error would not occur :).
>  >
>  >  How exactly are you updating the ssa information?
>
>  I am calling update_ssa (TODO_update_ssa), after all the statements
>  are transferred.
>
>
>  >
>  >  The general way to update SSA for this case would be:
>  >
>  >  For each statement you have moved:
>  >   Call update_stmt (t);
>  >
>  >  Then call update_ssa (TODO_update_ssa) (or instead use
>  >  rewrite_into_loop_closed_ssa if this is a loop pass).
>  >
>  >  If you do not call update_stmt in this case, update_ssa won't actually
>  >  do anything.
>  >
>  >  Diego, the bsi iterators do not update the statements for you though
>  >  it is not clear if this is a bug or not.
>  >
>  >  The bsi iterators call update_modified_stmts, which says:
>  >
>  >  /* Mark statement T as modified, and update it.  */
>  >  static inline void
>  >  update_modified_stmts (tree t)
>  >
>  >  However, this only calls update_stmt_if_modified (IE it does not mark
>  >  the statement as modified and update it, as it claims to).
>  >
>  >  Sandeep, it should also suffice to call mark_stmt_modified *before*
>  >  moving the statements (since the above routine should then update
>  >  them).
>  >
>
>  Thanks. I will use update_stmt, update_ssa now.

You need to do more than that - you appearantly are moving uses of
SSA names to a place where its definition is not available like if you do

  b_1 = 1;
  a_1 = b_1 + 1;

and transform this to

  a_1 = b_1 + 1;
  b_1 = 1;

which obviously cannot work.  So "updating" SSA form won't help you
and renaming the symbols will only make the verifier happy and leave
you with wrong code.

So you need to investigate what exactly you are doing wrong with
your stmt movement.

Richard.

Reply via email to