re PR middle-end/28071 (A file that can not be compiled in reasonable time/space)

PR rtl-optimization/28071
	* tree-vect-transform.c (vect_create_data_ref_ptr): Kill cast.
	(vect_transform_loop): Likewise.
	* tree-vectorizer.c (new_loop_vec_info): Likewise.
	(new_loop_vec_info): Likewise.
	(destroy_loop_vec_info): Likewise.
	* tree-dfa.c (create_var_ann): Use GCC_CNEW.
	(create_stmt_ann): Likewise.
	(create_tree_ann): Rename to ...
	(create_tree_common_ann): ... this one; allocate only the common part
	of annotations.
	* tree-vn.c (set_value_handle): Use get_tree_common_ann.
	(get_value_handle): Likewise.
	* tree-ssa-pre.c (phi_translate): Delay annotation allocation for
	get_tree_common_ann.
	* tree-vectorizer.h (set_stmt_info): Take stmt annotation.
	(vinfo_for_stmt): Use stmt annotations.
	* tree-flow.h (tree_ann_common_t): New type.
	(tree_common_ann, get_tree_common_ann, create_tree_common_ann): New.
	(tree_ann, get_tree_ann, create_tree_ann): New.
	* tree-flow-inline.h (get_function_ann): Do more type checking.
	(stmt_ann): Likewise.
	(tree_ann): Rename to ...
	(tree_common_ann): ... this one; return ony common_ann
	(get_tree_ann): Rename to ...
	(tree_common_ann): This one; return only common_ann.
	* tree-vect-patterns.c (vect_pattern_recog_1): Update call
	of set_stmt_info.

From-SVN: r116886
This commit is contained in:
Jan Hubicka 2006-09-12 12:11:04 +02:00 committed by Jan Hubicka
parent 5f86874e9f
commit 93c094b524
10 changed files with 69 additions and 38 deletions

View File

@ -1,3 +1,34 @@
2006-09-12 Jan Hubicka <jh@suse.cz>
PR rtl-optimization/28071
* tree-vect-transform.c (vect_create_data_ref_ptr): Kill cast.
(vect_transform_loop): Likewise.
* tree-vectorizer.c (new_loop_vec_info): Likewise.
(new_loop_vec_info): Likewise.
(destroy_loop_vec_info): Likewise.
* tree-dfa.c (create_var_ann): Use GCC_CNEW.
(create_stmt_ann): Likewise.
(create_tree_ann): Rename to ...
(create_tree_common_ann): ... this one; allocate only the common part
of annotations.
* tree-vn.c (set_value_handle): Use get_tree_common_ann.
(get_value_handle): Likewise.
* tree-ssa-pre.c (phi_translate): Delay annotation allocation for
get_tree_common_ann.
* tree-vectorizer.h (set_stmt_info): Take stmt annotation.
(vinfo_for_stmt): Use stmt annotations.
* tree-flow.h (tree_ann_common_t): New type.
(tree_common_ann, get_tree_common_ann, create_tree_common_ann): New.
(tree_ann, get_tree_ann, create_tree_ann): New.
* tree-flow-inline.h (get_function_ann): Do more type checking.
(stmt_ann): Likewise.
(tree_ann): Rename to ...
(tree_common_ann): ... this one; return ony common_ann
(get_tree_ann): Rename to ...
(tree_common_ann): This one; return only common_ann.
* tree-vect-patterns.c (vect_pattern_recog_1): Update call
of set_stmt_info.
2006-09-11 Geoffrey Keating <geoffk@apple.com>
* config.gcc (i[34567]86-*-darwin*): Set with_arch and

View File

@ -142,8 +142,7 @@ create_var_ann (tree t)
gcc_assert (DECL_P (t));
gcc_assert (!t->common.ann || t->common.ann->common.type == VAR_ANN);
ann = GGC_NEW (struct var_ann_d);
memset ((void *) ann, 0, sizeof (*ann));
ann = GGC_CNEW (struct var_ann_d);
ann->common.type = VAR_ANN;
@ -183,8 +182,7 @@ create_stmt_ann (tree t)
gcc_assert (is_gimple_stmt (t));
gcc_assert (!t->common.ann || t->common.ann->common.type == STMT_ANN);
ann = GGC_NEW (struct stmt_ann_d);
memset ((void *) ann, 0, sizeof (*ann));
ann = GGC_CNEW (struct stmt_ann_d);
ann->common.type = STMT_ANN;
@ -198,19 +196,18 @@ create_stmt_ann (tree t)
/* Create a new annotation for a tree T. */
tree_ann_t
create_tree_ann (tree t)
tree_ann_common_t
create_tree_common_ann (tree t)
{
tree_ann_t ann;
tree_ann_common_t ann;
gcc_assert (t);
gcc_assert (!t->common.ann || t->common.ann->common.type == TREE_ANN_COMMON);
ann = GGC_NEW (union tree_ann_d);
memset ((void *) ann, 0, sizeof (*ann));
ann = GGC_CNEW (struct tree_ann_common_d);
ann->common.type = TREE_ANN_COMMON;
t->common.ann = ann;
ann->type = TREE_ANN_COMMON;
t->common.ann = (tree_ann_t) ann;
return ann;
}

View File

@ -159,6 +159,7 @@ static inline function_ann_t
get_function_ann (tree var)
{
function_ann_t ann = function_ann (var);
gcc_assert (!var->common.ann || var->common.ann->common.type == FUNCTION_ANN);
return (ann) ? ann : create_function_ann (var);
}
@ -170,6 +171,7 @@ stmt_ann (tree t)
#ifdef ENABLE_CHECKING
gcc_assert (is_gimple_stmt (t));
#endif
gcc_assert (!t->common.ann || t->common.ann->common.type == STMT_ANN);
return (stmt_ann_t) t->common.ann;
}
@ -785,19 +787,19 @@ mark_non_addressable (tree var)
/* Return the common annotation for T. Return NULL if the annotation
doesn't already exist. */
static inline tree_ann_t
tree_ann (tree t)
static inline tree_ann_common_t
tree_common_ann (tree t)
{
return t->common.ann;
return &t->common.ann->common;
}
/* Return a common annotation for T. Create the constant annotation if it
doesn't exist. */
static inline tree_ann_t
get_tree_ann (tree t)
static inline tree_ann_common_t
get_tree_common_ann (tree t)
{
tree_ann_t ann = tree_ann (t);
return (ann) ? ann : create_tree_ann (t);
tree_ann_common_t ann = tree_common_ann (t);
return (ann) ? ann : create_tree_common_ann (t);
}
/* ----------------------------------------------------------------------- */

View File

@ -332,9 +332,10 @@ typedef union tree_ann_d *tree_ann_t;
typedef struct var_ann_d *var_ann_t;
typedef struct function_ann_d *function_ann_t;
typedef struct stmt_ann_d *stmt_ann_t;
typedef struct tree_ann_common_d *tree_ann_common_t;
static inline tree_ann_t tree_ann (tree);
static inline tree_ann_t get_tree_ann (tree);
static inline tree_ann_common_t tree_common_ann (tree);
static inline tree_ann_common_t get_tree_common_ann (tree);
static inline var_ann_t var_ann (tree);
static inline var_ann_t get_var_ann (tree);
static inline function_ann_t function_ann (tree);
@ -623,7 +624,7 @@ extern void dump_generic_bb (FILE *, basic_block, int, int);
extern var_ann_t create_var_ann (tree);
extern function_ann_t create_function_ann (tree);
extern stmt_ann_t create_stmt_ann (tree);
extern tree_ann_t create_tree_ann (tree);
extern tree_ann_common_t create_tree_common_ann (tree);
extern void dump_dfa_stats (FILE *);
extern void debug_dfa_stats (void);
extern void debug_referenced_vars (void);

View File

@ -1151,7 +1151,7 @@ phi_translate (tree expr, value_set_t set, basic_block pred,
TREE_OPERAND (newexpr, 0) = newop0 == oldop0 ? oldop0 : get_value_handle (newop0);
TREE_OPERAND (newexpr, 1) = listchanged ? newarglist : oldarglist;
TREE_OPERAND (newexpr, 2) = newop2 == oldop2 ? oldop2 : get_value_handle (newop2);
create_tree_ann (newexpr);
newexpr->common.ann = NULL;
vn_lookup_or_add_with_vuses (newexpr, tvuses);
expr = newexpr;
phi_trans_add (oldexpr, newexpr, pred, tvuses);
@ -1260,7 +1260,7 @@ phi_translate (tree expr, value_set_t set, basic_block pred,
}
else
{
create_tree_ann (newexpr);
newexpr->common.ann = NULL;
vn_lookup_or_add_with_vuses (newexpr, newvuses);
}
expr = newexpr;
@ -1302,7 +1302,7 @@ phi_translate (tree expr, value_set_t set, basic_block pred,
}
else
{
create_tree_ann (newexpr);
newexpr->common.ann = NULL;
vn_lookup_or_add (newexpr, NULL);
}
expr = newexpr;
@ -1335,7 +1335,7 @@ phi_translate (tree expr, value_set_t set, basic_block pred,
}
else
{
create_tree_ann (newexpr);
newexpr->common.ann = NULL;
vn_lookup_or_add (newexpr, NULL);
}
expr = newexpr;

View File

@ -522,7 +522,7 @@ vect_pattern_recog_1 (
SSA_NAME_DEF_STMT (var_name) = pattern_expr;
bsi_insert_before (&si, pattern_expr, BSI_SAME_STMT);
ann = stmt_ann (pattern_expr);
set_stmt_info ((tree_ann_t)ann, new_stmt_vec_info (pattern_expr, loop_vinfo));
set_stmt_info (ann, new_stmt_vec_info (pattern_expr, loop_vinfo));
pattern_stmt_info = vinfo_for_stmt (pattern_expr);
STMT_VINFO_RELATED_STMT (pattern_stmt_info) = stmt;

View File

@ -351,7 +351,7 @@ vect_create_data_ref_ptr (tree stmt,
NULL_TREE, loop, &incr_bsi, insert_after,
&indx_before_incr, &indx_after_incr);
incr = bsi_stmt (incr_bsi);
set_stmt_info ((tree_ann_t)stmt_ann (incr),
set_stmt_info (stmt_ann (incr),
new_stmt_vec_info (incr, loop_vinfo));
/* Copy the points-to information if it exists. */
@ -3114,7 +3114,7 @@ vect_transform_loop (loop_vec_info loop_vinfo,
/* Free the attached stmt_vec_info and remove the stmt. */
stmt_ann_t ann = stmt_ann (stmt);
free (stmt_info);
set_stmt_info ((tree_ann_t)ann, NULL);
set_stmt_info (ann, NULL);
bsi_remove (&si, true);
continue;
}

View File

@ -1401,7 +1401,7 @@ new_loop_vec_info (struct loop *loop)
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
{
tree_ann_t ann = get_tree_ann (phi);
stmt_ann_t ann = get_stmt_ann (phi);
set_stmt_info (ann, new_stmt_vec_info (phi, res));
}
@ -1411,7 +1411,7 @@ new_loop_vec_info (struct loop *loop)
stmt_ann_t ann;
ann = stmt_ann (stmt);
set_stmt_info ((tree_ann_t)ann, new_stmt_vec_info (stmt, res));
set_stmt_info (ann, new_stmt_vec_info (stmt, res));
}
}
@ -1462,7 +1462,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo)
for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
{
tree_ann_t ann = get_tree_ann (phi);
stmt_ann_t ann = stmt_ann (phi);
stmt_info = vinfo_for_stmt (phi);
free (stmt_info);
@ -1492,7 +1492,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo)
/* Free stmt_vec_info. */
VEC_free (dr_p, heap, STMT_VINFO_SAME_ALIGN_REFS (stmt_info));
free (stmt_info);
set_stmt_info ((tree_ann_t)ann, NULL);
set_stmt_info (ann, NULL);
/* Remove dead "pattern stmts". */
if (remove_stmt_p)

View File

@ -242,11 +242,11 @@ typedef struct _stmt_vec_info {
#define STMT_VINFO_SAME_ALIGN_REFS(S) (S)->same_align_refs
#define STMT_VINFO_DEF_TYPE(S) (S)->def_type
static inline void set_stmt_info (tree_ann_t ann, stmt_vec_info stmt_info);
static inline void set_stmt_info (stmt_ann_t ann, stmt_vec_info stmt_info);
static inline stmt_vec_info vinfo_for_stmt (tree stmt);
static inline void
set_stmt_info (tree_ann_t ann, stmt_vec_info stmt_info)
set_stmt_info (stmt_ann_t ann, stmt_vec_info stmt_info)
{
if (ann)
ann->common.aux = (char *) stmt_info;
@ -255,7 +255,7 @@ set_stmt_info (tree_ann_t ann, stmt_vec_info stmt_info)
static inline stmt_vec_info
vinfo_for_stmt (tree stmt)
{
tree_ann_t ann = tree_ann (stmt);
stmt_ann_t ann = stmt_ann (stmt);
return ann ? (stmt_vec_info) ann->common.aux : NULL;
}

View File

@ -182,7 +182,7 @@ set_value_handle (tree e, tree v)
SSA_NAME_VALUE (e) = v;
else if (EXPR_P (e) || DECL_P (e) || TREE_CODE (e) == TREE_LIST
|| TREE_CODE (e) == CONSTRUCTOR)
get_tree_ann (e)->common.value_handle = v;
get_tree_common_ann (e)->value_handle = v;
else
/* Do nothing. Constants are their own value handles. */
gcc_assert (is_gimple_min_invariant (e));
@ -438,8 +438,8 @@ get_value_handle (tree expr)
else if (EXPR_P (expr) || DECL_P (expr) || TREE_CODE (expr) == TREE_LIST
|| TREE_CODE (expr) == CONSTRUCTOR)
{
tree_ann_t ann = tree_ann (expr);
return ((ann) ? ann->common.value_handle : NULL_TREE);
tree_ann_common_t ann = tree_common_ann (expr);
return ((ann) ? ann->value_handle : NULL_TREE);
}
else
gcc_unreachable ();