blob: 1e23c8633acac485803796ee63344cc9705db730 [file] [log] [blame]
// { dg-do compile }
// { dg-additional-options "-fdump-tree-gimple" }
// Test implicit marking of declare target to.
int foo () { return 1; }
int bar () { return 2; } // Implicitly marked (due to b)
int baz () { return 3; } // Implicitly marked (due to d via c)
int qux () { return 4; } // Implicitly marked (due to g via f and e)
int a = foo ();
int b = bar (); // Explicitly marked
int c = baz (); // Implicitly marked (due to d)
int *d = &c; // Explicitly marked
int e = qux (); // Implicitly marked (due to g via f)
int f = e + 1; // Implicitly marked (due to g)
int *g = &f; // Explicitly marked
#pragma omp declare target to(b, d, g)
// { dg-final { scan-tree-dump-not "__attribute__\\\(\\\(omp declare target\\\)\\\)\\\nint foo \\\(\\\)" "gimple" } }
// { dg-final { scan-tree-dump "__attribute__\\\(\\\(omp declare target\\\)\\\)\\\nint bar \\\(\\\)" "gimple" } }
// { dg-final { scan-tree-dump "__attribute__\\\(\\\(omp declare target\\\)\\\)\\\nint baz \\\(\\\)" "gimple" } }
// { dg-final { scan-tree-dump "__attribute__\\\(\\\(omp declare target\\\)\\\)\\\nint qux \\\(\\\)" "gimple" } }
// { dg-final { scan-assembler-not "\\\.offload_var_table:\\n.+\\\.quad\\s+a" { target { offloading_enabled } } } }
// { dg-final { scan-assembler "\\\.offload_var_table:\\n.+\\\.quad\\s+b" { target { offloading_enabled } } } }
// { dg-final { scan-assembler "\\\.offload_var_table:\\n.+\\\.quad\\s+c" { target { offloading_enabled } } } }
// { dg-final { scan-assembler "\\\.offload_var_table:\\n.+\\\.quad\\s+d" { target { offloading_enabled } } } }
// { dg-final { scan-assembler "\\\.offload_var_table:\\n.+\\\.quad\\s+e" { target { offloading_enabled } } } }
// { dg-final { scan-assembler "\\\.offload_var_table:\\n.+\\\.quad\\s+f" { target { offloading_enabled } } } }
// { dg-final { scan-assembler "\\\.offload_var_table:\\n.+\\\.quad\\s+g" { target { offloading_enabled } } } }