[Clang][OpenMP] Bug fix Default clause variable category (#165276)
In the default clause taking care of new comments in the previous "Support for Default clause variable category" [157063](https://github.com/llvm/llvm-project/pull/157063) and adding a new test case. --------- Co-authored-by: Sunil Kuravinakop <kuravina@pe31.hpc.amslabs.hpecorp.net>
This commit is contained in:
parent
8aa7d823b0
commit
39774f9caf
@ -1364,15 +1364,15 @@ DSAStackTy::DSAVarData DSAStackTy::getDSA(const_iterator &Iter,
|
||||
DefaultDataSharingAttributes IterDA = Iter->DefaultAttr;
|
||||
switch (Iter->DefaultVCAttr) {
|
||||
case DSA_VC_aggregate:
|
||||
if (!VD->getType()->isAggregateType())
|
||||
if (!D->getType()->isAggregateType())
|
||||
IterDA = DSA_none;
|
||||
break;
|
||||
case DSA_VC_pointer:
|
||||
if (!VD->getType()->isPointerType())
|
||||
if (!D->getType()->isPointerType())
|
||||
IterDA = DSA_none;
|
||||
break;
|
||||
case DSA_VC_scalar:
|
||||
if (!VD->getType()->isScalarType())
|
||||
if (!D->getType()->isScalarType())
|
||||
IterDA = DSA_none;
|
||||
break;
|
||||
case DSA_VC_all:
|
||||
|
||||
@ -0,0 +1,92 @@
|
||||
// RUN: %clangxx -Xclang -verify -Wno-vla -fopenmp -fopenmp-version=60 -x c++ -S -emit-llvm %s -o - | FileCheck %s
|
||||
// expected-no-diagnostics
|
||||
#ifndef HEADER
|
||||
#define HEADER
|
||||
|
||||
#include <vector>
|
||||
|
||||
int global;
|
||||
#define VECTOR_SIZE 4
|
||||
int main (int argc, char **argv) {
|
||||
int i,n;
|
||||
int x;
|
||||
|
||||
n = VECTOR_SIZE;
|
||||
|
||||
#pragma omp parallel masked firstprivate(x) num_threads(2)
|
||||
{
|
||||
int *xPtr = nullptr;
|
||||
// scalar
|
||||
#pragma omp task default(shared:scalar)
|
||||
{
|
||||
xPtr = &x;
|
||||
}
|
||||
#pragma omp taskwait
|
||||
|
||||
// pointer
|
||||
#pragma omp task default(shared:pointer) shared(x)
|
||||
{
|
||||
xPtr = &x;
|
||||
}
|
||||
#pragma omp taskwait
|
||||
}
|
||||
|
||||
int *aggregate[VECTOR_SIZE] = {0,0,0,0};
|
||||
|
||||
#pragma omp parallel masked num_threads(2)
|
||||
{
|
||||
// aggregate
|
||||
#pragma omp task default(shared:aggregate)
|
||||
for(i=0;i<n;i++) {
|
||||
aggregate[i] = &x;
|
||||
}
|
||||
#pragma omp taskwait
|
||||
|
||||
#pragma omp task default(shared:aggregate) shared(x)
|
||||
for(i=0;i<n;i++) {
|
||||
aggregate[i] = &x;
|
||||
}
|
||||
#pragma omp taskwait
|
||||
|
||||
// all
|
||||
#pragma omp task default(shared:all)
|
||||
for(i=0;i<n;i++) {
|
||||
aggregate[i] = &x;
|
||||
}
|
||||
#pragma omp taskwait
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// CHECK-LABEL: define {{.*}}main.omp_outlined{{.*}}
|
||||
// CHECK-NEXT: entry:
|
||||
// CHECK: %x.addr = alloca{{.*}}
|
||||
// CHECK: %xPtr = alloca{{.*}}
|
||||
// CHECK: store ptr null, ptr %xPtr{{.*}}
|
||||
// CHECK: store ptr %xPtr{{.*}}
|
||||
// CHECK: store ptr %x.addr{{.*}}
|
||||
// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}
|
||||
// CHECK: ret void
|
||||
//
|
||||
// CHECK: define {{.*}}main.omp_outlined{{.*}}
|
||||
// CHECK-NEXT: entry:
|
||||
// CHECK-DAG: %i.addr = alloca{{.*}}
|
||||
// CHECK-DAG: %n.addr = alloca{{.*}}
|
||||
// CHECK-DAG: %aggregate.addr = alloca{{.*}}
|
||||
// CHECK-DAG: %x.addr = alloca{{.*}}
|
||||
// CHECK: [[TMP0:%.*]] = load{{.*}}%i.addr{{.*}}
|
||||
// CHECK-NEXT: [[TMP1:%.*]] = load{{.*}}%n.addr{{.*}}
|
||||
// CHECK-NEXT: [[TMP2:%.*]] = load{{.*}}%aggregate.addr{{.*}}
|
||||
// CHECK-NEXT: [[TMP3:%.*]] = load{{.*}}%x.addr{{.*}}
|
||||
// CHECK: store ptr [[TMP2]]{{.*}}
|
||||
// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}
|
||||
// CHECK: store ptr [[TMP2]]{{.*}}
|
||||
// CHECK: store ptr [[TMP3]]{{.*}}
|
||||
// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}
|
||||
// CHECK: store ptr [[TMP0]]{{.*}}
|
||||
// CHECK: store ptr [[TMP1]]{{.*}}
|
||||
// CHECK: store ptr [[TMP2]]{{.*}}
|
||||
// CHECK: store ptr [[TMP3]]{{.*}}
|
||||
// CHECK-NEXT: {{.*}}call{{.*}}__kmpc_omp_task_alloc{{.*}}
|
||||
// CHECK: ret void
|
||||
Loading…
x
Reference in New Issue
Block a user