]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/34706 (FE should reuse array temporaries, reduce temporaties and tell...
authorRichard Guenther <rguenther@suse.de>
Tue, 8 Jan 2008 21:21:29 +0000 (21:21 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 8 Jan 2008 21:21:29 +0000 (21:21 +0000)
2008-01-08  Richard Guenther  <rguenther@suse.de>

PR fortran/34706
PR tree-optimization/34683
* trans-types.c (gfc_get_array_type_bounds): Use an array type
with known size for accesses if that is known.

From-SVN: r131404

gcc/fortran/ChangeLog
gcc/fortran/trans-types.c

index 40c98afa2c3418db514ee365cea36e1532d4233d..e96f612d2002737e9d09169f3094064cb94f2466 100644 (file)
@@ -1,3 +1,10 @@
+2008-01-08  Richard Guenther  <rguenther@suse.de>
+
+       PR fortran/34706
+       PR tree-optimization/34683
+       * trans-types.c (gfc_get_array_type_bounds): Use an array type
+       with known size for accesses if that is known.
+
 2008-01-08  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/34476
index 2d10ddad080dedaf8062f428db32cfffb3935cfc..67eaf041c23f9292f982d6b5f602cd2d5e416eac 100644 (file)
@@ -1436,7 +1436,7 @@ gfc_get_array_type_bounds (tree etype, int dimen, tree * lbound,
                           enum gfc_array_kind akind)
 {
   char name[8 + GFC_RANK_DIGITS + GFC_MAX_SYMBOL_LEN];
-  tree fat_type, base_type, arraytype, lower, upper, stride, tmp;
+  tree fat_type, base_type, arraytype, lower, upper, stride, tmp, rtype;
   const char *typename;
   int n;
 
@@ -1511,10 +1511,15 @@ gfc_get_array_type_bounds (tree etype, int dimen, tree * lbound,
   /* TODO: known offsets for descriptors.  */
   GFC_TYPE_ARRAY_OFFSET (fat_type) = NULL_TREE;
 
-  /* We define data as an unknown size array. Much better than doing
-     pointer arithmetic.  */
-  arraytype =
-    build_array_type (etype, gfc_array_range_type);
+  /* We define data as an array with the correct size if possible.
+     Much better than doing pointer arithmetic.  */
+  if (stride)
+    rtype = build_range_type (gfc_array_index_type, gfc_index_zero_node,
+                             int_const_binop (MINUS_EXPR, stride,
+                                              integer_one_node, 0));
+  else
+    rtype = gfc_array_range_type;
+  arraytype = build_array_type (etype, rtype);
   arraytype = build_pointer_type (arraytype);
   GFC_TYPE_ARRAY_DATAPTR_TYPE (fat_type) = arraytype;