]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Don't calculate offset twice in...
authorMikael Morin <mikael@gcc.gnu.org>
Fri, 4 Nov 2011 00:05:51 +0000 (00:05 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Fri, 4 Nov 2011 00:05:51 +0000 (00:05 +0000)
* trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Don't calculate
offset twice in generated code.

From-SVN: r180907

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

index 0cebe5fee67c9b498c4282be6ec358ba3e7b963d..07eff72a87df6274b74cacf5440d18b1336bd2aa 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-04  Mikael Morin  <mikael@gcc.gnu.org>
+
+       * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Don't calculate
+       offset twice in generated code.
+
 2011-11-04  Mikael Morin  <mikael@gcc.gnu.org>
 
        * trans-expr.c (gfc_conv_procedure_call): Handle temporaries for
index c3a414b789b1ffa9b65c4af99b734af11e88f67e..ee162eac6e5ca819c2c3b11833508767b961e165 100644 (file)
@@ -3090,6 +3090,14 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
       TREE_USED (lab2) = 1;
     }
 
+  /* An offset must be added to the loop
+     counter to obtain the required position.  */
+  gcc_assert (loop.from[0]);
+
+  tmp = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
+                        gfc_index_one_node, loop.from[0]);
+  gfc_add_modify (&loop.pre, offset, tmp);
+
   gfc_mark_ss_chain_used (arrayss, 1);
   if (maskss)
     gfc_mark_ss_chain_used (maskss, 1);
@@ -3123,16 +3131,6 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
   /* Assign the value to the limit...  */
   gfc_add_modify (&ifblock, limit, arrayse.expr);
 
-  /* Remember where we are.  An offset must be added to the loop
-     counter to obtain the required position.  */
-  if (loop.from[0])
-    tmp = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-                          gfc_index_one_node, loop.from[0]);
-  else
-    tmp = gfc_index_one_node;
-
-  gfc_add_modify (&block, offset, tmp);
-
   if (nonempty == NULL && HONOR_NANS (DECL_MODE (limit)))
     {
       stmtblock_t ifblock2;
@@ -3232,16 +3230,6 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op)
       /* Assign the value to the limit...  */
       gfc_add_modify (&ifblock, limit, arrayse.expr);
 
-      /* Remember where we are.  An offset must be added to the loop
-        counter to obtain the required position.  */
-      if (loop.from[0])
-       tmp = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-                              gfc_index_one_node, loop.from[0]);
-      else
-       tmp = gfc_index_one_node;
-
-      gfc_add_modify (&block, offset, tmp);
-
       tmp = fold_build2_loc (input_location, PLUS_EXPR, TREE_TYPE (pos),
                             loop.loopvar[0], offset);
       gfc_add_modify (&ifblock, pos, tmp);