1! { dg-do compile } 2! { dg-additional-options "-foffload=disable -fdump-tree-gimple" } 3! { dg-additional-options "-mavx512bw -mavx512vl" { target { i?86-*-* x86_64-*-* } } } 4 5program main 6 !$omp requires atomic_default_mem_order(seq_cst) 7contains 8 subroutine f01 () 9 end subroutine 10 11 subroutine f02 () 12 end subroutine 13 14 subroutine f03 () 15 end subroutine 16 17 subroutine f04 () 18 !$omp declare variant (f01) match (device={isa("avx512f","avx512vl")}) ! 16 19 !$omp declare variant (f02) match (implementation={vendor(score(15):gnu)}) 20 !$omp declare variant (f03) match (user={condition(score(11):1)}) 21 end subroutine 22 23 subroutine f05 () 24 end subroutine 25 26 subroutine f06 () 27 end subroutine 28 29 subroutine f07 () 30 end subroutine 31 32 subroutine f08 () 33 !$omp declare variant (f05) match (device={isa(avx512f,avx512vl)}) ! 16 34 !$omp declare variant (f06) match (implementation={vendor(score(15):gnu)}) 35 !$omp declare variant (f07) match (user={condition(score(17):1)}) 36 end subroutine 37 38 subroutine f09 () 39 end subroutine 40 41 subroutine f10 () 42 end subroutine 43 44 subroutine f11 () 45 end subroutine 46 47 subroutine f12 () 48 end subroutine 49 50 subroutine f13 () 51 !$omp declare variant (f09) match (device={arch(x86_64)},user={condition(score(65):1)}) ! 64+65 52 !$omp declare variant (f10) match (implementation={vendor(score(127):"gnu")}) 53 !$omp declare variant (f11) match (device={isa(ssse3)}) ! 128 54 !$omp declare variant (f12) match (implementation={atomic_default_mem_order(score(126):seq_cst)}) 55 end subroutine 56 57 subroutine f14 () 58 end subroutine 59 60 subroutine f15 () 61 end subroutine 62 63 subroutine f16 () 64 end subroutine 65 66 subroutine f17 () 67 !$omp declare variant (f14) match (construct={teams,parallel,do}) ! 16+8+4 68 !$omp declare variant (f15) match (construct={parallel},user={condition(score(19):1)}) ! 8+19 69 !$omp declare variant (f16) match (implementation={atomic_default_mem_order(score(27):seq_cst)}) 70 end subroutine 71 72 subroutine f18 () 73 end subroutine 74 75 subroutine f19 () 76 end subroutine 77 78 subroutine f20 () 79 end subroutine 80 81 subroutine f21 () 82 !$omp declare variant (f18) match (construct={teams,parallel,do}) ! 16+8+4 83 !$omp declare variant (f19) match (construct={do},user={condition(score(25):1)}) ! 4+25 84 !$omp declare variant (f20) match (implementation={atomic_default_mem_order(score(28):seq_cst)}) 85 end subroutine 86 87 subroutine f22 () 88 end subroutine 89 90 subroutine f23 () 91 end subroutine 92 93 subroutine f24 () 94 end subroutine 95 96 subroutine f25 () 97 !$omp declare variant (f22) match (construct={parallel,do}) ! 2+1 98 !$omp declare variant (f23) match (construct={do}) ! 0 99 !$omp declare variant (f24) match (implementation={atomic_default_mem_order(score(2):seq_cst)}) 100 end subroutine 101 102 subroutine f26 () 103 end subroutine 104 105 subroutine f27 () 106 end subroutine 107 108 subroutine f28 () 109 end subroutine 110 111 subroutine f29 () 112 !$omp declare variant (f26) match (construct={parallel,do}) ! 2+1 113 !$omp declare variant (f27) match (construct={do},user={condition(1)}) ! 4 114 !$omp declare variant (f28) match (implementation={atomic_default_mem_order(score(3):seq_cst)}) 115 end subroutine 116 117 subroutine test1 () 118 integer :: i, j 119 120 !$omp parallel do ! 2 constructs in OpenMP context, isa has score 2^4. 121 do i = 1, 2 122 call f04 () ! { dg-final { scan-tree-dump-times "f01 \\\(\\\);" 1 "gimple" { target i?86-*-* x86_64-*-* } } } 123 ! { dg-final { scan-tree-dump-times "f02 \\\(\\\);" 1 "gimple" { target { ! { i?86-*-* x86_64-*-* } } } } } 124 end do 125 !$omp end parallel do 126 127 !$omp target teams ! 2 constructs in OpenMP context, isa has score 2^4. 128 call f08 () ! { dg-final { scan-tree-dump-times "f07 \\\(\\\);" 1 "gimple" } } 129 !$omp end target teams 130 131 !$omp teams 132 !$omp parallel do 133 do i = 1, 2 134 !$omp parallel do ! 5 constructs in OpenMP context, arch is 2^6, isa 2^7. 135 do j = 1, 2 136 call f13 () ! { dg-final { scan-tree-dump-times "f09 \\\(\\\);" 1 "gimple" { target { { i?86-*-* x86_64-*-* } && lp64 } } } } 137 ! { dg-final { scan-tree-dump-times "f11 \\\(\\\);" 1 "gimple" { target { { i?86-*-* x86_64-*-* } && { ! lp64 } } } } } 138 ! { dg-final { scan-tree-dump-times "f10 \\\(\\\);" 1 "gimple" { target { ! { i?86-*-* x86_64-*-* } } } } } 139 call f17 () ! { dg-final { scan-tree-dump-times "f14 \\\(\\\);" 1 "gimple" } } 140 call f21 () ! { dg-final { scan-tree-dump-times "f19 \\\(\\\);" 1 "gimple" } } 141 end do 142 !$omp end parallel do 143 end do 144 !$omp end parallel do 145 !$omp end teams 146 147 !$omp do 148 do i = 1, 2 149 !$omp parallel do 150 do j = 1, 2 151 call f25 (); ! { dg-final { scan-tree-dump-times "f22 \\\(\\\);" 1 "gimple" } } 152 call f29 (); ! { dg-final { scan-tree-dump-times "f27 \\\(\\\);" 1 "gimple" } } 153 end do 154 !$omp end parallel do 155 end do 156 !$omp end do 157 end subroutine 158end program 159 160