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>
* 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.
2011-11-03 Mikael Morin <mikael@gcc.gnu.org>
......
......@@ -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
......
......@@ -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];
......
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