This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: IPA merge: Make salias work after SSA form was built
- From: "Daniel Berlin" <dberlin at dberlin dot org>
- To: "Jan Hubicka" <jh at suse dot cz>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Fri, 29 Dec 2006 00:50:51 -0500
- Subject: Re: IPA merge: Make salias work after SSA form was built
- References: <20061228231436.GD18422@kam.mff.cuni.cz>
On 12/28/06, Jan Hubicka <jh@suse.cz> wrote:
Hi,
this patch is needed in order to move salias pass after build_ssa. With
IPA-SSA, I do not want the structure vars to be built for all functions
at once (at least not until this proves to be useful) to conserve memory
usage and also we would need to build new split vars after inlining
functions that contains structure references. In fact one G++ PR is
fixed by moving salias pass after build_ssa in my tree.
Just as a note, Jan and I talked about this for a while on IRC to
figure out what the best thing to do here, and settled on the moving
salias.
This is because you don't want structure vars built for all functions
at once right now because you will end up making structures vars that
are for parts of a structure that may not be used by that function,
and thus, you've increased the number of live structure vars overall,
for no real value.
If we started sharing structure vars between functions for
statics/globals, we might want to do some before and some after, or
something.
Regtested/bootstrapped with IPA-SSA x86_64, routine bootstrap on
i686-linux and mainline is running, but since the new code is disabled
before SSA it ought to pass (I am keeping this conditional as I guess we
might later want to build SSA structure vars early and update them after
inlining or something, so this functionality seems useful)
OK?
Okay, but:
Honza
* tree-ssa-alias.c (create_structure_vars): When run after
SSA is built, update operands of statements referring to split
variables.
Index: tree-ssa-alias.c
===================================================================
*** tree-ssa-alias.c (revision 120209)
--- tree-ssa-alias.c (working copy)
*************** create_structure_vars (void)
*** 3188,3193 ****
--- 3188,3230 ----
}
htab_delete (used_portions);
VEC_free (tree, heap, varvec);
+
+ /* Update SSA operands of statememnts mentioning varibales we split. */
+ if (gimple_in_ssa_p (cfun))
+ FOR_EACH_BB (bb)
+ {
+ block_stmt_iterator bsi;
+ for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
+ {
+ tree stmt = bsi_stmt (bsi);
+ bool update = false;
+ unsigned int i;
+ bitmap_iterator bi;
Throw a blank line here
+ if (STORED_SYMS (stmt))
+ EXECUTE_IF_SET_IN_BITMAP (STORED_SYMS (stmt), 0, i, bi)
+ {
+ tree sym = referenced_var_lookup (i);
+ if (get_subvars_for_var (sym))
+ {
+ update=true;
+ break;
+ }
+ }
and here