aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/gomp/declare-variant-1.c
blob: f130a4130b6b0de96564561e84b2ee7af432fe5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
int foo (int, int, int *);
int bar (int, int, int *);
int foobar (int, int, int *);
#pragma omp declare variant (foo) \
  match (construct={parallel,for},\
	 device={isa(avx512f,avx512vl),kind(host,cpu)},\
	 implementation={vendor(score(0):gnu),unified_shared_memory},\
	 user={condition(score(0):0)})
#pragma omp declare variant (foo) \
  match (construct={parallel,for},\
	 device={isa(avx512f,avx512vl),kind(host,cpu)},\
	 implementation={vendor(score(0):gnu),self_maps},\
	 user={condition(score(0):0)})
#pragma omp declare variant (bar) \
  match (device={arch(x86_64,powerpc64),isa(avx512f,popcntb)}, \
	 implementation={atomic_default_mem_order(seq_cst),made_up_selector("foo", 13, "bar")}, \
	 user={condition(3-3)})
/* { dg-warning "unknown selector 'made_up_selector'" "" { target *-*-* } .-2 } */
int baz (int, int, int *);

int
qux (void)
{
  int i = 3;
  return baz (1, 2, &i);
}

int quux (int);

void
corge (void)
{
  int i;
  #pragma omp declare variant (quux) match (construct={parallel,for})
  extern int waldo (int);
  waldo (5);
  #pragma omp parallel for
  for (i = 0; i < 3; i++)
    waldo (6);
  #pragma omp parallel
  #pragma omp taskgroup
  #pragma omp for
  for (i = 0; i < 3; i++)
    waldo (7);
  #pragma omp parallel
  #pragma omp master    
  waldo (8);
}

#pragma omp declare variant (bar) match \
  (implementation={atomic_default_mem_order(relaxed), \
		   unified_address, unified_shared_memory, \
		   dynamic_allocators, reverse_offload})
int baz2 (int x, int y, int *z)
{
  return x + y + *z;
}

#pragma omp declare variant (bar) match \
  (implementation={atomic_default_mem_order(score(3): acq_rel)})
int baz3 (int, int, int *);