This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa] Question: going in and out of SSA
- From: Devang Patel <dpatel at apple dot com>
- To: gcc mailing list <gcc at gcc dot gnu dot org>
- Date: Wed, 31 Dec 2003 13:34:54 -0800
- Subject: [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