Fix PR43209: Do not decrease the cost of an IV candidate when the cost is infinite.

2010-03-03  Changpeng Fang  <changpeng.fang@amd.com>

      PR middle-end/43209
      * tree-ssa-loop-ivopts.c (determine_use_iv_cost_condition): Do not decrease
      the cost of an IV candidate when the cost is infinite.

      * gcc.dg/tree-ssa/ivopts-4.c: New.

From-SVN: r157217
This commit is contained in:
Changpeng Fang 2010-03-04 12:12:50 +00:00 committed by Sebastian Pop
parent f8723eb6ec
commit 572ae4769a
4 changed files with 22 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2010-03-04 Changpeng Fang <changpeng.fang@amd.com>
PR middle-end/43209
* tree-ssa-loop-ivopts.c (determine_use_iv_cost_condition): Do not decrease
the cost of an IV candidate when the cost is infinite.
2010-03-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* doc/extend.texi (Vector Extensions, X86 Built-in Functions):

View File

@ -1,3 +1,8 @@
2010-03-04 Changpeng Fang <changpeng.fang@amd.com>
PR middle-end/43209
* gcc.dg/tree-ssa/ivopts-4.c: New.
2010-03-03 Janis Johnson <janis187@us.ibm.com>
* lib/target-supports-dg.exp (check-flags): Provide defaults for

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-options "-O1" } */
void foo(int *p, long i, int j)
{
do {
p[i]++;
} while (i += j);
}

View File

@ -1,5 +1,5 @@
/* Induction variable optimizations.
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GCC.
@ -4121,7 +4121,8 @@ determine_use_iv_cost_condition (struct ivopts_data *data,
TODO: The constant that we're substracting from the cost should
be target-dependent. This information should be added to the
target costs for each backend. */
if (integer_zerop (*bound_cst)
if (!infinite_cost_p (elim_cost) /* Do not try to decrease infinite! */
&& integer_zerop (*bound_cst)
&& (operand_equal_p (*control_var, cand->var_after, 0)
|| operand_equal_p (*control_var, cand->var_before, 0)))
elim_cost.cost -= 1;