Commit af804603 by Mikael Morin

trans-array.c (gfc_conv_resolve_dependencies): Handle same-array transposed references.

2010-09-10  Mikael Morin  <mikael@gcc.gnu.org>

	* trans-array.c (gfc_conv_resolve_dependencies): Handle same-array
	transposed references.

From-SVN: r164158
parent 3c1ecd7e
2010-09-10 Mikael Morin <mikael@gcc.gnu.org>
* trans-array.c (gfc_conv_resolve_dependencies): Handle same-array
transposed references.
2010-09-10 Tobias Burnus <burnus@net-b.de> 2010-09-10 Tobias Burnus <burnus@net-b.de>
PR fortran/45186 PR fortran/45186
......
...@@ -3577,6 +3577,7 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest, ...@@ -3577,6 +3577,7 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
gfc_ref *lref; gfc_ref *lref;
gfc_ref *rref; gfc_ref *rref;
int nDepend = 0; int nDepend = 0;
int i, j;
loop->temp_ss = NULL; loop->temp_ss = NULL;
...@@ -3603,6 +3604,17 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest, ...@@ -3603,6 +3604,17 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
if (nDepend == 1) if (nDepend == 1)
break; break;
for (i = 0; i < dest->data.info.dimen; i++)
for (j = 0; j < ss->data.info.dimen; j++)
if (i != j
&& dest->data.info.dim[i] == ss->data.info.dim[j])
{
/* If we don't access array elements in the same order,
there is a dependency. */
nDepend = 1;
goto temporary;
}
#if 0 #if 0
/* TODO : loop shifting. */ /* TODO : loop shifting. */
if (nDepend == 1) if (nDepend == 1)
...@@ -3641,6 +3653,8 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest, ...@@ -3641,6 +3653,8 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
} }
} }
temporary:
if (nDepend == 1) if (nDepend == 1)
{ {
tree base_type = gfc_typenode_for_spec (&dest->expr->ts); tree base_type = gfc_typenode_for_spec (&dest->expr->ts);
......
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