commit 76b773a4a2d1daf0b83e50cd999bc38f8dd047be
Author: Tobias Burnus <tobias@codesourcery.com>
Date: Wed Oct 19 15:53:25 2022 +0200
Fortran: Fix delinearization regression
The delinearization patch "Fortran: delinearize multi-dimensional array
accesses", OG12 commit 39a8c371fda6136cf77c74895a00b136409e0ba3 uses
gfc_build_array_ref for the non-delinearization path. The generated
code depends on whether there can be negative strides or not, an
addition to that function in r12-8230-g7964ab6c364 - adding a Boolean
argument.
The follow-up OG12 commit "Fix Fortran array-access regressions",
9fb0076b11eb2774b620bcf2171d55c7d1fb899f also added this argument
to the call in gfc_conv_array_ref, but always evaluating as false.
This commit changes it to a call to non_negative_strides_array_p
(Note: for 'se->expr' not 'base'; the former could be 'arraydesc'
while the later is then 'arraydesc.data' whose TREE_TYPE does not
contain information about the array type.)
However, doing so revealed a bug in non_negative_strides_array_p,
fixed in this commit but also submitted as "Fortran: Fix
non_negative_strides_array_p" to mainline,
https://gcc.gnu.org/pipermail/gcc-patches/2022-October/603883.html
As a side effect of this commit, several testcases now pass and the
OG12-only changes to depend-{4,5,6}.f90 and affinity-clause-1.f90
could be undone, except that the latter now uses the delinearized
array syntax in one case, which is an improvement (as honored in
the scan-dump-tree). Hence, this commit (partially) reverts the
commits:
21c806f73fc gfortran.dg/gomp/{depend-5,scope-6}.f90: Update scan-tree-dump
014fc7cd451 Fix dg- pattern for gomp/{affinity-clause-1.f90,uses_allocators-3.f90}
2d8aa5cc5d3 gfortran.dg/gomp/depend-6.f90: minor fix + dump update
d77133b29fc gfortran.dg/gomp/depend-4.f90: minor fix + dump update
The main testcase for non_negative_strides_array_p is
gfortran.dg/array_reference_3.f90, which now also passes as well.
Additionally, this changes prevents some unintended implicit
mapping such that libgomp.fortran/map-alloc-comp-{4,6}.f90 failed
before - and now passes again.
---
gcc/fortran/trans-array.cc | 18 ++++--
.../gfortran.dg/gomp/affinity-clause-1.f90 | 6 +-
gcc/testsuite/gfortran.dg/gomp/depend-4.f90 | 74 +++++++++++-----------
gcc/testsuite/gfortran.dg/gomp/depend-5.f90 | 13 ++--
gcc/testsuite/gfortran.dg/gomp/depend-6.f90 | 72 ++++++++++-----------
5 files changed, 91 insertions(+), 92 deletions(-)
@@ -3703,11 +3703,16 @@ non_negative_strides_array_p (tree expr)
/* If the array was originally a dummy with a descriptor, strides can be
negative. */
- if (DECL_P (expr)
- && DECL_LANG_SPECIFIC (expr)
- && GFC_DECL_SAVED_DESCRIPTOR (expr)
- && GFC_DECL_SAVED_DESCRIPTOR (expr) != expr)
- return non_negative_strides_array_p (GFC_DECL_SAVED_DESCRIPTOR (expr));
+ tree decl = expr;
+ STRIP_NOPS (decl);
+ if (TREE_CODE (decl) == INDIRECT_REF)
+ decl = TREE_OPERAND (decl, 0);
+
+ if (DECL_P (decl)
+ && DECL_LANG_SPECIFIC (decl)
+ && GFC_DECL_SAVED_DESCRIPTOR (decl)
+ && GFC_DECL_SAVED_DESCRIPTOR (decl) != expr)
+ return non_negative_strides_array_p (GFC_DECL_SAVED_DESCRIPTOR (decl));
return true;
}
@@ -4200,12 +4205,13 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_expr *expr,
{
/* Build a linearized array reference using the offset from all
dimensions. */
+ bool non_neg = non_negative_strides_array_p (se->expr);
if (!integer_zerop (cst_offset))
offset = fold_build2_loc (input_location, PLUS_EXPR,
gfc_array_index_type, offset, cst_offset);
se->class_vptr = vptr;
vptr = get_class_array_vptr (se->expr, vptr);
- se->expr = gfc_build_array_ref (base, offset, cooked_decl, false, vptr);
+ se->expr = gfc_build_array_ref (base, offset, cooked_decl, non_neg, vptr);
}
else
/* Return the outermost ARRAY_REF we already built. */
@@ -22,7 +22,7 @@ end
! { dg-final { scan-tree-dump-times "D\\.\[0-9\]+ = .integer.kind=4.. __builtin_cosf ..real.kind=4.. a \\+ 1.0e\\+0\\);" 2 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task affinity\\(iterator\\(integer\\(kind=4\\) jj=2:5:2, integer\\(kind=4\\) i=D\\.\[0-9\]+:5:1\\):\\*\\(\\(integer\\(kind=4\\) \\*\\) &b \\+ \\(sizetype\\) \\(\\(\[^ \]*(?:<| )i(?:>|) \\+ -1\\) \\* 4\\)\\)\\) affinity\\(iterator\\(integer\\(kind=4\\) jj=2:5:2, integer\\(kind=4\\) i=D\\.\[0-9\]+:5:1\\):\\(\\(integer\\(kind=4\\)\\\[1:5\\\]\\\[1:5\\\]\\) d\\)\\\[.*jj\\\]\\\{lb:\[^\\\}\]*\\\}\\\[.*i\\\]\\\{lb:\[^\\\}\]*\\\}\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task affinity\\(iterator\\(integer\\(kind=4\\) jj=2:5:2, integer\\(kind=4\\) i=D\\.\[0-9\]+:5:1\\):b\\\[\\(integer\\(kind=8\\)\\) i \\+ -1\\\]\\) affinity\\(iterator\\(integer\\(kind=4\\) jj=2:5:2, integer\\(kind=4\\) i=D\\.\[0-9\]+:5:1\\):\\(\\(integer\\(kind=4\\)\\\[1:5\\\]\\\[1:5\\\]\\) d\\)\\\[\\(integer\\(kind=8\\)\\) jj\\\]{lb: 1 sz: 20}\\\[\\(integer\\(kind=8\\)\\) i\\\]{lb: 1 sz: 4}\\)" 1 "original" } }
! { dg final { scan-tree-dump-times "#pragma omp task affinity\\(iterator\\(integer\\(kind=4\\) i=D\\.\[0-9\]+:5:1\\):b\\\[\\(.* <?i>? \\+ -1\\\]\\) affinity\\(iterator\\(integer\\(kind=4\\) i=D\\.\[0-9\]+:5:1\\):d\\\[\\(\\(integer\\(kind=8\\)\\) i \\+ -1\\) \\* 6\\\]\\)" 1 "original" } }
@@ -30,6 +30,4 @@ end
! { dg-final { scan-tree-dump-times "#pragma omp task affinity\\(iterator\\(integer\\(kind=4\\) i=1:5:1\\):a\\) affinity\\(iterator\\(integer\\(kind=4\\) i=1:5:1\\):\\*x\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task affinity\\(iterator\\(integer\\(kind=4\\) k=7:4:-1, integer\\(kind=8\\) j=1:5:1\\):\\*\\(\\(integer\\(kind=4\\) \\*\\) &b \\+ \\(sizetype\\) \\(\\(\\(<?\\(>?integer\\(kind=.\\)\\).* \[jk\] \\+ .*\[kj\]\\) \\+ -1\\) \\* 4\\)\\)\\) affinity\\(iterator\\(integer\\(kind=4\\) k=7:4:-1, integer\\(kind=8\\) j=1:5:1\\):a\\) affinity\\(cc\\)" 1 "original" } }
-!b\\\[\\(?\\(integer\\(kind=.\\).* \[jk\] \\+ .*\[kj\]\\) \\+ -1\\\]\\) affinity\\(iterator\\(integer\\(kind=4\\) k=7:4:-1, integer\\(kind=8\\) j=1:5:1\\):a\\) affinity\\(cc\\)" 1 "original" } }
-
+! { dg-final { scan-tree-dump-times "#pragma omp task affinity\\(iterator\\(integer\\(kind=4\\) k=7:4:-1, integer\\(kind=8\\) j=1:5:1\\):b\\\[\\(?\\(integer\\(kind=.\\).* \[jk\] \\+ .*\[kj\]\\) \\+ -1\\\]\\) affinity\\(iterator\\(integer\\(kind=4\\) k=7:4:-1, integer\\(kind=8\\) j=1:5:1\\):a\\) affinity\\(cc\\)" 1 "original" } }
@@ -172,36 +172,36 @@ end
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:depvar\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(in:depvar\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object = &ss;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:8|16)\\) = sp;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:16|32)\\) = sa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:24|48)\\) = &aa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:32|64)\\) = .integer.kind=4.\\\[0:\\\] \\* restrict\\) aaa.data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:40|80)\\) = .integer.kind=4.\\\[0:\\\] \\*\\) aap.data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:48|96)\\) = dss;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:56|112)\\) = \\*dsp;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:64|128)\\) = \\*dsa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:72|144)\\) = daa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:80|160)\\) = .integer.kind=4.\\\[0:\\\] \\* restrict\\) daaa->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:88|176)\\) = .integer.kind=4.\\\[0:\\\] \\*\\) daap->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:96|192)\\) = doss;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:104|208)\\) = \\*dosp;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:112|224)\\) = \\*dosa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:120|240)\\) = doaa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:128|256)\\) = .integer.kind=4.\\\[0:\\\] \\* restrict\\) doaaa->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:136|272)\\) = .integer.kind=4.\\\[0:\\\] \\*\\) doaap->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:144|288)\\) = &dssv;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:152|304)\\) = &dossv;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[0\\\] = &ss;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[1\\\] = sp;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[2\\\] = sa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[3\\\] = &aa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[4\\\] = .integer.kind=4.\\\[0:\\\] \\* restrict\\) aaa.data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[5\\\] = .integer.kind=4.\\\[0:\\\] \\*\\) aap.data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[6\\\] = dss;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[7\\\] = \\*dsp;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[8\\\] = \\*dsa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[9\\\] = daa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[10\\\] = .integer.kind=4.\\\[0:\\\] \\* restrict\\) daaa->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[11\\\] = .integer.kind=4.\\\[0:\\\] \\*\\) daap->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[12\\\] = doss;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[13\\\] = \\*dosp;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[14\\\] = \\*dosa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[15\\\] = doaa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[16\\\] = .integer.kind=4.\\\[0:\\\] \\* restrict\\) doaaa->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[17\\\] = .integer.kind=4.\\\[0:\\\] \\*\\) doaap->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[18\\\] = &dssv;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[19\\\] = &dossv;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem = \\(integer.kind=4. \\*\\) &aa \\+ 4;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:8|16)\\) = \\(integer.kind=4. \\*\\) aaa.data \\+ \\(sizetype\\) \\(\\(aaa.offset \\+ 2\\) \\* 4\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:16|32)\\) = \\(integer.kind=4. \\*\\) \\(aap.data \\+ .sizetype. \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:24|48)\\) = \\(integer.kind=4. \\*\\) daa \\+ 4;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:32|64)\\) = \\(integer.kind=4. \\*\\) daaa->data \\+ \\(sizetype\\) \\(\\(daaa->offset \\+ 2\\) \\* 4\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:40|80)\\) = \\(integer.kind=4. \\*\\) \\(daap->data \\+ .sizetype. \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:48|96)\\) = \\(integer.kind=4. \\*\\) doaa \\+ 4;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:56|112)\\) = \\(integer.kind=4. \\*\\) doaaa->data \\+ \\(sizetype\\) \\(\\(doaaa->offset \\+ 2\\) \\* 4\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:64|128)\\) = \\(integer.kind=4. \\*\\) \\(doaap->data \\+ .sizetype. \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[0\\\] = &aa\\\[1\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[1\\\] = &\\(\\*\\(integer.kind=4.\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[2\\\] = \\(integer.kind=4. \\*\\) \\(aap.data \\+ .sizetype. \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[3\\\] = &\\(\\*daa\\)\\\[1\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[4\\\] = &\\(\\*\\(integer.kind=4.\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[5\\\] = \\(integer.kind=4. \\*\\) \\(daap->data \\+ .sizetype. \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[6\\\] = &\\(\\*doaa\\)\\\[1\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[7\\\] = &\\(\\*\\(integer.kind=4.\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[8\\\] = \\(integer.kind=4. \\*\\) \\(doaap->data \\+ .sizetype. \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:ss\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*sp\\)" 1 "original" } }
@@ -222,15 +222,13 @@ end
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) doaaa->data\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\*\\) doaap->data\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:aa\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(integer\\(kind=4\\) \\*\\) aaa.data \\+ \\(sizetype\\) \\(\\(aaa.offset \\+ 2\\) \\* 4\\)\\)\\)" 1 "original" } }
-
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\) \\*\\) \\(aap.data \\+ \\(sizetype\\) \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(integer\\(kind=4\\) \\*\\) daa \\+ 4\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(integer\\(kind=4\\) \\*\\) daaa->data \\+ \\(sizetype\\) \\(\\(daaa->offset \\+ 2\\) \\* 4\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*daa\\)\\\[1\\\]\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\) \\*\\) \\(daap->data \\+ \\(sizetype\\) \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(integer\\(kind=4\\) \\*\\) doaa \\+ 4\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(integer\\(kind=4\\) \\*\\) doaaa->data \\+ \\(sizetype\\) \\(\\(doaaa->offset \\+ 2\\) \\* 4\\)\\)\\)" 1 "original" } }
-
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*doaa\\)\\\[1\\\]\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(integer\\(kind=4\\) \\*\\) \\(doaap->data \\+ \\(sizetype\\) \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\)\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dossv\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dssv\\)" 1 "original" } }
@@ -255,8 +253,8 @@ end
! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = \\*dosa;" 3 "gimple" } }
! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = doaaa->data;" 4 "gimple" } }
! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = doaap->data;" 4 "gimple" } }
-! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = daa \\+ 4;" 2 "gimple" } }
-! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = doaa \\+ 4;" 2 "gimple" } }
+! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = &\\(\\*daa\\)\\\[1\\\];" 1 "gimple" } }
+! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = &\\(\\*doaa\\)\\\[1\\\];" 1 "gimple" } }
! { dg-final { scan-tree-dump-times "= &dssv;" 1 "gimple" } }
! { dg-final { scan-tree-dump-times "= &dossv;" 1 "gimple" } }
@@ -72,14 +72,11 @@ end
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\*dosa\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:aa\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(\\(integer\\(kind=\[0-9\]+\\) \\*\\) aaa.data \\+ \\(sizetype\\) \\(\\(aaa.offset \\+ 2\\\) \\* (?:8|16)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*\\(integer\\(kind=\[0-9\]+\\)\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(integer\\(kind=\[0-9\]+\\) \\*\\) \\(aap.data \\+ \\(sizetype\\) \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(\\(integer\\(kind=\[0-9\]+\\) \\*\\) daa \\+ (?:8|16)\\)\\)" 1 "original" } }
-
-
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(\\(integer\\(kind=\[0-9\]+\\) \\*\\) daaa->data \\+ \\(sizetype\\) \\(\\(daaa->offset \\+ 2\\\) \\* (?:8|16)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*daa\\)\\\[1\\\]\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*\\(integer\\(kind=\[0-9\]+\\)\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(integer\\(kind=\[0-9\]+\\) \\*\\) \\(daap->data \\+ \\(sizetype\\) \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(\\(integer\\(kind=\[0-9\]+\\) \\*\\) doaa \\+ (?:8|16)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(\\(integer\\(kind=\[0-9\]+\\) \\*\\) doaaa->data \\+ \\(sizetype\\) \\(\\(doaaa->offset \\+ 2\\\) \\* (?:8|16)\\)" 1 "original" } }
-
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*doaa\\)\\\[1\\\]\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\(\\*\\(integer\\(kind=\[0-9\]+\\)\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(depobj:\\*\\(integer\\(kind=\[0-9\]+\\) \\*\\) \\(doaap->data \\+ \\(sizetype\\) \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\)\\)" 1 "original" } }
@@ -172,36 +172,36 @@ end
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:depvar\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(in:depvar\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object = &ss;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:8|16)\\) = sp;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:16|32)\\) = sa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:24|48)\\) = &aa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:32|64)\\) = \\(void \\*\\\[0:\\\] \\* restrict\\) aaa.data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:40|80)\\) = \\(void \\*\\\[0:\\\] \\*\\) aap.data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:48|96)\\) = dss;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:56|112)\\) = \\*dsp;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:64|128)\\) = \\*dsa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:72|144)\\) = daa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:80|160)\\) = \\(void \\*\\\[0:\\\] \\* restrict\\) daaa->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:88|176)\\) = \\(void \\*\\\[0:\\\] \\*\\) daap->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:96|192)\\) = doss;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:104|208)\\) = \\*dosp;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:112|224)\\) = \\*dosa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:120|240)\\) = doaa;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:128|256)\\) = \\(void \\*\\\[0:\\\] \\* restrict\\) doaaa->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:136|272)\\) = \\(void \\*\\\[0:\\\] \\*\\) doaap->data;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:144|288)\\) = &dssv;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&object \\+ (?:152|304)\\) = &dossv;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[0\\\] = &ss;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[1\\\] = sp;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[2\\\] = sa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[3\\\] = &aa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[4\\\] = .void \\*\\\[0:\\\] \\* restrict\\) aaa.data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[5\\\] = .void \\*\\\[0:\\\] \\*\\) aap.data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[6\\\] = dss;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[7\\\] = \\*dsp;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[8\\\] = \\*dsa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[9\\\] = daa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[10\\\] = .void \\*\\\[0:\\\] \\* restrict\\) daaa->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[11\\\] = .void \\*\\\[0:\\\] \\*\\) daap->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[12\\\] = doss;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[13\\\] = \\*dosp;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[14\\\] = \\*dosa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[15\\\] = doaa;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[16\\\] = .void \\*\\\[0:\\\] \\* restrict\\) doaaa->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[17\\\] = .void \\*\\\[0:\\\] \\*\\) doaap->data;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[18\\\] = &dssv;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&object\\\[19\\\] = &dossv;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem = \\(void \\* \\*\\) &aa \\+ (?:4|8);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:8|16)\\) = \\(void \\* \\*\\) aaa.data \\+ \\(sizetype\\) \\(\\(aaa.offset \\+ 2\\) \\* (?:4|8)\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:16|32)\\) = \\(void \\* \\*\\) \\(aap.data \\+ \\(sizetype\\) \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:24|48)\\) = \\(void \\* \\*\\) daa \\+ (?:4|8);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:32|64)\\) = \\(void \\* \\*\\) daaa->data \\+ \\(sizetype\\) \\(\\(daaa->offset \\+ 2\\) \\* (?:4|8)\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:40|80)\\) = \\(void \\* \\*\\) \\(daap->data \\+ \\(sizetype\\) \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:48|96)\\) = \\(void \\* \\*\\) doaa \\+ (?:4|8);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:56|112)\\) = \\(void \\* \\*\\) doaaa->data \\+ \\(sizetype\\) \\(\\(doaaa->offset \\+ 2\\) \\* (?:4|8)\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "&elem \\+ (?:64|128)\\) = \\(void \\* \\*\\) \\(doaap->data \\+ \\(sizetype\\) \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[0\\\] = &aa\\\[1\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[1\\\] = &\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[2\\\] = \\(void \\* \\*\\) \\(aap.data \\+ .sizetype. \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[3\\\] = &\\(\\*daa\\)\\\[1\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[4\\\] = &\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[5\\\] = \\(void \\* \\*\\) \\(daap->data \\+ .sizetype. \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[6\\\] = &\\(\\*doaa\\)\\\[1\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[7\\\] = &\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times "&elem\\\[8\\\] = \\(void \\* \\*\\) \\(doaap->data \\+ .sizetype. \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:ss\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*sp\\)" 1 "original" } }
@@ -222,13 +222,13 @@ end
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\*\\\[0:\\\] \\* restrict\\) doaaa->data\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\*\\\[0:\\\] \\*\\) doaap->data\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:aa\\\[1\\\]\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(void \\* \\*\\) aaa.data \\+ \\(sizetype\\) \\(\\(aaa.offset \\+ 2\\) \\* (?:4|8)\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) aaa.data\\)\\\[aaa.offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\* \\*\\) \\(aap.data \\+ \\(sizetype\\) \\(\\(aap.offset \\+ aap.dim\\\[0\\\].stride \\* 2\\) \\* aap.span\\)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(void \\* \\*\\) daa \\+ (?:4|8)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(void \\* \\*\\) daaa->data \\+ \\(sizetype\\) \\(\\(daaa->offset \\+ 2\\) \\* (?:4|8)\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*daa\\)\\\[1\\\]\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) daaa->data\\)\\\[daaa->offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\* \\*\\) \\(daap->data \\+ \\(sizetype\\) \\(\\(daap->offset \\+ daap->dim\\\[0\\\].stride \\* 2\\) \\* daap->span\\)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(void \\* \\*\\) doaa \\+ (?:4|8)\\)\\)" 1 "original" } }
-! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(\\(void \\* \\*\\) doaaa->data \\+ \\(sizetype\\) \\(\\(doaaa->offset \\+ 2\\) \\* (?:4|8)\\)\\)\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*doaa\\)\\\[1\\\]\\)" 1 "original" } }
+! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\(\\*\\(void \\*\\\[0:\\\] \\* restrict\\) doaaa->data\\)\\\[doaaa->offset \\+ 2\\\]\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:\\*\\(void \\* \\*\\) \\(doaap->data \\+ \\(sizetype\\) \\(\\(doaap->offset \\+ doaap->dim\\\[0\\\].stride \\* 2\\) \\* doaap->span\\)\\)\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dossv\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "#pragma omp task depend\\(out:dssv\\)" 1 "original" } }
@@ -253,7 +253,7 @@ end
! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = \\*dosa;" 3 "gimple" } }
! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = doaaa->data;" 4 "gimple" } }
! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = doaap->data;" 4 "gimple" } }
-! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = daa \\+ (?:4|8);" 2 "gimple" } }
-! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = doaa \\+ (?:4|8);" 2 "gimple" } }
+! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = &\\(\\*daa\\)\\\[1\\\];" 1 "gimple" } }
+! { dg-final { scan-tree-dump-times "D.\[0-9\]+ = &\\(\\*doaa\\)\\\[1\\\];" 1 "gimple" } }
! { dg-final { scan-tree-dump-times "= &dssv;" 1 "gimple" } }
! { dg-final { scan-tree-dump-times "= &dossv;" 1 "gimple" } }