aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2021-06-04 20:52:33 +0200
committerTobias Burnus <tobias@codesourcery.com>2021-06-04 20:52:33 +0200
commitc7070b31e12c18905ed0a60aaedd7a071aab5c60 (patch)
tree5c50794c9d92f63397d70498958031a039eb83d0 /gcc
parentdf3fbd5957f12927a459a2686f4eee55f66ec2f4 (diff)
downloadgcc-c7070b31e12c18905ed0a60aaedd7a071aab5c60.zip
gcc-c7070b31e12c18905ed0a60aaedd7a071aab5c60.tar.gz
gcc-c7070b31e12c18905ed0a60aaedd7a071aab5c60.tar.bz2
OpenMP: Handle bind clause in tree-nested.c [PR100905]
PR middle-end/100905 gcc/ChangeLog: * tree-nested.c (convert_nonlocal_omp_clauses, convert_local_omp_clauses): Handle OMP_CLAUSE_BIND. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/loop-3.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/loop-3.f9055
-rw-r--r--gcc/tree-nested.c2
2 files changed, 57 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/gomp/loop-3.f90 b/gcc/testsuite/gfortran.dg/gomp/loop-3.f90
new file mode 100644
index 0000000..6d25b19
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/loop-3.f90
@@ -0,0 +1,55 @@
+! PR middle-end/100905
+!
+PROGRAM test_loop_order_concurrent
+ implicit none
+ integer :: a, cc(64), dd(64)
+
+ dd = 54
+ cc = 99
+
+ call test_loop()
+ call test_affinity(a)
+ if (a /= 5) stop 3
+ call test_scan(cc, dd)
+ if (any (cc /= 99)) stop 4
+ if (dd(1) /= 5 .or. dd(2) /= 104) stop 5
+
+CONTAINS
+
+ SUBROUTINE test_loop()
+ INTEGER,DIMENSION(1024):: a, b, c
+ INTEGER:: i
+
+ DO i = 1, 1024
+ a(i) = 1
+ b(i) = i + 1
+ c(i) = 2*(i + 1)
+ END DO
+
+ !$omp loop order(concurrent) bind(thread)
+ DO i = 1, 1024
+ a(i) = a(i) + b(i)*c(i)
+ END DO
+
+ DO i = 1, 1024
+ if (a(i) /= 1 + (b(i)*c(i))) stop 1
+ END DO
+ END SUBROUTINE test_loop
+
+ SUBROUTINE test_affinity(aa)
+ integer :: aa
+ !$omp task affinity(aa)
+ a = 5
+ !$omp end task
+ end
+
+ subroutine test_scan(c, d)
+ integer i, c(*), d(*)
+ !$omp simd reduction (inscan, +: a)
+ do i = 1, 64
+ d(i) = a
+ !$omp scan exclusive (a)
+ a = a + c(i)
+ end do
+ end
+END PROGRAM test_loop_order_concurrent
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index cea917a..41cbca9 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -1484,6 +1484,7 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
case OMP_CLAUSE_AUTO:
case OMP_CLAUSE_IF_PRESENT:
case OMP_CLAUSE_FINALIZE:
+ case OMP_CLAUSE_BIND:
case OMP_CLAUSE__CONDTEMP_:
case OMP_CLAUSE__SCANTEMP_:
break;
@@ -2264,6 +2265,7 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
case OMP_CLAUSE_AUTO:
case OMP_CLAUSE_IF_PRESENT:
case OMP_CLAUSE_FINALIZE:
+ case OMP_CLAUSE_BIND:
case OMP_CLAUSE__CONDTEMP_:
case OMP_CLAUSE__SCANTEMP_:
break;