[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