forked from OSchip/llvm-project
[OPENMP]Fix PR40513: lastprivate taskloop counter.
We don't need to use the predetermined data-sharing attributes for the loop counters if the user explicitly specified correct data-sharing attributes for such variables. llvm-svn: 352543
This commit is contained in:
parent
33c9d9a9fc
commit
c2cdff6ffa
|
@ -4866,10 +4866,7 @@ static bool checkOpenMPIterationSpace(
|
||||||
// lastprivate (for simd directives with several collapsed or ordered
|
// lastprivate (for simd directives with several collapsed or ordered
|
||||||
// loops).
|
// loops).
|
||||||
if (DVar.CKind == OMPC_unknown)
|
if (DVar.CKind == OMPC_unknown)
|
||||||
DVar = DSA.hasDSA(LCDecl, isOpenMPPrivate,
|
DSA.addDSA(LCDecl, LoopDeclRefExpr, PredeterminedCKind);
|
||||||
[](OpenMPDirectiveKind) -> bool { return true; },
|
|
||||||
/*FromParent=*/false);
|
|
||||||
DSA.addDSA(LCDecl, LoopDeclRefExpr, PredeterminedCKind);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(isOpenMPLoopDirective(DKind) && "DSA for non-loop vars");
|
assert(isOpenMPLoopDirective(DKind) && "DSA for non-loop vars");
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -DLAMBDA -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=LAMBDA %s
|
// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -DLAMBDA -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=LAMBDA %s
|
||||||
// RUN: %clang_cc1 -verify -fopenmp -x c++ -fblocks -DBLOCKS -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=BLOCKS %s
|
// RUN: %clang_cc1 -verify -fopenmp -x c++ -fblocks -DBLOCKS -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=BLOCKS %s
|
||||||
// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -DARRAY -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=ARRAY %s
|
// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -DARRAY -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=ARRAY %s
|
||||||
|
// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -DLOOP -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=LOOP %s
|
||||||
|
|
||||||
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
||||||
// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple x86_64-apple-darwin10 -emit-pch -o %t %s
|
// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -triple x86_64-apple-darwin10 -emit-pch -o %t %s
|
||||||
|
@ -11,11 +12,12 @@
|
||||||
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -std=c++11 -DLAMBDA -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -std=c++11 -DLAMBDA -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
||||||
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -fblocks -DBLOCKS -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -fblocks -DBLOCKS -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
||||||
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -std=c++11 -DARRAY -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -std=c++11 -DARRAY -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
|
||||||
|
// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -std=c++11 -DLOOP -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck -check-prefix=SIMD-ONLY0 %s
|
||||||
// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
|
// SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
|
||||||
// expected-no-diagnostics
|
// expected-no-diagnostics
|
||||||
// It doesn't pass on win32.
|
// It doesn't pass on win32.
|
||||||
// REQUIRES: shell
|
// REQUIRES: shell
|
||||||
#ifndef ARRAY
|
#if !defined(ARRAY) && !defined(LOOP)
|
||||||
#ifndef HEADER
|
#ifndef HEADER
|
||||||
#define HEADER
|
#define HEADER
|
||||||
|
|
||||||
|
@ -501,7 +503,7 @@ int main() {
|
||||||
// CHECK: ret i32
|
// CHECK: ret i32
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#else
|
#elif defined(ARRAY)
|
||||||
// ARRAY-LABEL: array_func
|
// ARRAY-LABEL: array_func
|
||||||
struct St {
|
struct St {
|
||||||
int a, b;
|
int a, b;
|
||||||
|
@ -522,5 +524,16 @@ void array_func(int n, float a[n], St s[2]) {
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
// LOOP-LABEL: loop
|
||||||
|
void loop() {
|
||||||
|
// LOOP: call i8* @__kmpc_omp_task_alloc(
|
||||||
|
// LOOP: call void @__kmpc_taskloop(
|
||||||
|
int i;
|
||||||
|
#pragma omp taskloop lastprivate(i)
|
||||||
|
for (i = 0; i < 10; ++i)
|
||||||
|
;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue