From: Mikael Morin Date: Thu, 3 Nov 2011 22:54:37 +0000 (+0000) Subject: trans.h (struct gfc_ss): New field loop. X-Git-Tag: releases/gcc-4.7.0~2552 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4615abe8569bedef58b8400e881cf10a49e5383c;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d014b9d97db9..57d62be36c1a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2011-11-03 Mikael Morin + + * 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 * trans.h (struct gfc_ss_info): New field refcount. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index abb6db2a97fc..e64767a20106 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) { diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 02f2b422f07b..62bcc643fb53 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -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;