This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, pre-approved] Fix operand scan problems for PR49749
- From: "William J. Schmidt" <wschmidt at linux dot vnet dot ibm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 21 Jul 2011 13:04:47 -0500
- Subject: [PATCH, pre-approved] Fix operand scan problems for PR49749
This patch fixes part of PR tree-optimization/49749. The operand scans
in tree-ssa-reassoc.c:get_rank() can be prematurely halted by two
erroneous conditions, which this patch removes. Patch pre-approved by
IRC communication with Richard Guenther, 7/21/11.
The wider issue of biasing reassociation in favor of loop-carried
dependencies is still pending.
Bootstrapped and regression-tested on powerpc64-linux. I'll commit it
shortly.
2011-07-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR tree-optimization/49749
* tree-ssa-reassoc.c (get_rank): Fix operand scan conditions and
remove no-longer-used maxrank variable.
Index: gcc/tree-ssa-reassoc.c
===================================================================
--- gcc/tree-ssa-reassoc.c (revision 176569)
+++ gcc/tree-ssa-reassoc.c (working copy)
@@ -235,7 +235,7 @@ get_rank (tree e)
if (TREE_CODE (e) == SSA_NAME)
{
gimple stmt;
- long rank, maxrank;
+ long rank;
int i, n;
if (TREE_CODE (SSA_NAME_VAR (e)) == PARM_DECL
@@ -258,7 +258,6 @@ get_rank (tree e)
/* Otherwise, find the maximum rank for the operands, or the bb
rank, whichever is less. */
rank = 0;
- maxrank = bb_rank[gimple_bb(stmt)->index];
if (gimple_assign_single_p (stmt))
{
tree rhs = gimple_assign_rhs1 (stmt);
@@ -267,15 +266,15 @@ get_rank (tree e)
rank = MAX (rank, get_rank (rhs));
else
{
- for (i = 0;
- i < n && TREE_OPERAND (rhs, i) && rank != maxrank; i++)
- rank = MAX(rank, get_rank (TREE_OPERAND (rhs, i)));
+ for (i = 0; i < n; i++)
+ if (TREE_OPERAND (rhs, i))
+ rank = MAX(rank, get_rank (TREE_OPERAND (rhs, i)));
}
}
else
{
n = gimple_num_ops (stmt);
- for (i = 1; i < n && rank != maxrank; i++)
+ for (i = 1; i < n; i++)
{
gcc_assert (gimple_op (stmt, i));
rank = MAX(rank, get_rank (gimple_op (stmt, i)));