re PR libgomp/66950 (FAIL: libgomp.fortran/examples-4/simd-7.f90 -O0 execution...
authorMaxim Blumenthal <maxim.blumenthal@intel.com>
Wed, 22 Jul 2015 17:19:31 +0000 (17:19 +0000)
committerIlya Verbin <iverbin@gcc.gnu.org>
Wed, 22 Jul 2015 17:19:31 +0000 (17:19 +0000)
2015-07-22  Maxim Blumenthal  <maxim.blumenthal@intel.com>

PR libgomp/66950
* testsuite/libgomp.c/examples-4/simd-7.c (N): Change to 30 from 45.
(fib_ref): New function.
(fib): Correct corner cases in the recursion.
(main): Replace the non-simd loop with fib_ref call.
* testsuite/libgomp.fortran/examples-4/simd-7.f90: (fib_ref): New
subroutine.
(fibonacci): Lower the parameter N to 30.  Correct accordingly check
for the last array element value.  Replace the non-simd loop with
fib_ref call.  Remove redundant b_ref array.  Remove the comparison
of the last array element with according Fibonacci sequence element.
(fib): Correct corner cases in the recursion.

From-SVN: r226080

libgomp/ChangeLog
libgomp/testsuite/libgomp.c/examples-4/simd-7.c
libgomp/testsuite/libgomp.fortran/examples-4/simd-7.f90

index 12c9e947e20469e210470466ef6fcfb239f009a0..d8d37cf7329261e62a60417c840f2a99c0cb9ff8 100644 (file)
@@ -1,3 +1,18 @@
+2015-07-22  Maxim Blumenthal  <maxim.blumenthal@intel.com>
+
+       PR libgomp/66950
+       * testsuite/libgomp.c/examples-4/simd-7.c (N): Change to 30 from 45.
+       (fib_ref): New function.
+       (fib): Correct corner cases in the recursion.
+       (main): Replace the non-simd loop with fib_ref call.
+       * testsuite/libgomp.fortran/examples-4/simd-7.f90: (fib_ref): New
+       subroutine.
+       (fibonacci): Lower the parameter N to 30.  Correct accordingly check
+       for the last array element value.  Replace the non-simd loop with
+       fib_ref call.  Remove redundant b_ref array.  Remove the comparison
+       of the last array element with according Fibonacci sequence element.
+       (fib): Correct corner cases in the recursion.
+
 2015-07-21  Nathan Sidwell  <nathan@codesourcery.com>
 
        * target.c (gomp_offload_image_to_device): Rename to ...
index 4aab962b71951312b2ec7ea241c1c74439afd636..732cd9179f6e1bb380ce345deceb2f2518d43750 100644 (file)
@@ -5,17 +5,27 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#define N 45
+#define N 30
 int a[N], a_ref[N], b[N];
 
 #pragma omp declare simd inbranch
 int fib( int n )
 {
-   if (n <= 2)
-      return n;
-   else {
-      return fib(n-1) + fib(n-2);
-   }
+  if (n <= 1)
+    return n;
+  else
+    return fib(n-1) + fib(n-2);
+}
+
+void fib_ref()
+{
+  int i;
+
+  a_ref[0] = 0;
+  a_ref[1] = 1;
+
+  for (i=2; i < N; i++)
+    a_ref[i] = a_ref[i-2] + a_ref[i-1];
 }
 
 int main(void)
@@ -30,8 +40,7 @@ int main(void)
   for (i=0; i < N; i++)
     a[i] = fib(b[i]);
 
-  for (i=0; i < N; i++)
-    a_ref[i] = fib(b[i]);
+  fib_ref ();
 
   for (i=0; i < N; i++)
     if (a[i] != a_ref[i])
index a61bb038bf0023cd15f89ff8a1ee179b8e229697..7560657050391f358d1af790b8bc873901458500 100644 (file)
@@ -4,9 +4,9 @@
 
 program fibonacci
    implicit none
-   integer,parameter :: N=45
+   integer,parameter :: N=30
    integer           :: a(0:N-1), b(0:N-1)
-   integer           :: a_ref(0:N-1), b_ref(0:N-1)
+   integer           :: a_ref(0:N-1)
    integer           :: i
    integer, external :: fib
 
@@ -15,35 +15,39 @@ program fibonacci
       b(i) = i
    end do
 
-   do i = 0,N-1
-      b_ref(i) = i
-   end do
-
    !$omp simd
    do i=0,N-1
       a(i) = fib(b(i))
    end do
 
-   do i=0,N-1
-      a_ref(i) = fib(b_ref(i))
-   end do
+   call fib_ref (a_ref, N)
 
    do i = 0, N-1
      if (a(i) .ne. a_ref(i)) call abort ()
    end do
 
-   if (a(44) .ne. 1134903170) call abort()
-
 end program
 
 recursive function fib(n) result(r)
 !$omp declare simd(fib) inbranch
    integer  :: n, r
 
-   if (n <= 2) then
-      r = n
+   if (n <= 1) then
+       r = n
    else
       r = fib(n-1) + fib(n-2)
    endif
 
 end function fib
+
+subroutine fib_ref(a_ref, n)
+   integer  :: n, a_ref(0:n-1)
+
+   a_ref(0) = 0
+   a_ref(1) = 1
+
+   do i = 2, n-1
+     a_ref(i) = a_ref(i-1) + a_ref(i-2)
+   end do
+
+end subroutine fib_ref