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
This commit is contained in:
Mikael Morin 2011-11-03 23:39:11 +00:00
parent 06cd4e1b5a
commit 9d75804367
3 changed files with 25 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
* 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.
2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
* trans-array.c (gfc_trans_create_temp_array): Loop over the parents.

View File

@ -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

View File

@ -279,6 +279,9 @@ typedef struct gfc_loopinfo
/* The SS describing the temporary used in an assignment. */
gfc_ss *temp_ss;
/* Chain of nested loops. */
struct gfc_loopinfo *nested, *next;
/* The scalarization loop index variables. */
tree loopvar[GFC_MAX_DIMENSIONS];