diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-03 23:39:11 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-03 23:39:11 +0000 |
commit | 9d75804367cd7c3aac109d33a98f3a038cbe8020 (patch) | |
tree | 8ab21cd593692c98e71455dfbf71efa9255df198 /gcc/fortran/trans-array.c | |
parent | 06cd4e1b5a55cecb1e19a0302608859429853a12 (diff) | |
download | gcc-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.c | 16 |
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 |