mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Fortran
		
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Fortran
		
	
	
	
| ! { dg-do run }
 | |
| ! { dg-additional-options "-msse2" { target sse2_runtime } }
 | |
| ! { dg-additional-options "-mavx" { target avx_runtime } }
 | |
| 
 | |
|   integer :: a(1024), b(1024), k, m, i, s, t
 | |
|   k = 4
 | |
|   m = 2
 | |
|   t = 1
 | |
|   do i = 1, 1024
 | |
|     a(i) = i - 513
 | |
|     b(i) = modulo (i - 52, 39)
 | |
|     if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
 | |
|   end do
 | |
|   s = foo (b)
 | |
|   do i = 1, 1024
 | |
|     if (a(i).ne.((i - 513) * b(i))) call abort
 | |
|     if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
 | |
|       if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
 | |
|     else
 | |
|       if (b(i).ne.(modulo (i - 52, 39))) call abort
 | |
|     end if
 | |
|     a(i) = i - 513
 | |
|   end do
 | |
|   if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
 | |
|   k = 4
 | |
|   m = 2
 | |
|   t = 1
 | |
|   s = bar (b)
 | |
|   do i = 1, 1024
 | |
|     if (a(i).ne.((i - 513) * b(i))) call abort
 | |
|     if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
 | |
|       if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
 | |
|     else
 | |
|       if (b(i).ne.(modulo (i - 52, 39))) call abort
 | |
|     end if
 | |
|     a(i) = i - 513
 | |
|   end do
 | |
|   if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
 | |
|   k = 4
 | |
|   m = 2
 | |
|   t = 1
 | |
|   s = baz (b)
 | |
|   do i = 1, 1024
 | |
|     if (a(i).ne.((i - 513) * b(i))) call abort
 | |
|     if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
 | |
|       if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
 | |
|     else
 | |
|       if (b(i).ne.(modulo (i - 52, 39))) call abort
 | |
|     end if
 | |
|   end do
 | |
|   if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
 | |
| contains
 | |
|   function foo (p)
 | |
|     integer :: p(1024), u, v, i, s, foo
 | |
|     s = 0
 | |
|     !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
 | |
|     do i = 1, 1024
 | |
|       a(i) = a(i) * p(i)
 | |
|       u = p(i) + k
 | |
|       k = k + m + 1
 | |
|       v = p(i) + k
 | |
|       s = s + p(i) + k
 | |
|     end do
 | |
|     !$omp end simd
 | |
|     if (i.ne.1025) call abort
 | |
|     if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
 | |
|     foo = s
 | |
|   end function foo
 | |
|   function bar (p)
 | |
|     integer :: p(1024), u, v, i, s, bar
 | |
|     s = 0
 | |
|     !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
 | |
|     do i = 1, 1024, t
 | |
|       a(i) = a(i) * p(i)
 | |
|       u = p(i) + k
 | |
|       k = k + m + 1
 | |
|       v = p(i) + k
 | |
|       s = s + p(i) + k
 | |
|     end do
 | |
|     !$omp end simd
 | |
|     if (i.ne.1025) call abort
 | |
|     if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
 | |
|     bar = s
 | |
|   end function bar
 | |
|   function baz (p)
 | |
|     integer :: p(1024), u, v, i, s, baz
 | |
|     s = 0
 | |
|     !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
 | |
|     !$omp & linear(i : t)
 | |
|     do i = 1, 1024, t
 | |
|       a(i) = a(i) * p(i)
 | |
|       u = p(i) + k
 | |
|       k = k + m + 1
 | |
|       v = p(i) + k
 | |
|       s = s + p(i) + k
 | |
|     end do
 | |
|     if (i.ne.1025) call abort
 | |
|     if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
 | |
|     baz = s
 | |
|   end function baz
 | |
| end
 |