1! { dg-do run { target vect_simd_clones } } 2! { dg-options "-fno-inline" } 3! { dg-additional-options "-msse2" { target sse2_runtime } } 4! { dg-additional-options "-mavx" { target avx_runtime } } 5 6module declare_simd_1_mod 7 contains 8 real function foo (a, b, c) 9 !$omp declare simd (foo) simdlen (4) uniform (a) linear (b : 5) & 10 !$omp & notinbranch 11 double precision, value :: a 12 real, value :: c 13 !$omp declare simd (foo) 14 integer, value :: b 15 foo = a + b * c 16 end function foo 17end module declare_simd_1_mod 18 use declare_simd_1_mod 19 interface 20 function bar (a, b, c) 21 !$omp declare simd (bar) 22 integer, value :: b 23 real, value :: c 24 real :: bar 25 !$omp declare simd (bar) simdlen (4) linear (b : 2) 26 !$omp declare simd (bar) simdlen (16) inbranch 27 double precision, value :: a 28 end function bar 29 end interface 30 integer :: i 31 double precision :: a(128) 32 real :: b(128), d(128) 33 data d /171., 414., 745., 1164., 1671., 2266., 2949., 3720., 4579., & 34 & 5526., 6561., 7684., 8895., 10194., 11581., 13056., 14619., & 35 & 16270., 18009., 19836., 21751., 23754., 25845., 28024., & 36 & 30291., 32646., 35089., 37620., 40239., 42946., 45741., & 37 & 48624., 51595., 54654., 57801., 61036., 64359., 67770., & 38 & 71269., 74856., 78531., 82294., 86145., 90084., 94111., & 39 & 98226., 102429., 106720., 111099., 115566., 120121., 124764., & 40 & 129495., 134314., 139221., 144216., 149299., 154470., 159729., & 41 & 165076., 170511., 176034., 181645., 187344., 193131., 199006., & 42 & 204969., 211020., 217159., 223386., 229701., 236104., 242595., & 43 & 249174., 255841., 262596., 269439., 276370., 283389., 290496., & 44 & 297691., 304974., 312345., 319804., 327351., 334986., 342709., & 45 & 350520., 358419., 366406., 374481., 382644., 390895., 399234., & 46 & 407661., 416176., 424779., 433470., 442249., 451116., 460071., & 47 & 469114., 478245., 487464., 496771., 506166., 515649., 525220., & 48 & 534879., 544626., 554461., 564384., 574395., 584494., 594681., & 49 & 604956., 615319., 625770., 636309., 646936., 657651., 668454., & 50 & 679345., 690324., 701391., 712546., 723789., 735120./ 51 !$omp simd 52 do i = 1, 128 53 a(i) = 7.0 * i + 16.0 54 b(i) = 5.0 * i + 12.0 55 end do 56 !$omp simd 57 do i = 1, 128 58 b(i) = foo (a(i), 3, b(i)) 59 end do 60 !$omp simd 61 do i = 1, 128 62 b(i) = bar (a(i), 2 * i, b(i)) 63 end do 64 if (any (b.ne.d)) STOP 1 65 !$omp simd 66 do i = 1, 128 67 b(i) = i * 2.0 68 end do 69 !$omp simd 70 do i = 1, 128 71 b(i) = baz (7.0_8, 2, b(i)) 72 end do 73 do i = 1, 128 74 if (b(i).ne.(7.0 + 4.0 * i)) STOP 2 75 end do 76contains 77 function baz (x, y, z) 78 !$omp declare simd (baz) simdlen (8) uniform (x, y) 79 !$omp declare simd (baz) 80 integer, value :: y 81 real, value :: z 82 real :: baz 83 double precision, value :: x 84 baz = x + y * z 85 end function baz 86end 87function bar (a, b, c) 88 integer, value :: b 89 real, value :: c 90 real :: bar 91 double precision, value :: a 92 !$omp declare simd (bar) 93 !$omp declare simd (bar) simdlen (4) linear (b : 2) 94 bar = a + b * c 95end function bar 96