blob: 70f6b86c614c678e3fdb67add6ebcd3d617ab1f8 [file] [log] [blame]
/* Test that omp parallel simd schedule uses the correct max_vf for the
host system, when target directives are present. */
/* { dg-require-effective-target offload_target_any } */
/* { dg-do link } */
/* { dg-options "-fopenmp -O2 -fdump-tree-ompexp -foffload=-fdump-tree-optimized" } */
/* Fix a max_vf size so we can scan for it.
{ dg-additional-options "-msse2 -mno-avx" { target { x86_64-*-* i?86-*-* } } } */
#define N 1024
int a[N], b[N], c[N];
/* Test both static schedules and inline target directives. */
void
f2 (void)
{
int i;
#pragma omp target parallel for simd schedule (simd: static, 7)
for (i = 0; i < N; i++)
a[i] = b[i] + c[i];
}
/* Test both dynamic schedules and declare target functions. */
#pragma omp declare target
void
f3 (int *a, int *b, int *c)
{
int i;
#pragma omp parallel for simd schedule (simd : dynamic, 7)
for (i = 0; i < N; i++)
a[i] = b[i] + c[i];
}
#pragma omp end declare target
/* Make sure that the max_vf is used as an IFN.
{ dg-final { scan-tree-dump-times {GOMP_MAX_VF} 2 "ompexp" { target { x86_64-*-* i?86-*-* } } } } */
/* Make sure the max_vf is passed as a temporary variable.
{ dg-final { scan-tree-dump-times {__builtin_GOMP_parallel_loop_nonmonotonic_dynamic \(.*, D\.[0-9]*, 0\);} 1 "ompexp" { target { x86_64-*-* i?86-*-* } } } } */
/* Test SIMD offload devices
{ dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump-times {__builtin_GOMP_parallel_loop_nonmonotonic_dynamic \(.*, 64, 0\);} 1 "optimized" { target offload_target_amdgcn } } }
{ dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-times {__builtin_GOMP_parallel_loop_nonmonotonic_dynamic \(.*, 7, 0\);} 1 "optimized" { target offload_target_nvptx } } } */
int main() {}