Commit 9beeb4ee by Zdenek Dvorak Committed by Zdenek Dvorak

re PR tree-optimization/18431 (Code for arrays and pointers are not the same)

	PR tree-optimization/18431
	* tree-flow.h (stmt_references_memory_p): Declare.
	* tree-ssa-loop-im.c (stmt_cost): Use stmt_references_memory_p.
	* tree-ssa.c (stmt_references_memory_p): New function.

From-SVN: r90624
parent 3021a627
2004-11-14 Zdenek Dvorak <dvorakz@suse.cz>
PR tree-optimization/18431
* tree-flow.h (stmt_references_memory_p): Declare.
* tree-ssa-loop-im.c (stmt_cost): Use stmt_references_memory_p.
* tree-ssa.c (stmt_references_memory_p): New function.
2004-11-14 Andreas Schwab <schwab@suse.de> 2004-11-14 Andreas Schwab <schwab@suse.de>
* Makefile.in (lambda-code.o, tree-loop-linear.o): Depend on * Makefile.in (lambda-code.o, tree-loop-linear.o): Depend on
......
...@@ -583,6 +583,7 @@ extern void delete_tree_ssa (void); ...@@ -583,6 +583,7 @@ extern void delete_tree_ssa (void);
extern void register_new_def (tree, varray_type *); extern void register_new_def (tree, varray_type *);
extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *, bool); extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *, bool);
extern void kill_redundant_phi_nodes (void); extern void kill_redundant_phi_nodes (void);
extern bool stmt_references_memory_p (tree);
/* In tree-into-ssa.c */ /* In tree-into-ssa.c */
extern void rewrite_into_ssa (bool); extern void rewrite_into_ssa (bool);
......
...@@ -365,9 +365,7 @@ stmt_cost (tree stmt) ...@@ -365,9 +365,7 @@ stmt_cost (tree stmt)
rhs = TREE_OPERAND (stmt, 1); rhs = TREE_OPERAND (stmt, 1);
/* Hoisting memory references out should almost surely be a win. */ /* Hoisting memory references out should almost surely be a win. */
if (!is_gimple_variable (lhs)) if (stmt_references_memory_p (stmt))
cost += 20;
if (is_gimple_addressable (rhs) && !is_gimple_variable (rhs))
cost += 20; cost += 20;
switch (TREE_CODE (rhs)) switch (TREE_CODE (rhs))
......
...@@ -902,6 +902,23 @@ tree_ssa_useless_type_conversion (tree expr) ...@@ -902,6 +902,23 @@ tree_ssa_useless_type_conversion (tree expr)
return false; return false;
} }
/* Returns true if statement STMT may read memory. */
bool
stmt_references_memory_p (tree stmt)
{
stmt_ann_t ann;
get_stmt_operands (stmt);
ann = stmt_ann (stmt);
if (ann->has_volatile_ops)
return true;
return (NUM_VUSES (VUSE_OPS (ann)) > 0
|| NUM_V_MAY_DEFS (V_MAY_DEF_OPS (ann)) > 0
|| NUM_V_MUST_DEFS (V_MUST_DEF_OPS (ann)) > 0);
}
/* Internal helper for walk_use_def_chains. VAR, FN and DATA are as /* Internal helper for walk_use_def_chains. VAR, FN and DATA are as
described in walk_use_def_chains. described in walk_use_def_chains.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment