Commit 9d758043 by Mikael Morin

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
parent 06cd4e1b
2011-11-03 Mikael Morin <mikael@gcc.gnu.org> 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. * trans-array.c (gfc_trans_create_temp_array): Loop over the parents.
2011-11-03 Mikael Morin <mikael@gcc.gnu.org> 2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
......
...@@ -645,6 +645,7 @@ void ...@@ -645,6 +645,7 @@ void
gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head) gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head)
{ {
gfc_ss *ss; gfc_ss *ss;
gfc_loopinfo *nested_loop;
if (head == gfc_ss_terminator) if (head == gfc_ss_terminator)
return; return;
...@@ -654,6 +655,21 @@ gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head) ...@@ -654,6 +655,21 @@ gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head)
ss = head; ss = head;
for (; ss && ss != gfc_ss_terminator; ss = ss->next) 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) if (ss->next == gfc_ss_terminator)
ss->loop_chain = loop->ss; ss->loop_chain = loop->ss;
else else
......
...@@ -279,6 +279,9 @@ typedef struct gfc_loopinfo ...@@ -279,6 +279,9 @@ typedef struct gfc_loopinfo
/* The SS describing the temporary used in an assignment. */ /* The SS describing the temporary used in an assignment. */
gfc_ss *temp_ss; gfc_ss *temp_ss;
/* Chain of nested loops. */
struct gfc_loopinfo *nested, *next;
/* The scalarization loop index variables. */ /* The scalarization loop index variables. */
tree loopvar[GFC_MAX_DIMENSIONS]; tree loopvar[GFC_MAX_DIMENSIONS];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment