This is the mail archive of the gcc-patches@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]

Re: [PATCH] Speedup DOM and into-SSA


On Tue, 2004-11-16 at 10:50 -0500, Andrew Pinski wrote:
> While looking why the testcase in PR 13776 was slow, I noticed that
> at the top of the profile ggc_alloc was there.  This usually means we 
> are
> allocating too much in the GC space and I looked to figure out where
> most of them were coming from.  They were coming from varrays
> block_defs_stack in tree-into-ssa.c.  I decided to change it to VEC
> which is allocated in the heap as we know the life time of the
> stack.  I noticed a 10 seconds speedup by doing this.
> 
> Before the patch:
>   tree SSA rewrite      :  11.87 ( 8%) usr   0.49 ( 2%) sys  14.41 ( 7%) 
> wall
>   dominator optimization:   9.09 ( 6%) usr   0.80 ( 3%) sys  12.35 ( 6%) 
> wall
> 
> After:
>   tree SSA rewrite      :   6.54 ( 5%) usr   0.41 ( 2%) sys   8.13 ( 4%) 
> wall
>   dominator optimization:   7.98 ( 6%) usr   0.80 ( 3%) sys   9.39 ( 5%) 
> wall
> 
> Both good improvements for an easy change.
> 
> OK? Bootstrapped and tested on powerpc-darwin with no regressions
> 
> Thanks,
> Andrew Pinski
> 
> ChangeLog:
> 	* tree-flow.h (tree2): Typedef because there is already a VEC(tree).
> 	Define a VEC(tree2) for head.
> 	(register_new_def): Change second argument to be a VEC(tree2).
> 	* tree-ssa-dom.c (block_defs_stack): Change to be a VEC(tree2).
> 	(tree_ssa_dominator_optimize): Initialize block_defs_stack with
> 	the VEC(tree2) function.  Also free it before returning.
> 	(dom_opt_initialize_block): Use VEC_safe_push instead of 
> VARRAY_PUSH_TREE
> 	for block_defs_stack.
> 	(restore_currdefs_to_original_value): Use VEC_length instead of
> 	VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
> 	(dom_opt_finalize_block): Use VEC_safe_push instead of VARRAY_PUSH_TREE
> 	for block_defs_stack.
> 	* tree-into-ssa.c (block_defs_stack): Change to be a VEC(tree2).
> 	(rewrite_initialize_block): Use VEC_safe_push instead of 
> VARRAY_PUSH_TREE
> 	for block_defs_stack.
> 	(ssa_register_new_def): Likewise.
> 	(ssa_rewrite_initialize_block): Likewise.
> 	(rewrite_finalize_block): Use VEC_length instead of
> 	VARRAY_ACTIVE_SIZE. VEC_pop instead of VARRAY_TOP_TREE/VARRAY_POP.
> 	(ssa_rewrite_finalize_block): Likewise.
> 	(register_new_def): Change second argument to be a VEC(tree2).
> 	Use VEC_safe_push instead of VARRAY_PUSH_TREE.
> 	(rewrite_blocks): Initialize block_defs_stack with
> 	the VEC(tree2) function.  Also free it before returning.
> 	(rewrite_ssa_into_ssa): Likewise.
Will you please make a similar change for the other stacks.  It is
_EXTREMELY_ ugly to have two completely different allocation schemes.

If you won't do this, I'll pull the VEC patch out until I or someone
else has the time to change the allocation scheme for the other
stacks to match block_defs.

jeff



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