]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
trans-array.c (gfc_conv_array_index_offset): Avoid multiplying index by one, or addin...
authorRoger Sayle <roger@eyesopen.com>
Mon, 18 Dec 2006 19:34:23 +0000 (19:34 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Mon, 18 Dec 2006 19:34:23 +0000 (19:34 +0000)
* trans-array.c (gfc_conv_array_index_offset): Avoid multiplying
index by one, or adding zero to it.

From-SVN: r120011

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

index a7e26077f85231db37b61e6df61f5331485f84c2..7bf9577d73609bea9ba6b07aef1e7823edc05cc1 100644 (file)
@@ -1,3 +1,8 @@
+2006-12-18  Roger Sayle  <roger@eyesopen.com>
+
+       * trans-array.c (gfc_conv_array_index_offset): Avoid multiplying
+       index by one, or adding zero to it.
+
 2006-12-17  Roger Sayle  <roger@eyesopen.com>
 
        PR fortran/30207
index 23163d5332d75c451b82ade73838a632dfb80974..085898866e0d9c972e495a956a7fce8d12291b9d 100644 (file)
@@ -1985,10 +1985,12 @@ gfc_conv_array_index_offset (gfc_se * se, gfc_ss_info * info, int dim, int i,
 
           /* Multiply the loop variable by the stride and delta.  */
          index = se->loop->loopvar[i];
-         index = fold_build2 (MULT_EXPR, gfc_array_index_type, index,
-                              info->stride[i]);
-         index = fold_build2 (PLUS_EXPR, gfc_array_index_type, index,
-                              info->delta[i]);
+         if (!integer_onep (info->stride[i]))
+           index = fold_build2 (MULT_EXPR, gfc_array_index_type, index,
+                                info->stride[i]);
+         if (!integer_zerop (info->delta[i]))
+           index = fold_build2 (PLUS_EXPR, gfc_array_index_type, index,
+                                info->delta[i]);
          break;
 
        default:
@@ -2006,7 +2008,8 @@ gfc_conv_array_index_offset (gfc_se * se, gfc_ss_info * info, int dim, int i,
     }
 
   /* Multiply by the stride.  */
-  index = fold_build2 (MULT_EXPR, gfc_array_index_type, index, stride);
+  if (!integer_onep (stride))
+    index = fold_build2 (MULT_EXPR, gfc_array_index_type, index, stride);
 
   return index;
 }