From: Zdenek Dvorak Date: Sun, 14 Nov 2004 18:04:25 +0000 (+0100) Subject: re PR tree-optimization/18431 (Code for arrays and pointers are not the same) X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9beeb4ee4c1bf42a2d3a66d75d250cf20c9c1f9f;p=platform%2Fupstream%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ae73d88..285c1be 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-11-14 Zdenek Dvorak + + 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 * Makefile.in (lambda-code.o, tree-loop-linear.o): Depend on diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index cdadcc9..08a73e4 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -583,6 +583,7 @@ extern void delete_tree_ssa (void); extern void register_new_def (tree, varray_type *); extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *, bool); extern void kill_redundant_phi_nodes (void); +extern bool stmt_references_memory_p (tree); /* In tree-into-ssa.c */ extern void rewrite_into_ssa (bool); diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index d04d095..3c75553 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -365,9 +365,7 @@ stmt_cost (tree stmt) rhs = TREE_OPERAND (stmt, 1); /* Hoisting memory references out should almost surely be a win. */ - if (!is_gimple_variable (lhs)) - cost += 20; - if (is_gimple_addressable (rhs) && !is_gimple_variable (rhs)) + if (stmt_references_memory_p (stmt)) cost += 20; switch (TREE_CODE (rhs)) diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index d0419b7..4cb8cc2 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -902,6 +902,23 @@ tree_ssa_useless_type_conversion (tree expr) 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 described in walk_use_def_chains.