This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [tree-ssa] Question: going in and out of SSA
- From: law at redhat dot com
- To: Devang Patel <dpatel at apple dot com>
- Cc: gcc mailing list <gcc at gcc dot gnu dot org>
- Date: Mon, 05 Jan 2004 23:07:49 -0700
- Subject: Re: [tree-ssa] Question: going in and out of SSA
- Reply-to: law at redhat dot com
In message <2C934D0A-3BD9-11D8-9C57-000393A91CAA@apple.com>, Devang Patel write
s:
>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:
If you really need to rewrite everything out of SSA form, then try to
go back into SSA form (or do anything which calls get_expr_operands),
then you need to disable temporary expression replacement (TER).
TER creates non-gimple code which is the most likely reason why
you got the abort.
You'd probably be better off only rewriting those variables which are
affected by your changes -- assuming of course that you can compute
that set of variables without an amazing amount of difficulty. That's
what the dominator optimizer does when it threads jumps -- threading
jumps changes the dominator tree and requires a subset of the program's
variables to be taken out of SSA form, then rewritten back into SSA form.
jeff