[Bug tree-optimization/21332] [4.1 Regression] -ftree-vrp makes a loop doesn't execute a body
steven at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue May 17 08:15:00 GMT 2005
------- Additional Comments From steven at gcc dot gnu dot org 2005-05-17 08:14 -------
SSA form after inserting ASSERT_EXPRs
main ()
{
int i;
int c;
int b;
int D.1576;
<bb 0>:
c_4 = f ();
if (c_4 <= 0) goto <L0>; else goto <L8>;
<L0>:;
c_8 = ASSERT_EXPR <c_4, c_4 <= 0>;
c_7 = -c_8;
goto <bb 3> (<L2>);
<L1>:;
i_5 = ASSERT_EXPR <i_2, i_2 < c_7>;
i_10 = i_5 + 1;
# i_2 = PHI <0(1), i_10(2)>;
# b_1 = PHI <0(1), 1(2)>;
<L2>:;
if (i_2 < c_7) goto <L1>; else goto <L3>;
<L3>:;
i_9 = ASSERT_EXPR <i_2, i_2 >= c_7>;
if (b_1 == 0) goto <L4>; else goto <L5>;
<L4>:;
abort ();
<L8>:;
c_3 = ASSERT_EXPR <c_4, c_4 > 0>;
<L5>:;
return 0;
}
...
Visiting statement:
c_8 = ASSERT_EXPR <c_4, c_4 <= 0>;
(analyze_scalar_evolution
(loop_nb = 0)
(scalar = c_8)
(get_scalar_evolution
(scalar = c_8)
(scalar_evolution = ))
(analyze_scalar_evolution
(loop_nb = 0)
(scalar = c_4)
(get_scalar_evolution
(scalar = c_4)
(scalar_evolution = c_4))
(set_scalar_evolution
(scalar = c_4)
(scalar_evolution = c_4))
)
(set_scalar_evolution
(scalar = c_8)
(scalar_evolution = c_4))
)
Found new range [-2147483648, 0] for c_8
Visiting statement:
c_7 = -c_8;
(analyze_scalar_evolution
(loop_nb = 0)
(scalar = c_7)
(get_scalar_evolution
(scalar = c_7)
(scalar_evolution = ))
(analyze_scalar_evolution
(loop_nb = 0)
(scalar = c_8)
(get_scalar_evolution
(scalar = c_8)
(scalar_evolution = c_4))
(set_scalar_evolution
(scalar = c_8)
(scalar_evolution = c_4))
)
(set_scalar_evolution
(scalar = c_7)
(scalar_evolution = -c_4))
)
Found new range [-080000000, 0] for c_7 // !?!?!?!?!
...
Value ranges after VRP:
b_1: [0, 0]
i_2: [0, 0]
c_3: [1, 2147483647]
c_4: VARYING
<retval>_6: VARYING
c_7: [-080000000, 0]
c_8: [-2147483648, 0]
i_9: [c_7, 2147483647]
Function after VRP:
main ()
{
int i;
int c;
int b;
int D.1576;
<bb 0>:
c_4 = f ();
if (c_4 <= 0) goto <L0>; else goto <L8>;
<L0>:;
c_8 = c_4;
c_7 = -c_8;
# i_2 = PHI <0(1)>;
# b_1 = PHI <0(1)>;
<L2>:;
i_9 = i_2;
abort ();
<L8>:;
c_3 = c_4;
return 0;
}
This may actually be a scev bug...
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21332
More information about the Gcc-bugs
mailing list