]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
OpenMP: Handle bind clause in tree-nested.c [PR100905]
authorTobias Burnus <tobias@codesourcery.com>
Fri, 4 Jun 2021 18:56:48 +0000 (20:56 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Fri, 4 Jun 2021 18:56:48 +0000 (20:56 +0200)
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.

(cherry picked from commit c7070b31e12c18905ed0a60aaedd7a071aab5c60)

gcc/ChangeLog.omp
gcc/testsuite/ChangeLog.omp
gcc/testsuite/gfortran.dg/gomp/loop-3.f90 [new file with mode: 0644]
gcc/tree-nested.c

index df5f83dd488427b91e110d180e8eccf7d9cfddb6..25717436651773ed61b37013831dabf74e08d927 100644 (file)
@@ -1,3 +1,11 @@
+2021-06-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backported from master:
+       2021-06-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       * tree-nested.c (convert_nonlocal_omp_clauses,
+       convert_local_omp_clauses): Handle OMP_CLAUSE_BIND.
+
 2021-06-04  Tobias Burnus  <tobias@codesourcery.com>
 
        Backported from master:
index 15e95667b79c7d4d75d43801e81491f92b1c348d..4ed55d768afbfce4daf799074f86caab8514cda9 100644 (file)
@@ -1,3 +1,10 @@
+2021-06-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backported from master:
+       2021-06-04  Tobias Burnus  <tobias@codesourcery.com>
+
+       * gfortran.dg/gomp/loop-3.f90: New test.
+
 2021-06-04  Tobias Burnus  <tobias@codesourcery.com>
 
        Backported from master:
diff --git a/gcc/testsuite/gfortran.dg/gomp/loop-3.f90 b/gcc/testsuite/gfortran.dg/gomp/loop-3.f90
new file mode 100644 (file)
index 0000000..6d25b19
--- /dev/null
@@ -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
index 1ce25f11dd4560d27f1aec92649c16de12732121..0c30657b8448e30b5b95e15d1bf807b1363e635f 100644 (file)
@@ -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;
@@ -2266,6 +2267,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;