summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/vect/fast-math-vect-8.f90
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gfortran.dg/vect/fast-math-vect-8.f90
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gfortran.dg/vect/fast-math-vect-8.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/vect/fast-math-vect-8.f9094
1 files changed, 94 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/vect/fast-math-vect-8.f90 b/gcc/testsuite/gfortran.dg/vect/fast-math-vect-8.f90
new file mode 100644
index 000000000..26d850de9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/fast-math-vect-8.f90
@@ -0,0 +1,94 @@
+! { dg-do compile }
+! { dg-require-effective-target vect_float }
+
+module solv_cap
+
+ implicit none
+
+ public :: init_solve
+
+ integer, parameter, public :: dp = 4
+
+ real(kind=dp), private :: Pi, Mu0, c0, eps0
+ logical, private :: UseFFT, UsePreco
+ real(kind=dp), private :: D1, D2
+ integer, private, save :: Ng1=0, Ng2=0
+ integer, private, pointer, dimension(:,:) :: Grid
+ real(kind=dp), private, allocatable, dimension(:,:) :: G
+
+contains
+
+ subroutine init_solve(Grid_in, GrSize1, GrSize2, UseFFT_in, UsePreco_in)
+ integer, intent(in), target, dimension(:,:) :: Grid_in
+ real(kind=dp), intent(in) :: GrSize1, GrSize2
+ logical, intent(in) :: UseFFT_in, UsePreco_in
+ integer :: i, j
+
+ Pi = acos(-1.0_dp)
+ Mu0 = 4e-7_dp * Pi
+ c0 = 299792458
+ eps0 = 1 / (Mu0 * c0**2)
+
+ UseFFT = UseFFT_in
+ UsePreco = UsePreco_in
+
+ if(Ng1 /= 0 .and. allocated(G) ) then
+ deallocate( G )
+ end if
+
+ Grid => Grid_in
+ Ng1 = size(Grid, 1)
+ Ng2 = size(Grid, 2)
+ D1 = GrSize1/Ng1
+ D2 = GrSize2/Ng2
+
+ allocate( G(0:Ng1,0:Ng2) )
+
+ write(unit=*, fmt=*) "Calculating G"
+ do i=0,Ng1
+ do j=0,Ng2
+ G(j,i) = Ginteg( -D1/2,-D2/2, D1/2,D2/2, i*D1,j*D2 )
+ end do
+ end do
+
+ if(UseFFT) then
+ write(unit=*, fmt=*) "Transforming G"
+ call FourirG(G,1)
+ end if
+
+ return
+
+
+ contains
+ function Ginteg(xq1,yq1, xq2,yq2, xp,yp) result(G)
+ real(kind=dp), intent(in) :: xq1,yq1, xq2,yq2, xp,yp
+ real(kind=dp) :: G
+ real(kind=dp) :: x1,x2,y1,y2,t
+ x1 = xq1-xp
+ x2 = xq2-xp
+ y1 = yq1-yp
+ y2 = yq2-yp
+
+ if (x1+x2 < 0) then
+ t = -x1
+ x1 = -x2
+ x2 = t
+ end if
+ if (y1+y2 < 0) then
+ t = -y1
+ y1 = -y2
+ y2 = t
+ end if
+
+ G = (x2*y2)-(x1*y2)-(x2*y1)+(x1*y1)
+
+ return
+ end function Ginteg
+
+ end subroutine init_solve
+
+end module solv_cap
+
+
+! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_intfloat_cvt } } }
+! { dg-final { cleanup-tree-dump "vect" } }