mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			204 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Fortran
		
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Fortran
		
	
	
	
| ! { dg-do run }
 | |
| 
 | |
|   call dep ()
 | |
|   call dep2 ()
 | |
|   call dep3 ()
 | |
|   call firstpriv ()
 | |
|   call antidep ()
 | |
|   call antidep2 ()
 | |
|   call antidep3 ()
 | |
|   call outdep ()
 | |
|   call concurrent ()
 | |
|   call concurrent2 ()
 | |
|   call concurrent3 ()
 | |
| contains
 | |
|   subroutine dep
 | |
|     integer :: x
 | |
|     x = 1
 | |
|     !$omp parallel
 | |
|       !$omp single
 | |
|         !$omp task shared (x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine dep
 | |
| 
 | |
|   subroutine dep2
 | |
|     integer :: x
 | |
|     !$omp parallel
 | |
|       !$omp single private (x)
 | |
|         x = 1
 | |
|         !$omp task shared (x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp taskwait
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine dep2
 | |
| 
 | |
|   subroutine dep3
 | |
|     integer :: x
 | |
|     !$omp parallel private (x)
 | |
|       x = 1
 | |
|       !$omp single
 | |
|         !$omp task shared (x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp endtask
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp endtask
 | |
|       !$omp endsingle
 | |
|     !$omp endparallel
 | |
|   end subroutine dep3
 | |
| 
 | |
|   subroutine firstpriv
 | |
|     integer :: x
 | |
|     !$omp parallel private (x)
 | |
|       !$omp single
 | |
|         x = 1
 | |
|         !$omp task depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|         !$omp task depend(in: x)
 | |
|           if (x.ne.1) call abort
 | |
|         !$omp end task
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine firstpriv
 | |
| 
 | |
|   subroutine antidep
 | |
|     integer :: x
 | |
|     x = 1
 | |
|     !$omp parallel
 | |
|       !$omp single
 | |
|         !$omp task shared(x) depend(in: x)
 | |
|           if (x.ne.1) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared(x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine antidep
 | |
| 
 | |
|   subroutine antidep2
 | |
|     integer :: x
 | |
|     !$omp parallel private (x)
 | |
|       !$omp single
 | |
|         x = 1
 | |
|         !$omp taskgroup
 | |
|           !$omp task shared(x) depend(in: x)
 | |
|             if (x.ne.1) call abort
 | |
|           !$omp end task
 | |
|           !$omp task shared(x) depend(out: x)
 | |
|             x = 2
 | |
|           !$omp end task
 | |
|         !$omp end taskgroup
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine antidep2
 | |
| 
 | |
|   subroutine antidep3
 | |
|     integer :: x
 | |
|     !$omp parallel
 | |
|       x = 1
 | |
|       !$omp single
 | |
|         !$omp task shared(x) depend(in: x)
 | |
|           if (x.ne.1) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared(x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine antidep3
 | |
| 
 | |
|   subroutine outdep
 | |
|     integer :: x
 | |
|     !$omp parallel private (x)
 | |
|       !$omp single
 | |
|         x = 0
 | |
|         !$omp task shared(x) depend(out: x)
 | |
|           x = 1
 | |
|         !$omp end task
 | |
|         !$omp task shared(x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|         !$omp taskwait
 | |
|         if (x.ne.2) call abort
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine outdep
 | |
| 
 | |
|   subroutine concurrent
 | |
|     integer :: x
 | |
|     x = 1
 | |
|     !$omp parallel
 | |
|       !$omp single
 | |
|         !$omp task shared (x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine concurrent
 | |
| 
 | |
|   subroutine concurrent2
 | |
|     integer :: x
 | |
|     !$omp parallel private (x)
 | |
|       !$omp single
 | |
|         x = 1
 | |
|         !$omp task shared (x) depend(out: x)
 | |
|           x = 2;
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp taskwait
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine concurrent2
 | |
| 
 | |
|   subroutine concurrent3
 | |
|     integer :: x
 | |
|     !$omp parallel private (x)
 | |
|       x = 1
 | |
|       !$omp single
 | |
|         !$omp task shared (x) depend(out: x)
 | |
|           x = 2
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|         !$omp task shared (x) depend(in: x)
 | |
|           if (x.ne.2) call abort
 | |
|         !$omp end task
 | |
|       !$omp end single
 | |
|     !$omp end parallel
 | |
|   end subroutine concurrent3
 | |
| end
 |