SOURCES: gcc-pr23386.patch (NEW) - critical bugfix.

pluto pluto at pld-linux.org
Mon Aug 15 10:00:18 CEST 2005


Author: pluto                        Date: Mon Aug 15 08:00:18 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- critical bugfix.

---- Files affected:
SOURCES:
   gcc-pr23386.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/gcc-pr23386.patch
diff -u /dev/null SOURCES/gcc-pr23386.patch:1.1
--- /dev/null	Mon Aug 15 10:00:18 2005
+++ SOURCES/gcc-pr23386.patch	Mon Aug 15 10:00:13 2005
@@ -0,0 +1,44 @@
+--- gcc/gcc/tree-data-ref.c	2005/08/14 06:28:03	2.37
++++ gcc/gcc/tree-data-ref.c	2005/08/15 07:51:39	2.38
+@@ -751,7 +751,7 @@
+ 				  tree access_fn, 
+ 				  tree stmt)
+ {
+-  tree estimation;
++  tree estimation = NULL_TREE;
+   tree array_size, data_size, element_size;
+   tree init, step;
+ 
+@@ -773,11 +773,28 @@
+       && TREE_CODE (init) == INTEGER_CST
+       && TREE_CODE (step) == INTEGER_CST)
+     {
+-      estimation = fold_build2 (CEIL_DIV_EXPR, integer_type_node,
+-				fold_build2 (MINUS_EXPR, integer_type_node,
+-					     data_size, init), step);
++      tree i_plus_s = fold_build2 (PLUS_EXPR, integer_type_node, init, step);
++      tree sign = fold_build2 (GT_EXPR, boolean_type_node, i_plus_s, init);
+ 
+-      record_estimate (loop, estimation, boolean_true_node, stmt);
++      if (sign == boolean_true_node)
++	estimation = fold_build2 (CEIL_DIV_EXPR, integer_type_node,
++				  fold_build2 (MINUS_EXPR, integer_type_node,
++					       data_size, init), step);
++
++      /* When the step is negative, as in PR23386: (init = 3, step =
++	 0ffffffff, data_size = 100), we have to compute the
++	 estimation as ceil_div (init, 0 - step) + 1.  */
++      else if (sign == boolean_false_node)
++	estimation = 
++	  fold_build2 (PLUS_EXPR, integer_type_node,
++		       fold_build2 (CEIL_DIV_EXPR, integer_type_node,
++				    init,
++				    fold_build2 (MINUS_EXPR, unsigned_type_node,
++						 integer_zero_node, step)),
++		       integer_one_node);
++
++      if (estimation)
++	record_estimate (loop, estimation, boolean_true_node, stmt);
+     }
+ }
+ 
================================================================



More information about the pld-cvs-commit mailing list