brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 8aa5855 Raw
87 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -x c++ -emit-llvm %s -o - | FileCheck %s2// expected-no-diagnostics3#ifndef HEADER4#define HEADER5 6int global;7#define VECTOR_SIZE 48 9int main (int argc, char **argv) {10  int i,n;11  int x;12 13  n = VECTOR_SIZE;14 15  #pragma omp parallel masked firstprivate(x) num_threads(2)16  {17     int *xPtr = nullptr;18     // scalar19     #pragma omp task default(shared:scalar)20     {21       xPtr = &x;22     }23     #pragma omp taskwait24 25     // pointer26     #pragma omp task default(shared:pointer) shared(x)27     {28       xPtr = &x;29     }30     #pragma omp taskwait31  }32 33  int *aggregate[VECTOR_SIZE] = {0,0,0,0};34  35  #pragma omp parallel masked num_threads(2)36  {37     // aggregate38     #pragma omp task default(shared:aggregate)39     for(i=0;i<n;i++) {40       aggregate[i] = &x;41     }42     #pragma omp taskwait43 44     #pragma omp task default(shared:aggregate) shared(x)45     for(i=0;i<n;i++) {46       aggregate[i] = &x;47     }48     #pragma omp taskwait49 50     // all51     #pragma omp task default(shared:all)52     for(i=0;i<n;i++) {53       aggregate[i] = &x;54     }55     #pragma omp taskwait56  }57}58 59#endif60 61// CHECK-LABEL: define {{.*}}main.omp_outlined{{.*}}62// CHECK: store ptr null, ptr{{.*}}63// CHECK-NEXT: {{.*}}getelementptr {{.*}}64// CHECK-NEXT: store ptr {{.*}}65// CHECK-NEXT: {{.*}}getelementptr {{.*}}66// CHECK-NEXT: store ptr {{.*}}67// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}68// CHECK: ret void69//70// CHECK: define {{.*}}main.omp_outlined{{.*}}71// CHECK: {{.*}}getelementptr {{.*}}72// CHECK-NEXT: store ptr {{.*}}73// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}74// CHECK: store ptr {{.*}}75// CHECK-NEXT: {{.*}}getelementptr {{.*}}76// CHECK-NEXT: store ptr {{.*}}77// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}78// CHECK: store ptr {{.*}}79// CHECK-NEXT: {{.*}}getelementptr {{.*}}80// CHECK-NEXT: store ptr {{.*}}81// CHECK-NEXT: {{.*}}getelementptr {{.*}}82// CHECK-NEXT: store ptr {{.*}}83// CHECK-NEXT: {{.*}}getelementptr {{.*}}84// CHECK-NEXT: store ptr {{.*}}85// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}86// CHECK: ret void87