From af80460358e29d5051bebf3046765412f88574da Mon Sep 17 00:00:00 2001 From: Mikael Morin Date: Fri, 10 Sep 2010 10:27:59 +0000 Subject: [PATCH] trans-array.c (gfc_conv_resolve_dependencies): Handle same-array transposed references. 2010-09-10 Mikael Morin * trans-array.c (gfc_conv_resolve_dependencies): Handle same-array transposed references. From-SVN: r164158 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/trans-array.c | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f7f5272f0d92..daf4cd6dbe64 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2010-09-10 Mikael Morin + + * trans-array.c (gfc_conv_resolve_dependencies): Handle same-array + transposed references. + 2010-09-10 Tobias Burnus PR fortran/45186 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 44c47d776cdb..cd5f4384042d 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); -- 2.47.2