This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[tree-ssa] Question: going in and out of SSA


It seems, after going through various optimization passes,
SSA tree IR does not maintain form that allows me to
rewrite trees in & out of SSA form.

For example,

--- foo.c ---
void foo(int *a, int len)
{
        int i;
        for (i = 0; i < len; i++)
          a[i] = 0;
        return;
}

I get following ICE (inside rewrite_into_ssa()) while compiling foo.c using -O2
foo.c:2: internal compiler error: in get_expr_operands, at tree-ssa-operands.c:905


This is the only change I've in my local tree:

Index: tree-optimize.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-optimize.c,v
retrieving revision 1.1.4.96
diff -Idpatel.pbxuser -c -6 -p -r1.1.4.96 tree-optimize.c
*** tree-optimize.c     17 Dec 2003 19:53:02 -0000      1.1.4.96
--- tree-optimize.c     31 Dec 2003 21:23:54 -0000
*************** optimize_function_tree (tree fndecl, tre
*** 247,259 ****

  #ifdef ENABLE_CHECKING
        verify_flow_info ();
        verify_stmts ();
        verify_ssa ();
  #endif
!
        /* Rewrite the function out of SSA form.  */
        rewrite_out_of_ssa (fndecl, TDI_optimized);
        ggc_collect ();

        /* Flush out flow graph and SSA data.  */
        BITMAP_XFREE (vars_to_rename);
--- 247,265 ----

  #ifdef ENABLE_CHECKING
        verify_flow_info ();
        verify_stmts ();
        verify_ssa ();
  #endif
!       {
!       int i;
!       rewrite_out_of_ssa (fndecl, TDI_optimized);
!       for (i = 0; i < num_referenced_vars; i++)
!         var_ann (referenced_var (i))->out_of_ssa_tag = 0;
!       rewrite_into_ssa (fndecl, NULL, TDI_ssa_2);
!       }
        /* Rewrite the function out of SSA form.  */
        rewrite_out_of_ssa (fndecl, TDI_optimized);
        ggc_collect ();

        /* Flush out flow graph and SSA data.  */
        BITMAP_XFREE (vars_to_rename);


Is it a bug OR expected behavior OR uncharted territory OR am I not clearing everything ? For this transformation (loop versioning) I'm ready to think harder and avoid this path (ie going in and out of SSA) but what is generally preferred way for various loop transformations ?

Thank you,
--
Devang


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]