aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2011-11-03 23:39:11 +0000
committerMikael Morin <mikael@gcc.gnu.org>2011-11-03 23:39:11 +0000
commit9d75804367cd7c3aac109d33a98f3a038cbe8020 (patch)
tree8ab21cd593692c98e71455dfbf71efa9255df198 /gcc/fortran/trans-array.c
parent06cd4e1b5a55cecb1e19a0302608859429853a12 (diff)
downloadgcc-9d75804367cd7c3aac109d33a98f3a038cbe8020.zip
gcc-9d75804367cd7c3aac109d33a98f3a038cbe8020.tar.gz
gcc-9d75804367cd7c3aac109d33a98f3a038cbe8020.tar.bz2
trans.h (struct gfc_loopinfo): New fields nested and next.
* trans.h (struct gfc_loopinfo): New fields nested and next. * trans-array.c (gfc_add_ss_to_loop): Update list of nested list if ss has non-null nested_ss field. From-SVN: r180897
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r--gcc/fortran/trans-array.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 1a86ae6..0c1dc89 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -645,6 +645,7 @@ void
gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head)
{
gfc_ss *ss;
+ gfc_loopinfo *nested_loop;
if (head == gfc_ss_terminator)
return;
@@ -654,6 +655,21 @@ gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head)
ss = head;
for (; ss && ss != gfc_ss_terminator; ss = ss->next)
{
+ if (ss->nested_ss)
+ {
+ nested_loop = ss->nested_ss->loop;
+
+ /* More than one ss can belong to the same loop. Hence, we add the
+ loop to the chain only if it is different from the previously
+ added one, to avoid duplicate nested loops. */
+ if (nested_loop != loop->nested)
+ {
+ gcc_assert (nested_loop->next == NULL);
+ nested_loop->next = loop->nested;
+ loop->nested = nested_loop;
+ }
+ }
+
if (ss->next == gfc_ss_terminator)
ss->loop_chain = loop->ss;
else