1! { dg-do compile } 2! { dg-additional-options "-cpp -foffload=disable -fdump-tree-gimple" } 3! { dg-additional-options "-mavx512bw" { target { i?86-*-* x86_64-*-* } } } 4 5#undef i386 6 7program main 8 !$omp declare target to (test3) 9contains 10 subroutine f01 () 11 end subroutine 12 subroutine f02 () 13 !$omp declare variant (f01) match (device={isa(avx512f,avx512bw)}) 14 end subroutine 15 subroutine f03 () 16 end subroutine 17 subroutine f04 () 18 !$omp declare variant (f03) match (device={kind("any"),arch(x86_64),isa(avx512f,avx512bw)}) 19 end subroutine 20 subroutine f05 () 21 end subroutine 22 subroutine f06 () 23 !$omp declare variant (f05) match (device={kind(gpu)}) 24 end subroutine 25 subroutine f07 () 26 end subroutine 27 subroutine f08 () 28 !$omp declare variant (f07) match (device={kind(cpu)}) 29 end subroutine 30 subroutine f09 () 31 end subroutine 32 subroutine f10 () 33 !$omp declare variant (f09) match (device={isa(sm_35)}) 34 end subroutine 35 subroutine f11 () 36 end subroutine 37 subroutine f12 () 38 !$omp declare variant (f11) match (device={arch("nvptx")}) 39 end subroutine 40 subroutine f13 () 41 end subroutine 42 subroutine f14 () 43 !$omp declare variant (f13) match (device={arch(i386),isa("sse4")}) 44 end subroutine 45 subroutine f15 () 46 end subroutine 47 subroutine f16 () 48 !$omp declare variant (f15) match (device={isa(sse4,ssse3),arch(i386)}) 49 end subroutine 50 subroutine f17 () 51 end subroutine 52 subroutine f18 () 53 !$omp declare variant (f17) match (device={kind(any,fpga)}) 54 end subroutine 55 56 subroutine test1 () 57 !$omp declare target 58 integer :: i 59 60 call f02 () ! { dg-final { scan-tree-dump-times "f01 \\\(\\\);" 1 "gimple" { target i?86-*-* x86_64-*-* } } } 61 ! { dg-final { scan-tree-dump-times "f02 \\\(\\\);" 1 "gimple" { target { ! { i?86-*-* x86_64-*-* } } } } } 62 call f14 () ! { dg-final { scan-tree-dump-times "f13 \\\(\\\);" 1 "gimple" { target ia32 } } } 63 ! { dg-final { scan-tree-dump-times "f14 \\\(\\\);" 1 "gimple" { target { ! ia32 } } } } 64 call f18 () ! { dg-final { scan-tree-dump-times "f18 \\\(\\\);" 1 "gimple" } } */ 65 end subroutine 66 67#if defined(__i386__) || defined(__x86_64__) 68 __attribute__((target ("avx512f,avx512bw"))) 69#endif 70 subroutine test2 () 71 !$omp target 72 call f04 () ! { dg-final { scan-tree-dump-times "f03 \\\(\\\);" 1 "gimple" { target { { i?86-*-* x86_64-*-* } && lp64 } } } } 73 ! { dg-final { scan-tree-dump-times "f04 \\\(\\\);" 1 "gimple" { target { { ! lp64 } || { ! { i?86-*-* x86_64-*-* } } } } } } 74 !$omp end target 75 !$omp target 76 call f16 () ! { dg-final { scan-tree-dump-times "f15 \\\(\\\);" 1 "gimple" { target ia32 } } } 77 ! { dg-final { scan-tree-dump-times "f16 \\\(\\\);" 1 "gimple" { target { ! ia32 } } } } 78 !$omp end target 79 end subroutine 80 81 subroutine test3 () 82 call f06 () ! { dg-final { scan-tree-dump-times "f06 \\\(\\\);" 1 "gimple" { target { ! { nvptx*-*-* amdgcn*-*-* } } } } } 83 call f08 () ! { dg-final { scan-tree-dump-times "f07 \\\(\\\);" 1 "gimple" { target { ! { nvptx*-*-* amdgcn*-*-* } } } } } 84 end subroutine 85 86 subroutine test4 () 87 !$omp target 88 call f10 () ! { dg-final { scan-tree-dump-times "f10 \\\(\\\);" 1 "gimple" { target { ! { nvptx*-*-* amdgcn*-*-* } } } } } 89 !$omp end target 90 91 !$omp target 92 call f12 () ! { dg-final { scan-tree-dump-times "f12 \\\(\\\);" 1 "gimple" { target { ! { nvptx*-*-* } } } } } 93 ! { dg-final { scan-tree-dump-times "f11 \\\(\\\);" 1 "gimple" { target { nvptx*-*-* } } } } 94 !$omp end target 95 end subroutine 96end program 97 98