aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libgomp/ChangeLog15
-rw-r--r--libgomp/testsuite/libgomp.c/examples-4/simd-7.c25
-rw-r--r--libgomp/testsuite/libgomp.fortran/examples-4/simd-7.f9030
3 files changed, 49 insertions, 21 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 12c9e947e20..d8d37cf7329 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -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 ...
diff --git a/libgomp/testsuite/libgomp.c/examples-4/simd-7.c b/libgomp/testsuite/libgomp.c/examples-4/simd-7.c
index 4aab962b719..732cd9179f6 100644
--- a/libgomp/testsuite/libgomp.c/examples-4/simd-7.c
+++ b/libgomp/testsuite/libgomp.c/examples-4/simd-7.c
@@ -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])
diff --git a/libgomp/testsuite/libgomp.fortran/examples-4/simd-7.f90 b/libgomp/testsuite/libgomp.fortran/examples-4/simd-7.f90
index a61bb038bf0..75606570503 100644
--- a/libgomp/testsuite/libgomp.fortran/examples-4/simd-7.f90
+++ b/libgomp/testsuite/libgomp.fortran/examples-4/simd-7.f90
@@ -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