]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
trans.h (struct gfc_ss): New field loop.
authorMikael Morin <mikael@gcc.gnu.org>
Thu, 3 Nov 2011 22:54:37 +0000 (22:54 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Thu, 3 Nov 2011 22:54:37 +0000 (22:54 +0000)
* trans.h (struct gfc_ss): New field loop.
* trans-array.c (set_ss_loop): New function.
(gfc_add_ss_to_loop): Call set_ss_loop.

From-SVN: r180884

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

index d014b9d97db93829ffcc62a1801f9c8ae6ddf0a3..57d62be36c1ab20723f79b6c5c2bf69c1ac2aad0 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-03  Mikael Morin  <mikael@gcc.gnu.org>
+
+       * trans.h (struct gfc_ss): New field loop.
+       * trans-array.c (set_ss_loop): New function.
+       (gfc_add_ss_to_loop): Call set_ss_loop.
+
 2011-11-03  Mikael Morin  <mikael@gcc.gnu.org>
 
        * trans.h (struct gfc_ss_info): New field refcount.
index abb6db2a97fc390d0aa6bc90c1c9da3f66dc4a14..e64767a201060cf7c2b1adb7934b0e5d39469aa2 100644 (file)
@@ -618,6 +618,27 @@ gfc_cleanup_loop (gfc_loopinfo * loop)
 }
 
 
+static void
+set_ss_loop (gfc_ss *ss, gfc_loopinfo *loop)
+{
+  int n;
+
+  for (; ss != gfc_ss_terminator; ss = ss->next)
+    {
+      ss->loop = loop;
+
+      if (ss->info->type == GFC_SS_SCALAR
+         || ss->info->type == GFC_SS_REFERENCE
+         || ss->info->type == GFC_SS_TEMP)
+       continue;
+
+      for (n = 0; n < GFC_MAX_DIMENSIONS; n++)
+       if (ss->info->data.array.subscript[n] != NULL)
+         set_ss_loop (ss->info->data.array.subscript[n], loop);
+    }
+}
+
+
 /* Associate a SS chain with a loop.  */
 
 void
@@ -628,6 +649,8 @@ gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head)
   if (head == gfc_ss_terminator)
     return;
 
+  set_ss_loop (head, loop);
+
   ss = head;
   for (; ss && ss != gfc_ss_terminator; ss = ss->next)
     {
index 02f2b422f07b3efe7e427530ef57d8e31aaf5edc..62bcc643fb531e2c536ca1dcd9c7140c95e3f75c 100644 (file)
@@ -246,6 +246,9 @@ typedef struct gfc_ss
   struct gfc_ss *loop_chain;
   struct gfc_ss *next;
 
+  /* The loop this gfc_ss is in.  */
+  struct gfc_loopinfo *loop;
+
   unsigned is_alloc_lhs:1;
 }
 gfc_ss;