Commit bbda30a4 by Eric Botcazou Committed by Mark Mitchell

re PR rtl-optimization/11536 ([strength-reduce] -O2 optimalization produces wrong code)

        PR optimization/11536
	* unroll.c (loop_iterations): Do not replace a register holding
	the final value by its equivalent before the loop if it is not
	invariant.

        PR optimization/11536
	* gcc.dg/20030721-1.c: New test.

From-SVN: r69635
parent 9ef2dd1f
2003-07-17 Eric Botcazou <ebotcazou@libertysurf.fr>
PR optimization/11536
* unroll.c (loop_iterations): Do not replace a register holding
the final value by its equivalent before the loop if it is not
invariant.
2003-07-21 Dave Fluri <dave.fluri@onlink.net> 2003-07-21 Dave Fluri <dave.fluri@onlink.net>
* doc/extend.texi: Fixes to spelling, grammar, and diction. * doc/extend.texi: Fixes to spelling, grammar, and diction.
......
2003-07-21 Eric Botcazou <ebotcazou@libertysurf.fr>
PR optimization/11536
* gcc.dg/20030721-1.c: New test.
2003-07-19 Mark Mitchell <mark@codesourcery.com> 2003-07-19 Mark Mitchell <mark@codesourcery.com>
PR c++/11546 PR c++/11546
......
/* { dg-options "-O2" } */
/* PR optimization/11536 */
/* Origin: samal@kam.mff.cuni.cz <samal@kam.mff.cuni.cz> */
/* Testcase by Andrew Pinski <pinskia@physics.uc.edu> */
/* Verify that the loop optimizer doesn't use moving targets
to calculate the number of iterations of a loop. */
extern void abort(void);
void foo(int) __attribute__((__noinline__));
void foo(int i)
{
abort();
}
int main()
{
int i;
int first= 0;
int last= 0;
while (last<3) {
last = first;
while (first<=last) {
first++;
for (i=0;i<3;i++)
last++;
if (last>10)
return 0;
}
foo(first);
}
return 0;
}
...@@ -3618,7 +3618,7 @@ loop_iterations (struct loop *loop) ...@@ -3618,7 +3618,7 @@ loop_iterations (struct loop *loop)
if (find_common_reg_term (temp, reg2)) if (find_common_reg_term (temp, reg2))
initial_value = temp; initial_value = temp;
else else if (loop_invariant_p (loop, reg2))
{ {
/* Find what reg2 is equivalent to. Hopefully it will /* Find what reg2 is equivalent to. Hopefully it will
either be reg1 or reg1 plus a constant. Let's ignore either be reg1 or reg1 plus a constant. Let's ignore
......
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