[lno] Canonicalize chrecs

Pop Sébastian pop@gauvain.u-strasbg.fr
Thu Jan 15 13:45:00 GMT 2004


Hi,

This patch canonicalizes the chains of recurrences representation.
Before this patch we used to construct two representations with the
same semantics: {0, +, {1, +, 2}_1}_1 vs.  {{0, +, 1}_1, +, 2}_1.

add_to_evolution and multiply_evolution are modified such that only
the second form is constructed.  

This change allows to entirely analyze one of the testcase sent by
Dorit: tree-ssa-vect-1.c

	* tree-chrec.c (remove_initial_condition,
	add_expr_to_loop_evolution_1, add_expr_to_loop_evolution_2): New functions.
	(add_expr_to_loop_evolution): Use these functions.  
	(build_polynomial_evolution_in_loop,
	build_exponential_evolution_in_loop): Move from here...
	* tree-chrec.h (build_polynomial_evolution_in_loop, 
	build_exponential_evolution_in_loop): Remove declarations.
	* tree-scalar-evolution.c (build_polynomial_evolution_in_loop,
	build_exponential_evolution_in_loop): ... to here.  Declare
	these functions static.
	(select_outer_and_current_evolutions): New function.
	(matched_an_increment, scev_analyze_modify_expr,
	compute_overall_effect_of_inner_loop,
	analyze_scalar_evolution): Use this function.
	(add_to_evolution, multiply_evolution): Construct canonical
	chains of recurrences.

testsuite/

	* ssa-chrec-{06, 38, 42, 43}.c: Modify comments.
	* ssa-chrec-{06, 07, 08, 09, 11, 12, 13, 14, 16, 18, 20,
	21, 37, 38, 39, 42, 43, 44, 45, 53}.c.scev: Adjusted.
	* ssa-chrec-53.c.alldd: Adjusted.

Index: tree-chrec.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-chrec.c,v
retrieving revision 1.1.2.3
diff -c -3 -p -r1.1.2.3 tree-chrec.c
*** tree-chrec.c	12 Jan 2004 14:40:09 -0000	1.1.2.3
--- tree-chrec.c	15 Jan 2004 12:27:09 -0000
*************** static inline tree chrec_fold_multiply_i
*** 64,69 ****
--- 64,73 ----
  /* Operations.  */
  static tree chrec_evaluate (unsigned, tree, tree, tree);
  static tree chrec_merge_intervals (tree, tree);
+ static tree remove_initial_condition (tree);
+ static tree add_expr_to_loop_evolution_2 (tree, tree*);
+ static tree add_expr_to_loop_evolution_1 (unsigned, tree, tree*);
+ 
  
  /* Observers.  */
  static bool is_multivariate_chrec_rec (tree, unsigned int);
*************** chrec_merge (tree chrec1, 
*** 2076,2177 ****
      }
  }
  
! /* The expression CHREC_BEFORE has no evolution part in LOOP_NUM.  
!    This function constructs a new polynomial evolution function for this 
!    loop.  The evolution part is TO_ADD.  */
  
! tree
! build_polynomial_evolution_in_loop (unsigned loop_num, 
! 				    tree chrec_before, 
! 				    tree to_add)
  {
! #if defined ENABLE_CHECKING 
!   if (to_add == NULL_TREE
!       || chrec_before == NULL_TREE)
!     abort ();
! #endif
    
!   switch (TREE_CODE (chrec_before))
      {
!     case POLYNOMIAL_CHREC:
!       if (CHREC_VARIABLE (chrec_before) < loop_num)
! 	return build_polynomial_chrec (loop_num, chrec_before, to_add);
!       else
! 	return build_polynomial_chrec 
! 	  (CHREC_VARIABLE (chrec_before),
! 	   build_polynomial_evolution_in_loop (loop_num, 
! 					       CHREC_LEFT (chrec_before), 
! 					       to_add),
! 	   CHREC_RIGHT (chrec_before));
        
!     case EXPONENTIAL_CHREC:
!       if (CHREC_VARIABLE (chrec_before) < loop_num)
! 	return build_polynomial_chrec (loop_num, chrec_before, to_add);
!       else
! 	return build_exponential_chrec 
! 	  (CHREC_VARIABLE (chrec_before),
! 	   build_polynomial_evolution_in_loop (loop_num, 
! 					       CHREC_LEFT (chrec_before), 
! 					       to_add),
! 	   CHREC_RIGHT (chrec_before));
        
!     case VAR_DECL:
!     case PARM_DECL:
!     case INTEGER_CST:
!     case INTERVAL_CHREC:
!     default:
!       /* These nodes do not depend on a loop.  */
!       return build_polynomial_chrec (loop_num, chrec_before, to_add);
      }
  }
  
! /* The expression CHREC_BEFORE has no evolution part in LOOP_NUM.  
!    This function constructs a new exponential evolution function for this 
!    loop.  The evolution part is TO_MULT.  */
  
! tree
! build_exponential_evolution_in_loop (unsigned loop_num, 
! 				     tree chrec_before, 
! 				     tree to_mult)
  {
! #if defined ENABLE_CHECKING 
!   if (to_mult == NULL_TREE
!       || chrec_before == NULL_TREE)
!     abort ();
! #endif
    
!   switch (TREE_CODE (chrec_before))
!     {
!     case POLYNOMIAL_CHREC:
!       if (CHREC_VARIABLE (chrec_before) < loop_num)
! 	return build_exponential_chrec (loop_num, chrec_before, to_mult);
!       else
! 	return build_polynomial_chrec 
! 	  (CHREC_VARIABLE (chrec_before),
! 	   build_exponential_evolution_in_loop (loop_num, 
! 						CHREC_LEFT (chrec_before), 
! 						to_mult),
! 	   CHREC_RIGHT (chrec_before));
!       
!     case EXPONENTIAL_CHREC:
!       if (CHREC_VARIABLE (chrec_before) < loop_num)
! 	return build_exponential_chrec (loop_num, chrec_before, to_mult);
!       else
! 	return build_exponential_chrec 
! 	  (CHREC_VARIABLE (chrec_before),
! 	   build_exponential_evolution_in_loop (loop_num, 
! 						CHREC_LEFT (chrec_before), 
! 						to_mult),
! 	   CHREC_RIGHT (chrec_before));
!       
!     case VAR_DECL:
!     case PARM_DECL:
!     case INTEGER_CST:
!     case INTERVAL_CHREC:
!     default:
!       /* These nodes do not depend on a loop.  */
!       return build_exponential_chrec (loop_num, chrec_before, to_mult);
!     }
  }
  
  /* The expression CHREC_BEFORE has an evolution part in LOOP_NUM.  
--- 2080,2179 ----
      }
  }
  
! /* Returns a chrec for which the initial condition has been removed.
!    Example: {{1, +, 2}, +, 3} returns {2, +, 3}.  */
  
! static tree
! remove_initial_condition (tree chrec)
  {
!   tree left;
    
!   if (chrec == NULL_TREE)
!     return NULL_TREE;
!   
!   if (TREE_CODE (chrec) != POLYNOMIAL_CHREC
!       && TREE_CODE (chrec) != EXPONENTIAL_CHREC)
!     return NULL_TREE;
!   
!   left = remove_initial_condition (CHREC_LEFT (chrec));
!   if (left == NULL_TREE)
!     return CHREC_RIGHT (chrec);
!   
!   if (TREE_CODE (chrec) == POLYNOMIAL_CHREC)
!     return build_polynomial_chrec 
!       (CHREC_VARIABLE (chrec), left, CHREC_RIGHT (chrec));
!   
!   else
!     return build_exponential_chrec
!       (CHREC_VARIABLE (chrec), left, CHREC_RIGHT (chrec));
! }
! 
! /* Search for the leftmost evolution element from CHREC_BEFORE, then
!    begin the addition left to right from this locus.  */
! 
! static tree 
! add_expr_to_loop_evolution_1 (unsigned loop_num, 
! 			      tree chrec_before, 
! 			      tree *to_add)
! {
!   if (*to_add == NULL_TREE)
!     return chrec_before;
!   
!   /* Search for the leftmost locus.  */
!   if (CHREC_VARIABLE (chrec_before) == loop_num
!       && ((TREE_CODE (CHREC_LEFT (chrec_before)) != POLYNOMIAL_CHREC
! 	   && TREE_CODE (CHREC_LEFT (chrec_before)) != EXPONENTIAL_CHREC)
! 	  || (CHREC_VARIABLE (CHREC_LEFT (chrec_before)) != loop_num)))
      {
!       /* And from this point, start adding to the right.  */
!       tree init_cond = initial_condition (*to_add);
        
!       *to_add = remove_initial_condition (*to_add);
!       return build_polynomial_chrec 
! 	(CHREC_VARIABLE (chrec_before), CHREC_LEFT (chrec_before), 
! 	 chrec_fold_plus (CHREC_RIGHT (chrec_before), init_cond));
!     }
!   
!   else
!     {
!       /* Search.  */
!       tree res = add_expr_to_loop_evolution_1 
! 	(loop_num, CHREC_LEFT (chrec_before), to_add);
        
!       /* If there are elements to be added...  */
!       if (*to_add != NULL_TREE)
! 	{
! 	  tree init_cond = initial_condition (*to_add);
! 	  *to_add = remove_initial_condition (*to_add);
! 	  
! 	  /* ...add the element.  */
! 	  return build_polynomial_chrec 
! 	    (CHREC_VARIABLE (chrec_before), res, 
! 	     chrec_fold_plus (CHREC_RIGHT (chrec_before), init_cond));
! 	}
!       
!       return build_polynomial_chrec 
! 	(CHREC_VARIABLE (chrec_before), res, CHREC_RIGHT (chrec_before));
      }
  }
  
! /* Finish the copying of the evolution from TO_ADD into
!    CHREC_BEFORE.  */
  
! static tree 
! add_expr_to_loop_evolution_2 (tree chrec_before, 
! 			      tree *to_add)
  {
!   tree init_cond;
    
!   if (*to_add == NULL_TREE)
!     return chrec_before;
!   
!   init_cond = initial_condition (*to_add);
!   *to_add = remove_initial_condition (*to_add);
!   
!   return build_polynomial_chrec 
!     (CHREC_VARIABLE (chrec_before), chrec_before, init_cond);
  }
  
  /* The expression CHREC_BEFORE has an evolution part in LOOP_NUM.  
*************** add_expr_to_loop_evolution (unsigned loo
*** 2193,2209 ****
    switch (TREE_CODE (chrec_before))
      {
      case POLYNOMIAL_CHREC:
!       if (CHREC_VARIABLE (chrec_before) == loop_num
! 	  /* The evolution has to be added on the leftmost position for 
! 	     loop_num.  */
! 	  && ((TREE_CODE (CHREC_LEFT (chrec_before)) != POLYNOMIAL_CHREC
! 		&& TREE_CODE (CHREC_LEFT (chrec_before)) != EXPONENTIAL_CHREC)
! 	      || (CHREC_VARIABLE (CHREC_LEFT (chrec_before)) != loop_num)))
! 	return build_polynomial_chrec 
! 	  (loop_num, 
! 	   CHREC_LEFT (chrec_before),
! 	   chrec_fold_plus (CHREC_RIGHT (chrec_before), to_add));
        else
  	return build_polynomial_chrec 
  	  (CHREC_VARIABLE (chrec_before),
  	   add_expr_to_loop_evolution (loop_num, 
--- 2195,2219 ----
    switch (TREE_CODE (chrec_before))
      {
      case POLYNOMIAL_CHREC:
!       if (CHREC_VARIABLE (chrec_before) == loop_num)
! 	{
! 	  /* Add the polynomial TO_ADD to the evolution in LOOP_NUM of
! 	     CHREC_BEFORE.  */
! 	  tree res = add_expr_to_loop_evolution_1 
! 	    (loop_num, chrec_before, &to_add);
! 	  
! 	  /* When the degree of TO_ADD is greater than the degree of
! 	     CHREC_BEFORE in the LOOP_NUM dimension, build the new
! 	     evolution.  */
! 	  if (to_add != NULL_TREE)
! 	    res = add_expr_to_loop_evolution_2
! 	      (res, &to_add);
! 	  
! 	  return res;
! 	}
!       
        else
+ 	/* Search the evolution in LOOP_NUM.  */
  	return build_polynomial_chrec 
  	  (CHREC_VARIABLE (chrec_before),
  	   add_expr_to_loop_evolution (loop_num, 
Index: tree-chrec.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-chrec.h,v
retrieving revision 1.1.2.3
diff -c -3 -p -r1.1.2.3 tree-chrec.h
*** tree-chrec.h	12 Jan 2004 14:40:09 -0000	1.1.2.3
--- tree-chrec.h	15 Jan 2004 12:27:09 -0000
*************** extern tree evolution_function_in_loop_n
*** 102,109 ****
  extern tree reset_evolution_in_loop (unsigned, tree, tree);
  extern tree chrec_eval_next_init_cond (unsigned, tree);
  extern tree chrec_merge (tree, tree);
- extern tree build_polynomial_evolution_in_loop (unsigned, tree, tree);
- extern tree build_exponential_evolution_in_loop (unsigned, tree, tree);
  extern tree add_expr_to_loop_evolution (unsigned, tree, tree);
  extern tree multiply_by_expr_the_loop_evolution (unsigned, tree, tree);
  extern tree chrec_fold_automatically_generated_operands (tree, tree);
--- 102,107 ----
Index: tree-scalar-evolution.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-scalar-evolution.c,v
retrieving revision 1.1.2.7
diff -c -3 -p -r1.1.2.7 tree-scalar-evolution.c
*** tree-scalar-evolution.c	12 Jan 2004 14:40:09 -0000	1.1.2.7
--- tree-scalar-evolution.c	15 Jan 2004 12:27:10 -0000
*************** static tree merge_evolutions           (
*** 172,177 ****
--- 172,180 ----
  static void merge_branches_of_condition_phi_node_in_loop (tree, tree);
  static void merge_branches_of_condition_phi_node (tree);
  static tree evolution_at_version       (unsigned, tree);
+ static tree select_outer_and_current_evolutions (unsigned, tree);
+ static tree build_polynomial_evolution_in_loop (unsigned, tree, tree);
+ static tree build_exponential_evolution_in_loop (unsigned, tree, tree);
  static tree add_to_evolution           (unsigned, tree, tree);
  static tree multiply_evolution         (unsigned, tree, tree);
  static inline tree cannot_analyze_loop_nb_iterations_yet (void);
*************** matched_an_increment (unsigned loop_nb, 
*** 1102,1107 ****
--- 1105,1112 ----
      (initial_condition (chrec10), 
       initial_condition (to_be_added));
    
+   to_be_added = select_outer_and_current_evolutions 
+     (loop_nb, to_be_added);
    *evolution_function = add_to_evolution 
      (loop_nb, chrec_before, to_be_added);
  }
*************** scev_analyze_modify_expr (unsigned loop_
*** 1473,1479 ****
  		*effect_after_execution = chrec_fold_plus 
  		  (initial_condition (chrec10), 
  		   initial_condition (to_be_added));
! 		      
  		*evolution_function = add_to_evolution 
  		  (loop_nb, chrec_before, to_be_added);
  	      }
--- 1478,1486 ----
  		*effect_after_execution = chrec_fold_plus 
  		  (initial_condition (chrec10), 
  		   initial_condition (to_be_added));
! 		
! 		to_be_added = select_outer_and_current_evolutions 
! 		  (loop_nb, to_be_added);
  		*evolution_function = add_to_evolution 
  		  (loop_nb, chrec_before, to_be_added);
  	      }
*************** compute_overall_effect_of_inner_loop (tr
*** 1950,1961 ****
  	       overall_effect);
  		      
  	  else 
! 	    new_evol = add_to_evolution 
! 	      (loop_num (outer_loop (loop_of_stmt (loop_phi_node))),
! 	       get_scev (loop_num (loop_of_stmt (loop_phi_node)), 
! 			 SSA_NAME_VAR
! 			 (PHI_RESULT (loop_phi_node))), 
! 	       overall_effect);
  	  
  	  set_scev (0, SSA_NAME_VAR (PHI_RESULT (loop_phi_node)),
  		    new_evol);
--- 1957,1976 ----
  	       overall_effect);
  		      
  	  else 
! 	    {
! 	      unsigned loop_nb = loop_num 
! 		(outer_loop (loop_of_stmt (loop_phi_node)));
! 
! 	      overall_effect = select_outer_and_current_evolutions 
! 		(loop_nb, overall_effect);
! 	      
! 	      new_evol = add_to_evolution 
! 		(loop_nb,
! 		 get_scev (loop_num (loop_of_stmt (loop_phi_node)), 
! 			   SSA_NAME_VAR
! 			   (PHI_RESULT (loop_phi_node))), 
! 		 overall_effect);
! 	    }
  	  
  	  set_scev (0, SSA_NAME_VAR (PHI_RESULT (loop_phi_node)),
  		    new_evol);
*************** evolution_at_version (unsigned loop_nb, 
*** 2493,2498 ****
--- 2508,2647 ----
    return res;
  }
  
+ /* Select the evolution function in the current LOOP_NB and in the
+    outer containing loops.  */
+ 
+ static tree
+ select_outer_and_current_evolutions (unsigned loop_nb, 
+ 				     tree chrec)
+ {
+   switch (TREE_CODE (chrec))
+     {
+     case POLYNOMIAL_CHREC:
+       if (loop_is_included_in (loop_nb, CHREC_VARIABLE (chrec)))
+ 	return build_polynomial_chrec 
+ 	  (CHREC_VARIABLE (chrec), 
+ 	   select_outer_and_current_evolutions (loop_nb, CHREC_LEFT (chrec)),
+ 	   select_outer_and_current_evolutions (loop_nb, CHREC_RIGHT (chrec)));
+       
+       else
+ 	return select_outer_and_current_evolutions 
+ 	  (loop_nb, CHREC_LEFT (chrec));
+       
+     case EXPONENTIAL_CHREC:
+       if (loop_is_included_in (loop_nb, CHREC_VARIABLE (chrec)))
+ 	return build_exponential_chrec 
+ 	  (CHREC_VARIABLE (chrec), 
+ 	   select_outer_and_current_evolutions (loop_nb, CHREC_LEFT (chrec)),
+ 	   select_outer_and_current_evolutions (loop_nb, CHREC_RIGHT (chrec)));
+       
+       else
+ 	return select_outer_and_current_evolutions 
+ 	  (loop_nb, CHREC_LEFT (chrec));
+       
+     default:
+       return chrec;
+     }
+ }
+ 
+ /* The expression CHREC_BEFORE has no evolution part in LOOP_NB.  
+    This function constructs a new polynomial evolution function for this 
+    loop.  The evolution part is TO_ADD.  */
+ 
+ static tree
+ build_polynomial_evolution_in_loop (unsigned loop_nb, 
+ 				    tree chrec_before, 
+ 				    tree to_add)
+ {
+ #if defined ENABLE_CHECKING 
+   if (to_add == NULL_TREE
+       || chrec_before == NULL_TREE)
+     abort ();
+ #endif
+   
+   switch (TREE_CODE (chrec_before))
+     {
+     case POLYNOMIAL_CHREC:
+       if (CHREC_VARIABLE (chrec_before) < loop_nb)
+ 	return build_polynomial_chrec (loop_nb, chrec_before, to_add);
+       else
+ 	return build_polynomial_chrec 
+ 	  (CHREC_VARIABLE (chrec_before),
+ 	   build_polynomial_evolution_in_loop (loop_nb, 
+ 					       CHREC_LEFT (chrec_before), 
+ 					       to_add),
+ 	   CHREC_RIGHT (chrec_before));
+       
+     case EXPONENTIAL_CHREC:
+       if (CHREC_VARIABLE (chrec_before) < loop_nb)
+ 	return build_polynomial_chrec (loop_nb, chrec_before, to_add);
+       else
+ 	return build_exponential_chrec 
+ 	  (CHREC_VARIABLE (chrec_before),
+ 	   build_polynomial_evolution_in_loop (loop_nb, 
+ 					       CHREC_LEFT (chrec_before), 
+ 					       to_add),
+ 	   CHREC_RIGHT (chrec_before));
+       
+     case VAR_DECL:
+     case PARM_DECL:
+     case INTEGER_CST:
+     case INTERVAL_CHREC:
+     default:
+       /* These nodes do not depend on a loop.  */
+       return build_polynomial_chrec (loop_nb, chrec_before, to_add);
+     }
+ }
+ 
+ /* The expression CHREC_BEFORE has no evolution part in LOOP_NUM.  
+    This function constructs a new exponential evolution function for this 
+    loop.  The evolution part is TO_MULT.  */
+ 
+ static tree
+ build_exponential_evolution_in_loop (unsigned loop_num, 
+ 				     tree chrec_before, 
+ 				     tree to_mult)
+ {
+ #if defined ENABLE_CHECKING 
+   if (to_mult == NULL_TREE
+       || chrec_before == NULL_TREE)
+     abort ();
+ #endif
+   
+   switch (TREE_CODE (chrec_before))
+     {
+     case POLYNOMIAL_CHREC:
+       if (CHREC_VARIABLE (chrec_before) < loop_num)
+ 	return build_exponential_chrec (loop_num, chrec_before, to_mult);
+       else
+ 	return build_polynomial_chrec 
+ 	  (CHREC_VARIABLE (chrec_before),
+ 	   build_exponential_evolution_in_loop (loop_num, 
+ 						CHREC_LEFT (chrec_before), 
+ 						to_mult),
+ 	   CHREC_RIGHT (chrec_before));
+       
+     case EXPONENTIAL_CHREC:
+       if (CHREC_VARIABLE (chrec_before) < loop_num)
+ 	return build_exponential_chrec (loop_num, chrec_before, to_mult);
+       else
+ 	return build_exponential_chrec 
+ 	  (CHREC_VARIABLE (chrec_before),
+ 	   build_exponential_evolution_in_loop (loop_num, 
+ 						CHREC_LEFT (chrec_before), 
+ 						to_mult),
+ 	   CHREC_RIGHT (chrec_before));
+       
+     case VAR_DECL:
+     case PARM_DECL:
+     case INTEGER_CST:
+     case INTERVAL_CHREC:
+     default:
+       /* These nodes do not depend on a loop.  */
+       return build_exponential_chrec (loop_num, chrec_before, to_mult);
+     }
+ }
+ 
  /* Add TO_ADD to the evolution part of CHREC_BEFORE in the dimension
     of LOOP_NB.  */
  
*************** add_to_evolution (unsigned loop_nb, 
*** 2512,2517 ****
--- 2661,2673 ----
  #endif
    
    DBG_S (fprintf (stderr, "(add_to_evolution \n");
+ 	 fprintf (stderr, "  (loop_nb = %d)\n", loop_nb);
+ 	 fprintf (stderr, "  (chrec_before = ");
+ 	 debug_generic_expr (chrec_before);
+ 	 fprintf (stderr, "  )\n");
+ 	 fprintf (stderr, "  (to_add = ");
+ 	 debug_generic_expr (to_add);
+ 	 fprintf (stderr, "  )\n");
  	 if (TREE_CODE (chrec_before) == POLYNOMIAL_CHREC
  	     && CHREC_VARIABLE (chrec_before) == loop_nb)
  	 fprintf (stderr, "  constructing a polynomial of degree > 1 \n"));
*************** add_to_evolution (unsigned loop_nb, 
*** 2520,2529 ****
      {
      case POLYNOMIAL_CHREC:
        if (no_evolution_in_loop_p (chrec_before, loop_nb))
! 	/* testsuite/.../ssa-chrec-38.c.  */
! 	res = build_polynomial_evolution_in_loop (loop_nb, 
! 						  chrec_before, 
! 						  to_add);
        else
  	/* testsuite/.../ssa-chrec-37.c.  */
  	res = add_expr_to_loop_evolution (loop_nb, chrec_before, to_add);
--- 2676,2749 ----
      {
      case POLYNOMIAL_CHREC:
        if (no_evolution_in_loop_p (chrec_before, loop_nb))
! 	{
! 	  switch (TREE_CODE (chrec_before))
! 	    {
! 	    case POLYNOMIAL_CHREC:
! 	      if (loop_nb != CHREC_VARIABLE (to_add)
! 		  && loop_is_included_in (loop_nb, CHREC_VARIABLE (to_add)))
! 		/* testsuite/.../ssa-chrec-38.c.  */
! 		res = build_polynomial_evolution_in_loop (loop_nb, 
! 							  chrec_before, 
! 							  to_add);
! 	      else
! 		/* testsuite/.../ssa-chrec-43.c.  */
! 		res = build_polynomial_chrec 
! 		  (CHREC_VARIABLE (chrec_before), 
! 		   add_to_evolution (loop_nb, CHREC_LEFT (chrec_before), to_add), 
! 		   CHREC_RIGHT (chrec_before));
! 	      
! 	      break;
! 	      
! 	    case EXPONENTIAL_CHREC:
! 	      if (loop_nb != CHREC_VARIABLE (to_add)
! 		  && loop_is_included_in (loop_nb, CHREC_VARIABLE (to_add)))
! 		/* FIXME taylor.  */
! 		res = reset_evolution_in_loop (loop_nb, 
! 					       chrec_before, 
! 					       chrec_top);
! 	      else
! 		res = build_exponential_chrec 
! 		  (CHREC_VARIABLE (chrec_before), 
! 		   add_to_evolution (loop_nb, CHREC_LEFT (chrec_before), to_add), 
! 		   CHREC_RIGHT (chrec_before));
! 	      
! 	      break;
! 	      
! 	    default:
! 	      if (loop_nb != CHREC_VARIABLE (to_add)
! 		  && loop_is_included_in (loop_nb, CHREC_VARIABLE (to_add)))
! 		/* If TO_ADD has an evolution in an outer containing
! 		   loop, don't restructure the tree.  Example: 
! 		   {2, +, {0, +, 1}_1}_2  is not equivalent to 
! 		   {{2, +, 1}_1, +, 0}_2.
! 		   testsuite/.../ssa-chrec-43.c  */
! 		res = build_polynomial_evolution_in_loop (loop_nb, 
! 							  chrec_before, 
! 							  to_add);
! 	      else
! 		{
! 		  /* When CHREC_BEFORE is constant, it becomes the new
! 		     initial condition of the evolution, while the
! 		     initial condition of TO_ADD is added to the
! 		     evolution in LOOP_NB. Example:
! 		     (add_to_evolution 
! 		     (loop_nb = 1)
! 		     (chrec_before = 2)
! 		     (to_add = {3, +, 4}_1)
! 		     (res = {{2, +, 3}_1, +, 4}_1))
! 		     testsuite/.../ssa-chrec-08.c  */
! 		  tree init_cond_to_add = initial_condition (to_add);
! 		  
! 		  chrec_before = replace_initial_condition 
! 		    (to_add, chrec_before);
! 		  res = build_polynomial_evolution_in_loop 
! 		    (loop_nb, chrec_before, init_cond_to_add);
! 		}
! 	      break;
! 	    }
! 	}
!       
        else
  	/* testsuite/.../ssa-chrec-37.c.  */
  	res = add_expr_to_loop_evolution (loop_nb, chrec_before, to_add);
*************** add_to_evolution (unsigned loop_nb, 
*** 2558,2571 ****
        break;
      }
    
!   DBG_S (fprintf (stderr, "  (loop_nb = %d)\n", loop_nb);
! 	 fprintf (stderr, "  (chrec_before = ");
! 	 debug_generic_expr (chrec_before);
! 	 fprintf (stderr, "  )\n");
! 	 fprintf (stderr, "  (to_add = ");
! 	 debug_generic_expr (to_add);
! 	 fprintf (stderr, "  )\n");
! 	 fprintf (stderr, "  (res = ");
  	 debug_generic_expr (res);
  	 fprintf (stderr, "  )\n");
  	 fprintf (stderr, ")\n"));
--- 2778,2784 ----
        break;
      }
    
!   DBG_S (fprintf (stderr, "  (res = ");
  	 debug_generic_expr (res);
  	 fprintf (stderr, "  )\n");
  	 fprintf (stderr, ")\n"));
*************** multiply_evolution (unsigned loop_nb, 
*** 2590,2605 ****
      abort ();
  #endif
    
!   DBG_S (fprintf (stderr, "(multiply_evolution \n"));
  
    switch (TREE_CODE (to_mult))
      {
      case EXPONENTIAL_CHREC:
        if (no_evolution_in_loop_p (chrec_before, loop_nb))
  	/* testsuite/.../ssa-chrec-41.c.  */
! 	res = build_exponential_evolution_in_loop (loop_nb, 
! 						   chrec_before, 
! 						   to_mult);
        else
  	/* testsuite/.../ssa-chrec-22.c.  */
  	res = multiply_by_expr_the_loop_evolution (loop_nb, 
--- 2803,2874 ----
      abort ();
  #endif
    
!   DBG_S (fprintf (stderr, "(multiply_evolution \n");
! 	 fprintf (stderr, "  (loop_nb = %d)\n", loop_nb);
! 	 fprintf (stderr, "  (chrec_before = ");
! 	 debug_generic_expr (chrec_before);
! 	 fprintf (stderr, "  )\n");
! 	 fprintf (stderr, "  (to_mult = ");
! 	 debug_generic_expr (to_mult);
! 	 fprintf (stderr, "  )\n"));
  
    switch (TREE_CODE (to_mult))
      {
      case EXPONENTIAL_CHREC:
        if (no_evolution_in_loop_p (chrec_before, loop_nb))
  	/* testsuite/.../ssa-chrec-41.c.  */
! 	{
! 	  switch (TREE_CODE (chrec_before))
! 	    {
! 	    case POLYNOMIAL_CHREC:
! 
! 	      if (loop_nb != CHREC_VARIABLE (to_mult)
! 		  && loop_is_included_in (loop_nb, CHREC_VARIABLE (to_mult)))
! 		/* FIXME taylor.  */
! 		res = reset_evolution_in_loop (loop_nb, 
! 					       chrec_before, 
! 					       chrec_top);
! 	      else
! 		res = build_polynomial_chrec 
! 		  (CHREC_VARIABLE (chrec_before), 
! 		   multiply_evolution (loop_nb, CHREC_LEFT (chrec_before), to_mult), 
! 		   CHREC_RIGHT (chrec_before));
! 	      
! 	      break;
! 	      
! 	    case EXPONENTIAL_CHREC:
! 	      if (loop_nb != CHREC_VARIABLE (to_mult)
! 		  && loop_is_included_in (loop_nb, CHREC_VARIABLE (to_mult)))
! 		res = build_exponential_evolution_in_loop (loop_nb, 
! 							   chrec_before, 
! 							   to_mult);
! 	      else
! 		res = build_exponential_chrec 
! 		  (CHREC_VARIABLE (chrec_before), 
! 		   multiply_evolution (loop_nb, CHREC_LEFT (chrec_before), to_mult), 
! 		   CHREC_RIGHT (chrec_before));
! 	      
! 	      break;
! 	      
! 	    default:
! 	      if (loop_nb != CHREC_VARIABLE (to_mult)
! 		  && loop_is_included_in (loop_nb, CHREC_VARIABLE (to_mult)))
! 		res = build_exponential_evolution_in_loop (loop_nb, 
! 							   chrec_before, 
! 							   to_mult);
! 	      else
! 		{
! 		  tree init_cond_to_mult = initial_condition (to_mult);
! 		  
! 		  chrec_before = replace_initial_condition 
! 		    (to_mult, chrec_before);
! 		  res = build_exponential_evolution_in_loop 
! 		    (loop_nb, chrec_before, init_cond_to_mult);
! 		}
! 	      break;
! 	    }
! 	}
!       
        else
  	/* testsuite/.../ssa-chrec-22.c.  */
  	res = multiply_by_expr_the_loop_evolution (loop_nb, 
*************** multiply_evolution (unsigned loop_nb, 
*** 2632,2657 ****
  						   chrec_before, 
  						   to_mult);
        else
- 	/* Example: 
- 	   LOOP_NB = 1
- 	   TO_ADD = "3*N"
- 	   CHREC_BEFORE = "{{0, +, 1}_1, +, 5}_1"
- 	   --
- 	   RES = "{{0, +, 3*N + 1}_1, +, 5}_1".  */
  	res = multiply_by_expr_the_loop_evolution (loop_nb, 
  						   chrec_before, 
  						   to_mult);
        break;
      }
    
!   DBG_S (fprintf (stderr, "  (loop_nb = %d)\n", loop_nb);
! 	 fprintf (stderr, "  (chrec_before = ");
! 	 debug_generic_expr (chrec_before);
! 	 fprintf (stderr, "  )\n");
! 	 fprintf (stderr, "  (to_mult = ");
! 	 debug_generic_expr (to_mult);
! 	 fprintf (stderr, "  )\n");
! 	 fprintf (stderr, "  (res = ");
  	 debug_generic_expr (res);
  	 fprintf (stderr, "  )\n");
  	 fprintf (stderr, ")\n"));
--- 2901,2913 ----
  						   chrec_before, 
  						   to_mult);
        else
  	res = multiply_by_expr_the_loop_evolution (loop_nb, 
  						   chrec_before, 
  						   to_mult);
        break;
      }
    
!   DBG_S (fprintf (stderr, "  (res = ");
  	 debug_generic_expr (res);
  	 fprintf (stderr, "  )\n");
  	 fprintf (stderr, ")\n"));
*************** analyze_scalar_evolution (unsigned loop_
*** 3576,3581 ****
--- 3832,3842 ----
    if (TREE_CODE (version) == SSA_NAME 
        && initial_condition (res) == version)
      res = analyze_scalar_evolution_1 (loop_nb, version);
+   
+   /* Don't expose to the client passes all the information from the
+      evolution knowledge base: select only the evolution parts in the
+      current LOOP_NB and in the outer containing loops.  */
+   res = select_outer_and_current_evolutions (loop_nb, res);
    
    DBG_S (fprintf (stderr, ")\n"));
    return res;
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-06.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-06.c,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-06.c
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-06.c	9 Jan 2004 12:15:53 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-06.c	15 Jan 2004 12:27:11 -0000
*************** int main(void)
*** 19,37 ****
  	 In this case the value of B out of the loop is that of the evolution
  	 function of B applied to the number of iterations the inner loop_2 runs.  
  	 Value (B) = {23, +, 5}_2 (6) = 53.  */
        /* At this point, the variable A has the evolution function:
  	 {{22, +, 6}_1, +, 1}_2.  */
        a = a + b;
        /* At this point, the variable A has the evolution function:
! 	 {{22, +, {59, +, 5}_2}_1, +, 1}_2.  */
!       /* And finally the a+=1 from the FOR_STMT produces the evolution function:
! 	 {{22, +, {60, +, 5}_2}_1, +, 1}_2.  */
      }
    /* Consequently, the outer loop runs exactly 1 times.  */
  }
  
  /* The analyzer has to detect the following evolution functions:
     b  ->  {23, +, 5}_2
!    a  ->  {{22, +, {60, +, 5}_2}_1, +, 1}_2
  */
  /* { dg-final { diff-tree-dumps "scev" } } */
--- 19,42 ----
  	 In this case the value of B out of the loop is that of the evolution
  	 function of B applied to the number of iterations the inner loop_2 runs.  
  	 Value (B) = {23, +, 5}_2 (6) = 53.  */
+ 
        /* At this point, the variable A has the evolution function:
  	 {{22, +, 6}_1, +, 1}_2.  */
        a = a + b;
        /* At this point, the variable A has the evolution function:
! 	 {{22, +, 59}_1, +, 1}_2.  The evolution of the variable B in
! 	 the loop_2 does not matter, and is not recorded in the
! 	 evolution of A.  The above statement is equivalent to: 
! 	 "a = a + 53", ie. the scalar value of B on exit of the loop_2. */
!       
!       /* And finally the a+=1 from the FOR_STMT produces the evolution
! 	 function: {{22, +, 60}_1, +, 1}_2.  */
      }
    /* Consequently, the outer loop runs exactly 1 times.  */
  }
  
  /* The analyzer has to detect the following evolution functions:
     b  ->  {23, +, 5}_2
!    a  ->  {{22, +, 60}_1, +, 1}_2
  */
  /* { dg-final { diff-tree-dumps "scev" } } */
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-06.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-06.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-06.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-06.c.scev	9 Jan 2004 12:15:53 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-06.c.scev	15 Jan 2004 12:27:11 -0000
*************** b
*** 10,16 ****
    Scalar evolution functions: 
  
  a
!   ->  {{22, +, {60, +, 5}_2}_1, +, 1}_2
  
  
  
--- 10,16 ----
    Scalar evolution functions: 
  
  a
!   ->  {{22, +, 60}_1, +, 1}_2
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-07.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-07.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-07.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-07.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-07.c.scev	15 Jan 2004 12:27:11 -0000
*************** b
*** 6,12 ****
    ->  {2, +, 3}_1
  
  a
!   ->  {-100, +, {2, +, 3}_1}_1
  
  
  
--- 6,12 ----
    ->  {2, +, 3}_1
  
  a
!   ->  {{-100, +, 2}_1, +, 3}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-08.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-08.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-08.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-08.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-08.c.scev	15 Jan 2004 12:27:11 -0000
*************** c
*** 6,15 ****
    ->  {3, +, 4}_1
  
  b
!   ->  {2, +, {3, +, 4}_1}_1
  
  a
!   ->  {-100, +, {2, +, {3, +, 4}_1}_1}_1
  
  
  
--- 6,15 ----
    ->  {3, +, 4}_1
  
  b
!   ->  {{2, +, 3}_1, +, 4}_1
  
  a
!   ->  {{{-100, +, 2}_1, +, 3}_1, +, 4}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-09.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-09.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-09.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-09.c.scev	9 Jan 2004 12:15:53 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-09.c.scev	15 Jan 2004 12:27:11 -0000
*************** e
*** 6,21 ****
    ->  {5, +, c_13}_1
  
  d
!   ->  {4, +, {5, +, c_13}_1}_1
  
  c
!   ->  {3, +, {4, +, {5, +, c_13}_1}_1}_1
  
  b
!   ->  {2, +, {3, +, {4, +, {5, +, c_13}_1}_1}_1}_1
  
  a
!   ->  {-100, +, {2, +, {3, +, {4, +, {5, +, c_13}_1}_1}_1}_1}_1
  
  
  
--- 6,21 ----
    ->  {5, +, c_13}_1
  
  d
!   ->  {{4, +, 5}_1, +, c_13}_1
  
  c
!   ->  {{{3, +, 4}_1, +, 5}_1, +, c_13}_1
  
  b
!   ->  {{{{2, +, 3}_1, +, 4}_1, +, 5}_1, +, c_13}_1
  
  a
!   ->  {{{{{-100, +, 2}_1, +, 3}_1, +, 4}_1, +, 5}_1, +, c_13}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-11.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-11.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-11.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-11.c.scev	9 Jan 2004 12:15:53 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-11.c.scev	15 Jan 2004 12:27:11 -0000
*************** g
*** 9,15 ****
    ->  {7, +, 8}_1
  
  f
!   ->  {6, +, {7, +, 8}_1}_1
  
  T.1
    ->  [-oo, +oo]
--- 9,15 ----
    ->  {7, +, 8}_1
  
  f
!   ->  {{6, +, 7}_1, +, 8}_1
  
  T.1
    ->  [-oo, +oo]
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-12.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-12.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-12.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-12.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-12.c.scev	15 Jan 2004 12:27:11 -0000
*************** c
*** 6,15 ****
    ->  {3, +, 4}_1
  
  b
!   ->  {2, +, {[0, 3], +, [0, 4]}_1}_1
  
  a
!   ->  {-100, +, {2, +, {[0, 3], +, [0, 4]}_1}_1}_1
  
  
  
--- 6,15 ----
    ->  {3, +, 4}_1
  
  b
!   ->  {{2, +, [0, 3]}_1, +, [0, 4]}_1
  
  a
!   ->  {{{-100, +, 2}_1, +, [0, 3]}_1, +, [0, 4]}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-13.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-13.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-13.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-13.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-13.c.scev	15 Jan 2004 12:27:11 -0000
*************** b
*** 9,15 ****
    ->  {2, +, 1}_1
  
  a
!   ->  {-100, +, {[2, 3], +, 1}_1}_1
  
  
  
--- 9,15 ----
    ->  {2, +, 1}_1
  
  a
!   ->  {{-100, +, [2, 3]}_1, +, 1}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-14.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-14.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-14.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-14.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-14.c.scev	15 Jan 2004 12:27:11 -0000
*************** b
*** 9,18 ****
    ->  {2, +, 1}_1
  
  a
!   ->  {-100, +, {[2, 3], +, [1, 5]}_1}_1
  
  d
!   ->  {4, +, {[-98, -97], +, {[2, 3], +, [1, 5]}_1}_1}_1
  
  
  
--- 9,18 ----
    ->  {2, +, 1}_1
  
  a
!   ->  {{-100, +, [2, 3]}_1, +, [1, 5]}_1
  
  d
!   ->  {{{4, +, [-98, -97]}_1, +, [2, 3]}_1, +, [1, 5]}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-16.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-16.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-16.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-16.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-16.c.scev	15 Jan 2004 12:27:11 -0000
*************** a
*** 6,12 ****
    ->  {-100, +, 23}_1
  
  d
!   ->  {4, +, {-77, +, 23}_1}_1
  
  
  
--- 6,12 ----
    ->  {-100, +, 23}_1
  
  d
!   ->  {{4, +, -77}_1, +, 23}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-18.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-18.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-18.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-18.c.scev	9 Jan 2004 12:15:53 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-18.c.scev	15 Jan 2004 12:27:11 -0000
*************** a
*** 9,15 ****
    ->  {-100, +, [MIN_EXPR <T.1_8, 3>, MAX_EXPR <T.1_8, 3>]}_1
  
  b
!   ->  {2, +, {[MIN_EXPR <T.1_8, 3> + -100, MAX_EXPR <T.1_8, 3> + -100], +, [MIN_EXPR <T.1_8, 3>, MAX_EXPR <T.1_8, 3>]}_1}_1
  
  
  
--- 9,15 ----
    ->  {-100, +, [MIN_EXPR <T.1_8, 3>, MAX_EXPR <T.1_8, 3>]}_1
  
  b
!   ->  {{2, +, [MIN_EXPR <T.1_8, 3> + -100, MAX_EXPR <T.1_8, 3> + -100]}_1, +, [MIN_EXPR <T.1_8, 3>, MAX_EXPR <T.1_8, 3>]}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-20.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-20.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-20.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-20.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-20.c.scev	15 Jan 2004 12:27:11 -0000
*************** b
*** 6,12 ****
    ->  {2, +, 5}_1
  
  a
!   ->  {3, +, {9, +, 5}_1}_1
  
  
  
--- 6,12 ----
    ->  {2, +, 5}_1
  
  a
!   ->  {{3, +, 9}_1, +, 5}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-21.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-21.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-21.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-21.c.scev	27 Dec 2003 05:42:51 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-21.c.scev	15 Jan 2004 12:27:11 -0000
*************** a
*** 6,12 ****
    ->  {3, *, 4}_1
  
  b
!   ->  {2, *, {12, *, 4}_1}_1
  
  
  
--- 6,12 ----
    ->  {3, *, 4}_1
  
  b
!   ->  {{2, *, 12}_1, *, 4}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-37.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-37.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-37.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-37.c.scev	9 Jan 2004 12:15:54 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-37.c.scev	15 Jan 2004 12:27:11 -0000
*************** b
*** 9,15 ****
    ->  {2, +, 5}_1
  
  a
!   ->  {-123, +, {13, +, 17}_1}_1
  
  
  
--- 9,15 ----
    ->  {2, +, 5}_1
  
  a
!   ->  {{-123, +, 13}_1, +, 17}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-38.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-38.c,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-38.c
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-38.c	27 Dec 2003 05:42:52 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-38.c	15 Jan 2004 12:27:11 -0000
*************** int main ()
*** 19,27 ****
  	  /* Exercises the build_polynomial_evolution_in_loop function in the following context:
  	     (add_to_evolution 
  	       loop_num = 2
! 	       chrec_before = {3, +, {7, +, 5}_1}_1
  	       to_add = {11, +, 12}_1
! 	       res = {{3, +, {7, +, 5}_1}_1, +, {11, +, 12}_1}_2
  	     )
  	     
  	     This also exercises the chrec_apply function in the following context:
--- 19,27 ----
  	  /* Exercises the build_polynomial_evolution_in_loop function in the following context:
  	     (add_to_evolution 
  	       loop_num = 2
! 	       chrec_before = {3, +, 7, +, 5}_1
  	       to_add = {11, +, 12}_1
! 	       res = {{3, +, 7, +, 5}_1, +, {11, +, 12}_1}_2
  	     )
  	     
  	     This also exercises the chrec_apply function in the following context:
*************** int main ()
*** 29,38 ****
  	       var = 2
  	       chrec = {0, +, {11, +, 12}_1}_2
  	       x = 5
! 	       res = [-oo, +oo]
  	     )
! 	     
! 	     The result should be:  {{3, +, {(7 + 5*11), +, (5 + 5*12)}_1}_1, +, {(11, +, 12}_1}_2.  */
  	  a += c;
  	}
        c += 12;
--- 29,37 ----
  	       var = 2
  	       chrec = {0, +, {11, +, 12}_1}_2
  	       x = 5
! 	       res = {55, +, 60}_1
  	     )
! 	  */
  	  a += c;
  	}
        c += 12;
*************** int main ()
*** 43,49 ****
     b  ->  {2, +, 5}_1
     c  ->  {11, +, 12}_1
     d  ->  {-5, +, 1}_2
!    a  ->  {{3, +, {62, +, 65}_1}_1, +, {11, +, 12}_1}_2
  */
  
  /* { dg-final { diff-tree-dumps "scev" } } */
--- 42,48 ----
     b  ->  {2, +, 5}_1
     c  ->  {11, +, 12}_1
     d  ->  {-5, +, 1}_2
!    a  ->  {{3, +, 62, +, 65}_1, +, {11, +, 12}_1}_2
  */
  
  /* { dg-final { diff-tree-dumps "scev" } } */
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-38.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-38.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-38.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-38.c.scev	9 Jan 2004 12:15:54 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-38.c.scev	15 Jan 2004 12:27:11 -0000
*************** c
*** 16,22 ****
    ->  {11, +, 12}_1
  
  a
!   ->  {{3, +, {62, +, 65}_1}_1, +, {11, +, 12}_1}_2
  
  
  
--- 16,22 ----
    ->  {11, +, 12}_1
  
  a
!   ->  {{{3, +, 62}_1, +, 65}_1, +, {11, +, 12}_1}_2
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-39.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-39.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-39.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-39.c.scev	9 Jan 2004 12:15:54 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-39.c.scev	15 Jan 2004 12:27:11 -0000
*************** b
*** 13,26 ****
    ->  {2, +, 25}_1
  
  a
!   ->  {{3, +, {ParmN_12 * 5 + 27, +, 25}_1}_1, +, ParmN_12}_2
! 
! 
! 
!   Scalar evolution functions: 
! 
! ParmN
!   ->  not_analyzed_yet
  
  
  
--- 13,19 ----
    ->  {2, +, 25}_1
  
  a
!   ->  {{{3, +, ParmN_12 * 5 + 27}_1, +, 25}_1, +, ParmN_12}_2
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-42.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-42.c,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-42.c
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-42.c	27 Dec 2003 05:42:52 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-42.c	15 Jan 2004 12:27:11 -0000
*************** int main ()
*** 22,30 ****
  
  /* 
     c  ->  {0, +, 1}_1
!    b  ->  {2, +, {0, +, 1}_1}_1
     d  ->  {5, +, 9}_1
!    a  ->  {1, +, {7, +, {9, +, 1}_1}_1}_1
  */
  
  /* { dg-final { diff-tree-dumps "scev" } } */
--- 22,30 ----
  
  /* 
     c  ->  {0, +, 1}_1
!    b  ->  {2, +, 0, +, 1}_1
     d  ->  {5, +, 9}_1
!    a  ->  {1, +, 7, +, 9, +, 1}_1
  */
  
  /* { dg-final { diff-tree-dumps "scev" } } */
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-42.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-42.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-42.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-42.c.scev	9 Jan 2004 12:15:54 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-42.c.scev	15 Jan 2004 12:27:11 -0000
*************** c
*** 9,18 ****
    ->  {0, +, 1}_1
  
  b
!   ->  {2, +, {0, +, 1}_1}_1
  
  a
!   ->  {1, +, {7, +, {9, +, 1}_1}_1}_1
  
  
  
--- 9,18 ----
    ->  {0, +, 1}_1
  
  b
!   ->  {{2, +, 0}_1, +, 1}_1
  
  a
!   ->  {{{1, +, 7}_1, +, 9}_1, +, 1}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-43.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-43.c,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-43.c
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-43.c	27 Dec 2003 05:42:52 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-43.c	15 Jan 2004 12:27:11 -0000
*************** int main ()
*** 16,32 ****
  	 (add_to_evolution 
  	   loop_num = 1
  	   chrec_before = 1
! 	   to_add = {{2, +, {0, +, 10}_1}_1, +, {0, +, 1}_1}_2
! 	   res = {1, +, {{2, +, {0, +, 10}_1}_1, +, {0, +, 1}_1}_2}_1
! 	 ).  */
        a += b; 
        
        /* And finally the following statement produces the expected scev:
  	 (add_to_evolution 
  	   loop_num = 1
! 	   chrec_before = {1, +, {{2, +, {0, +, 10}_1}_1, +, {0, +, 1}_1}_2}_1
  	   to_add = {5, +, 9}_1
! 	   res = {1, +, {{7, +, {9, +, 10}_1}_1, +, {0, +, 1}_1}_2}_1
  	 )
  	 That ends this not so formal proof ("CQFD" in french ;-).  */
        a += d;
--- 16,34 ----
  	 (add_to_evolution 
  	   loop_num = 1
  	   chrec_before = 1
! 	   to_add = {{2, +, 0}_1, +, 10}_1
! 	   res = {{{1, +, 2}_1, +, 0}_1, +, 10}_1
! 	 )
! 	 Note that the evolution of B in the inner loop_2 is not
! 	 relevant to the evolution of A in the loop_1.  */
        a += b; 
        
        /* And finally the following statement produces the expected scev:
  	 (add_to_evolution 
  	   loop_num = 1
! 	   chrec_before = {{{1, +, 2}_1, +, 0}_1, +, 10}_1
  	   to_add = {5, +, 9}_1
! 	   res = {{{1, +, 7}_1, +, 9}_1, +, 10}_1
  	 )
  	 That ends this not so formal proof ("CQFD" in french ;-).  */
        a += d;
*************** int main ()
*** 39,45 ****
  	   loop_num = 1
  	   chrec_before = {2, +, {0, +, 1}_1}_2
  	   to_add = {0, +, 10}_1
! 	   res = {{2, +, {0, +, 10}_1}_1, +, {0, +, 1}_1}_2
  	 ).
  	 Note that the variable c has not yet been updated in the loop, and thus its value 
  	 at this version is "{0, +, 1}_1".  Since the loop_2 runs exactly 10 times, the overall
--- 41,47 ----
  	   loop_num = 1
  	   chrec_before = {2, +, {0, +, 1}_1}_2
  	   to_add = {0, +, 10}_1
! 	   res = {{{2, +, 0}_1, +, 10}_1, +, {0, +, 1}_1}_2
  	 ).
  	 Note that the variable c has not yet been updated in the loop, and thus its value 
  	 at this version is "{0, +, 1}_1".  Since the loop_2 runs exactly 10 times, the overall
*************** int main ()
*** 54,62 ****
  /* 
     c  ->  {0, +, 1}_1
     e  ->  {0, +, 1}_2
!    b  ->  {{2, +, {0, +, 10}_1}_1, +, {0, +, 1}_1}_2
     d  ->  {5, +, 9}_1
!    a  ->  {1, +, {{7, +, {9, +, 10}_1}_1, +, {0, +, 1}_1}_2}_1
  */
  
  /* { dg-final { diff-tree-dumps "scev" } } */
--- 56,64 ----
  /* 
     c  ->  {0, +, 1}_1
     e  ->  {0, +, 1}_2
!    b  ->  {{2, +, 0, +, 10}_1, +, {0, +, 1}_1}_2
     d  ->  {5, +, 9}_1
!    a  ->  {1, +, 7, +, 9, +, 10}_1
  */
  
  /* { dg-final { diff-tree-dumps "scev" } } */
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-43.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-43.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-43.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-43.c.scev	9 Jan 2004 12:15:54 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-43.c.scev	15 Jan 2004 12:27:11 -0000
*************** c
*** 16,25 ****
    ->  {0, +, 1}_1
  
  b
!   ->  {{2, +, {0, +, 10}_1}_1, +, {0, +, 1}_1}_2
  
  a
!   ->  {1, +, {{7, +, {9, +, 10}_1}_1, +, {0, +, 1}_1}_2}_1
  
  
  
--- 16,25 ----
    ->  {0, +, 1}_1
  
  b
!   ->  {{{2, +, 0}_1, +, 10}_1, +, {0, +, 1}_1}_2
  
  a
!   ->  {{{1, +, 7}_1, +, 9}_1, +, 10}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-44.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-44.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-44.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-44.c.scev	9 Jan 2004 12:15:54 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-44.c.scev	15 Jan 2004 12:27:11 -0000
*************** T.2
*** 9,15 ****
    ->  {(0.0 + -1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1, +, -1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1}_1
  
  altitude
!   ->  {3.0e+3, +, {(0.0 + -1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1, +, -1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1}_1}_1
  
  
  
--- 9,15 ----
    ->  {(0.0 + -1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1, +, -1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1}_1
  
  altitude
!   ->  {{3.0e+3, +, (0.0 + -1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1}_1, +, -1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-45.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-45.c.scev,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 ssa-chrec-45.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-45.c.scev	9 Jan 2004 12:15:54 -0000	1.1.2.2
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-45.c.scev	15 Jan 2004 12:27:11 -0000
*************** T.2
*** 9,15 ****
    ->  {(0.0 + 1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1, +, 1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1}_1
  
  altitude
!   ->  {3.0e+3, +, {(0.0 + 1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1 * -1, +, 1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1 * -1}_1}_1
  
  
  
--- 9,15 ----
    ->  {(0.0 + 1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1, +, 1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1}_1
  
  altitude
!   ->  {{3.0e+3, +, (0.0 + 1.0e+0) * 1.00000000000000005551115123125782702118158340454e-1 * -1}_1, +, 1.0e+0 * 1.00000000000000005551115123125782702118158340454e-1 * -1}_1
  
  
  
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c.alldd
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-53.c.alldd,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-53.c.alldd
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c.alldd	12 Jan 2004 14:40:10 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c.alldd	15 Jan 2004 12:27:11 -0000
***************
*** 2,73 ****
    stmt: T.1_522 = b[i_1];
    ref: b[i_1];
    base_name: b
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 1: 
    stmt: a[i_1] = T.1_522;
    ref: a[i_1];
    base_name: a
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 2: 
    stmt: T.1_519 = b[i_2];
    ref: b[i_2];
    base_name: b
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 3: 
    stmt: a[i_2] = T.1_519;
    ref: a[i_2];
    base_name: a
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 4: 
    stmt: T.2_516 = db[i_3];
    ref: db[i_3];
    base_name: db
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 5: 
    stmt: da[i_3] = T.2_516;
    ref: da[i_3];
    base_name: da
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 6: 
    stmt: a[i_4] = 5.0e+0;
    ref: a[i_4];
    base_name: a
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 7: 
    stmt: T.1_507 = b[i_5];
    ref: b[i_5];
    base_name: b
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 8: 
    stmt: T.3_508 = c[i_5];
    ref: c[i_5];
    base_name: c
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  (Data Ref 9: 
    stmt: T.5_510 = d[i_5];
    ref: d[i_5];
    base_name: d
!   Access function 0: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  )
  
  (Data Dep (A = 0, B = 0):
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 2,73 ----
    stmt: T.1_522 = b[i_1];
    ref: b[i_1];
    base_name: b
!   Access function 0: {0, +, 1}_1
  )
  (Data Ref 1: 
    stmt: a[i_1] = T.1_522;
    ref: a[i_1];
    base_name: a
!   Access function 0: {0, +, 1}_1
  )
  (Data Ref 2: 
    stmt: T.1_519 = b[i_2];
    ref: b[i_2];
    base_name: b
!   Access function 0: {0, +, 1}_2
  )
  (Data Ref 3: 
    stmt: a[i_2] = T.1_519;
    ref: a[i_2];
    base_name: a
!   Access function 0: {0, +, 1}_2
  )
  (Data Ref 4: 
    stmt: T.2_516 = db[i_3];
    ref: db[i_3];
    base_name: db
!   Access function 0: {0, +, 1}_3
  )
  (Data Ref 5: 
    stmt: da[i_3] = T.2_516;
    ref: da[i_3];
    base_name: da
!   Access function 0: {0, +, 1}_3
  )
  (Data Ref 6: 
    stmt: a[i_4] = 5.0e+0;
    ref: a[i_4];
    base_name: a
!   Access function 0: {0, +, 1}_4
  )
  (Data Ref 7: 
    stmt: T.1_507 = b[i_5];
    ref: b[i_5];
    base_name: b
!   Access function 0: {0, +, 1}_5
  )
  (Data Ref 8: 
    stmt: T.3_508 = c[i_5];
    ref: c[i_5];
    base_name: c
!   Access function 0: {0, +, 1}_5
  )
  (Data Ref 9: 
    stmt: T.5_510 = d[i_5];
    ref: d[i_5];
    base_name: d
!   Access function 0: {0, +, 1}_5
  )
  
  (Data Dep (A = 0, B = 0):
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_1
!   access_fn_B: {0, +, 1}_1
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 86,104 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 86,104 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_1
!   access_fn_B: {0, +, 1}_2
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 118,136 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 118,136 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_1
!   access_fn_B: {0, +, 1}_5
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 147,157 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 147,157 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_1
!   access_fn_B: {0, +, 1}_1
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 170,188 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 170,188 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_1
!   access_fn_B: {0, +, 1}_2
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 196,214 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 196,214 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_1
!   access_fn_B: {0, +, 1}_4
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_4
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 225,243 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 225,243 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_2
!   access_fn_B: {0, +, 1}_1
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 248,258 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 248,258 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_2
!   access_fn_B: {0, +, 1}_2
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 280,298 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 280,298 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_2
!   access_fn_B: {0, +, 1}_5
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 309,327 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 309,327 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_2
!   access_fn_B: {0, +, 1}_1
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 332,342 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 332,342 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_2
!   access_fn_B: {0, +, 1}_2
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 358,376 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 358,376 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_2
!   access_fn_B: {0, +, 1}_4
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_4
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 399,409 ****
   (subscript 0:
    base_name_A: db
    base_name_B: db
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 399,409 ----
   (subscript 0:
    base_name_A: db
    base_name_B: db
!   access_fn_A: {0, +, 1}_3
!   access_fn_B: {0, +, 1}_3
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_3
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_3
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 449,459 ****
   (subscript 0:
    base_name_A: da
    base_name_B: da
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 449,459 ----
   (subscript 0:
    base_name_A: da
    base_name_B: da
!   access_fn_A: {0, +, 1}_3
!   access_fn_B: {0, +, 1}_3
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_3
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_3
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 484,502 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 484,502 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_4
!   access_fn_B: {0, +, 1}_1
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_4
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 507,525 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 507,525 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_4
!   access_fn_B: {0, +, 1}_2
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_4
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 533,543 ****
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 533,543 ----
   (subscript 0:
    base_name_A: a
    base_name_B: a
!   access_fn_A: {0, +, 1}_4
!   access_fn_B: {0, +, 1}_4
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_4
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_4
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 562,580 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 562,580 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_5
!   access_fn_B: {0, +, 1}_1
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_1
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 585,603 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! (0
  )
   )
   (Direction Vector: 
! (=)
   )
  
  )
--- 585,603 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_5
!   access_fn_B: {0, +, 1}_2
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_2
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
! ([-oo, +oo]
  )
   )
   (Direction Vector: 
! (*)
   )
  
  )
***************
*** 617,627 ****
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 617,627 ----
   (subscript 0:
    base_name_A: b
    base_name_B: b
!   access_fn_A: {0, +, 1}_5
!   access_fn_B: {0, +, 1}_5
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 667,677 ****
   (subscript 0:
    base_name_A: c
    base_name_B: c
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 667,677 ----
   (subscript 0:
    base_name_A: c
    base_name_B: c
!   access_fn_A: {0, +, 1}_5
!   access_fn_B: {0, +, 1}_5
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
***************
*** 717,727 ****
   (subscript 0:
    base_name_A: d
    base_name_B: d
!   access_fn_A: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   access_fn_B: {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
!   iterations_that_access_an_element_twice_in_A: 0
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: 0
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
--- 717,727 ----
   (subscript 0:
    base_name_A: d
    base_name_B: d
!   access_fn_A: {0, +, 1}_5
!   access_fn_B: {0, +, 1}_5
!   iterations_that_access_an_element_twice_in_A: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_A: [-oo, +oo]
!   iterations_that_access_an_element_twice_in_B: {0, +, 1}_5
    last_iteration_that_access_an_element_twice_in_B: [-oo, +oo]
   )
   (Distance Vector: 
Index: testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c.scev
===================================================================
RCS file: /cvs/gcc/gcc/gcc/testsuite/gcc.dg/tree-ssa-chrec/Attic/ssa-chrec-53.c.scev,v
retrieving revision 1.1.2.1
diff -c -3 -p -r1.1.2.1 ssa-chrec-53.c.scev
*** testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c.scev	12 Jan 2004 14:40:10 -0000	1.1.2.1
--- testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c.scev	15 Jan 2004 12:27:11 -0000
*************** T.35
*** 104,144 ****
    ->  {{{{{{{{{{{{{i_14 + 1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13
  
  i
!   ->  {0, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  
  
  
    Scalar evolution functions: 
  
  T.8
!   ->  {8, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  
  
  
    Scalar evolution functions: 
  
  T.8
!   ->  {8, +, {{{{{{{{{{{{{1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13}_14
  
  
  
    Scalar evolution functions: 
  
  T.16
!   ->  {0, +, {{{{{{{{{{{{{2, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13}_14
  
  T.17
!   ->  {1, +, {{{{{{{{{{{{{2, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13}_14
  
  
  
    Scalar evolution functions: 
  
  T.16
!   ->  {0, +, {{{{{{{{{{{{{2, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13}_14
  
  T.17
!   ->  {1, +, {{{{{{{{{{{{{2, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13}_14
  
  
  
--- 104,144 ----
    ->  {{{{{{{{{{{{{i_14 + 1, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13
  
  i
!   ->  {{{{{{{{{{{{{{0, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13, +, 1}_14
  
  
  
    Scalar evolution functions: 
  
  T.8
!   ->  {{{{{{{{{{{{{{8, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13, +, 1}_14
  
  
  
    Scalar evolution functions: 
  
  T.8
!   ->  {{{{{{{{{{{{{{8, +, 1}_1, +, 1}_2, +, 1}_3, +, 1}_4, +, 1}_5, +, 1}_6, +, 1}_7, +, 1}_8, +, 1}_9, +, 1}_10, +, 1}_11, +, 1}_12, +, 1}_13, +, 1}_14
  
  
  
    Scalar evolution functions: 
  
  T.16
!   ->  {{{{{{{{{{{{{{0, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13, +, 2}_14
  
  T.17
!   ->  {{{{{{{{{{{{{{1, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13, +, 2}_14
  
  
  
    Scalar evolution functions: 
  
  T.16
!   ->  {{{{{{{{{{{{{{0, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13, +, 2}_14
  
  T.17
!   ->  {{{{{{{{{{{{{{1, +, 2}_1, +, 2}_2, +, 2}_3, +, 2}_4, +, 2}_5, +, 2}_6, +, 2}_7, +, 2}_8, +, 2}_9, +, 2}_10, +, 2}_11, +, 2}_12, +, 2}_13, +, 2}_14
  
  
  



More information about the Gcc-patches mailing list