aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2010-09-10 10:27:59 +0000
committerMikael Morin <mikael@gcc.gnu.org>2010-09-10 10:27:59 +0000
commitaf80460358e29d5051bebf3046765412f88574da (patch)
tree9ce91523375547791e16ad631e0ccf0bca1c1f59 /gcc/fortran/trans-array.c
parent3c1ecd7e8afd90a487bbbdf720ec4f3d1ed9b6fc (diff)
downloadgcc-af80460358e29d5051bebf3046765412f88574da.zip
gcc-af80460358e29d5051bebf3046765412f88574da.tar.gz
gcc-af80460358e29d5051bebf3046765412f88574da.tar.bz2
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
Diffstat (limited to 'gcc/fortran/trans-array.c')
-rw-r--r--gcc/fortran/trans-array.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 44c47d7..cd5f438 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -3577,6 +3577,7 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
gfc_ref *lref;
gfc_ref *rref;
int nDepend = 0;
+ int i, j;
loop->temp_ss = NULL;
@@ -3603,6 +3604,17 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
if (nDepend == 1)
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
/* TODO : loop shifting. */
if (nDepend == 1)
@@ -3641,6 +3653,8 @@ gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest,
}
}
+temporary:
+
if (nDepend == 1)
{
tree base_type = gfc_typenode_for_spec (&dest->expr->ts);