Bug 18507

Summary: block_defs_stack varrray should not be GC'ed
Product: gcc Reporter: Andrew Pinski <pinskia>
Component: tree-optimizationAssignee: Andrew Pinski <pinskia>
Status: RESOLVED FIXED    
Severity: minor CC: gcc-bugs
Priority: P2 Keywords: compile-time-hog, patch
Version: 4.0.0   
Target Milestone: 4.0.0   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2004-11-16 15:52:57
Bug Depends on:    
Bug Blocks: 8361, 13776    

Description Andrew Pinski 2004-11-15 23:05:00 UTC
For the testcase in PR 13776 (ir.ii) we spend a lot of time (10% out of 120 seconds) in ggc_alloc.
Most of that time comes from creatting/expanding the block_defs_stack varray in tree-into-ssa.c
Why is this GC allocated in the first place?
Maybe this should be a non-gc'ed VEC.
We know that this varray does not spill out from rewrite_blocks/rewrite_ssa_into_ssa at all.
Comment 1 Andrew Pinski 2004-11-16 15:52:54 UTC
Mine, this speeds up PR 13776 by 10 seconds or 7% (at -O3).
Comment 2 Andrew Pinski 2004-11-17 16:00:21 UTC
Patch here: <http://gcc.gnu.org/ml/gcc-patches/2004-11/msg01325.html>.
Comment 3 Andrew Pinski 2004-11-19 18:22:11 UTC
Fixed.
Comment 4 CVS Commits 2004-11-19 18:22:12 UTC
Subject: Bug 18507

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	pinskia@gcc.gnu.org	2004-11-19 18:22:00

Modified files:
	gcc            : tree-flow.h tree-ssa-dom.c tree-into-ssa.c 
	                 ChangeLog 

Log message:
	2004-11-19  Andrew Pinski  <pinskia@physics.uc.edu>
	
	PR tree-opt/18507
	* 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.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-flow.h.diff?cvsroot=gcc&r1=2.66&r2=2.67
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-ssa-dom.c.diff?cvsroot=gcc&r1=2.67&r2=2.68
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/tree-into-ssa.c.diff?cvsroot=gcc&r1=2.30&r2=2.31
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.6416&r2=2.6417