| ! { dg-do compile } |
| ! { dg-additional-options "-fdump-tree-original" } |
| ! |
| ! (in_)reduction clause |
| ! Test all in-principle valid combinations, even if |
| ! not valid in this context (some fail at ME level) |
| ! |
| implicit none |
| integer :: a, b, i |
| a = 0 |
| |
| ! ------------ parallel ------------ |
| !$omp parallel reduction(+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| !$omp end parallel |
| |
| !$omp parallel reduction(default,+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| !$omp end parallel |
| |
| !$omp parallel reduction(task,+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| !$omp end parallel |
| |
| |
| ! ------------ simd ------------ |
| !$omp simd reduction(+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| |
| !$omp simd reduction(default,+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| |
| !$omp simd reduction(task,+:a) ! { dg-error "invalid 'task' reduction modifier on construct other than 'parallel', 'do', 'sections' or 'scope'" } |
| do i=1,10 |
| a = a + 1 |
| end do |
| |
| ! ------------ do ------------ |
| !$omp parallel |
| !$omp do reduction(+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| !$omp end parallel |
| |
| !$omp parallel |
| !$omp do reduction(default,+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| !$omp end parallel |
| |
| !$omp parallel |
| !$omp do reduction(task,+:a) |
| do i=1,10 |
| a = a + 1 |
| end do |
| !$omp end parallel |
| |
| ! ------------ section ------------ |
| !$omp parallel |
| !$omp sections reduction(+:a) |
| !$omp section |
| a = a + 1 |
| !$omp end sections |
| !$omp end parallel |
| |
| !$omp parallel |
| !$omp sections reduction(default,+:a) |
| !$omp section |
| a = a + 1 |
| !$omp end sections |
| !$omp end parallel |
| |
| !$omp parallel |
| !$omp sections reduction(task,+:a) |
| !$omp section |
| a = a + 1 |
| !$omp end sections |
| !$omp end parallel |
| |
| ! ------------ task ------------ |
| !$omp task in_reduction(+:a) |
| a = a + 1 |
| !$omp end task |
| |
| ! ------------ taskloop ------------ |
| !$omp taskloop reduction(+:a) in_reduction(+:b) |
| do i=1,10 |
| a = a + 1 |
| end do |
| |
| !$omp taskloop reduction(default,+:a) in_reduction(+:b) |
| do i=1,10 |
| a = a + 1 |
| end do |
| |
| ! ------------ target ------------ |
| !$omp target in_reduction(+:b) |
| a = a + 1 |
| !$omp end target |
| |
| ! ------------ teams ------------ |
| !$omp teams reduction(+:b) |
| a = a + 1 |
| !$omp end teams |
| |
| !$omp teams reduction(default, +:b) |
| a = a + 1 |
| !$omp end teams |
| |
| ! ------------ taskgroup -------- |
| |
| !$omp taskgroup task_reduction(+:b) |
| a = a + 1 |
| !$omp end taskgroup |
| |
| end |
| |
| ! { dg-final { scan-tree-dump-times "#pragma omp for reduction\\(\\\+:a\\)" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp for reduction\\(task,\\\+:a\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp parallel\[\n\r\]" 6 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp parallel private\\(i\\) reduction\\(\\\+:a\\)" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp parallel private\\(i\\) reduction\\(task,\\\+:a\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp section\[\n\r\]" 3 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp sections reduction\\(\\\+:a\\)" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp sections reduction\\(task,\\\+:a\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\) reduction\\(\\\+:a\\)" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\) reduction\\(task,\\\+:a\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp target map\\(always,tofrom:b\\) in_reduction\\(\\\+:b\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp task in_reduction\\(\\\+:a\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp teams reduction\\(\\\+:b\\)" 2 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp taskloop reduction\\(\\\+:a\\) in_reduction\\(\\\+:b\\)" 2 "original" } } |