diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-03 22:54:37 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2011-11-03 22:54:37 +0000 |
commit | 4615abe8569bedef58b8400e881cf10a49e5383c (patch) | |
tree | 76d69fd45ec296d10eee88ad7f8b62be67d52f31 /gcc/fortran/trans-array.c | |
parent | c7bf4f1e646ac15f269ac01128c75cccc2bb05bf (diff) | |
download | gcc-4615abe8569bedef58b8400e881cf10a49e5383c.zip gcc-4615abe8569bedef58b8400e881cf10a49e5383c.tar.gz gcc-4615abe8569bedef58b8400e881cf10a49e5383c.tar.bz2 |
trans.h (struct gfc_ss): New field loop.
* 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
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r-- | gcc/fortran/trans-array.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index abb6db2..e64767a 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -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) { |