diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2015-09-03 08:45:56 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2015-09-03 08:45:56 +0000 |
commit | a7a4f76089042443c19b829a178206a45a2846d1 (patch) | |
tree | e9585cd2cd6d2183768f713365dafd3a3eb13bb6 | |
parent | 878fd7ec174af3cbfb26977ca93d98dd0f8280f3 (diff) |
[OPENMP 4.1] Codegen for extended format of 'if' clause.
Fixed codegen for extended format of 'if' clauses with special 'directive-name-modifier' + ast-print tests for extended format of 'if' clause.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246748 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGStmtOpenMP.cpp | 16 | ||||
-rw-r--r-- | test/OpenMP/parallel_ast_print.cpp | 16 | ||||
-rw-r--r-- | test/OpenMP/parallel_for_ast_print.cpp | 4 | ||||
-rw-r--r-- | test/OpenMP/parallel_for_simd_ast_print.cpp | 16 | ||||
-rw-r--r-- | test/OpenMP/parallel_if_codegen.cpp | 4 | ||||
-rw-r--r-- | test/OpenMP/parallel_sections_ast_print.cpp | 8 | ||||
-rw-r--r-- | test/OpenMP/target_ast_print.cpp | 8 | ||||
-rw-r--r-- | test/OpenMP/target_data_ast_print.cpp | 4 | ||||
-rw-r--r-- | test/OpenMP/task_ast_print.cpp | 12 | ||||
-rw-r--r-- | test/OpenMP/task_if_codegen.cpp | 6 |
10 files changed, 53 insertions, 41 deletions
diff --git a/lib/CodeGen/CGStmtOpenMP.cpp b/lib/CodeGen/CGStmtOpenMP.cpp index 572608dfed..b5e7db5350 100644 --- a/lib/CodeGen/CGStmtOpenMP.cpp +++ b/lib/CodeGen/CGStmtOpenMP.cpp @@ -475,8 +475,12 @@ static void emitCommonOMPParallelDirective(CodeGenFunction &CGF, CGF, ProcBindClause->getProcBindKind(), ProcBindClause->getLocStart()); } const Expr *IfCond = nullptr; - if (const auto *C = S.getSingleClause<OMPIfClause>()) { - IfCond = C->getCondition(); + for (const auto *C : S.getClausesOfKind<OMPIfClause>()) { + if (C->getNameModifier() == OMPD_unknown || + C->getNameModifier() == OMPD_parallel) { + IfCond = C->getCondition(); + break; + } } CGF.CGM.getOpenMPRuntime().emitParallelCall(CGF, S.getLocStart(), OutlinedFn, CapturedStruct, IfCond); @@ -1605,8 +1609,12 @@ void CodeGenFunction::EmitOMPTaskDirective(const OMPTaskDirective &S) { } auto SharedsTy = getContext().getRecordType(CS->getCapturedRecordDecl()); const Expr *IfCond = nullptr; - if (const auto *C = S.getSingleClause<OMPIfClause>()) { - IfCond = C->getCondition(); + for (const auto *C : S.getClausesOfKind<OMPIfClause>()) { + if (C->getNameModifier() == OMPD_unknown || + C->getNameModifier() == OMPD_task) { + IfCond = C->getCondition(); + break; + } } CGM.getOpenMPRuntime().emitTaskCall( *this, S.getLocStart(), S, Tied, Final, OutlinedFn, SharedsTy, diff --git a/test/OpenMP/parallel_ast_print.cpp b/test/OpenMP/parallel_ast_print.cpp index c3bd416a6d..a04d0496d2 100644 --- a/test/OpenMP/parallel_ast_print.cpp +++ b/test/OpenMP/parallel_ast_print.cpp @@ -35,7 +35,7 @@ T tmain(T argc, T *argv) { S<T> s; #pragma omp parallel a=2; -#pragma omp parallel default(none), private(argc,b) firstprivate(argv) shared (d) if (argc > 0) num_threads(C) copyin(S<T>::TS) proc_bind(master) reduction(+:c) reduction(max:e) +#pragma omp parallel default(none), private(argc,b) firstprivate(argv) shared (d) if (parallel:argc > 0) num_threads(C) copyin(S<T>::TS) proc_bind(master) reduction(+:c) reduction(max:e) foo(); #pragma omp parallel if (C) num_threads(s) proc_bind(close) reduction(^:e, f) reduction(&& : g) foo(); @@ -48,7 +48,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: S<int> s; // CHECK-NEXT: #pragma omp parallel // CHECK-NEXT: a = 2; -// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) num_threads(5) copyin(S<int>::TS) proc_bind(master) reduction(+: c) reduction(max: e) +// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(5) copyin(S<int>::TS) proc_bind(master) reduction(+: c) reduction(max: e) // CHECK-NEXT: foo() // CHECK-NEXT: #pragma omp parallel if(5) num_threads(s) proc_bind(close) reduction(^: e,f) reduction(&&: g) // CHECK-NEXT: foo() @@ -58,7 +58,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: S<long> s; // CHECK-NEXT: #pragma omp parallel // CHECK-NEXT: a = 2; -// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) num_threads(1) copyin(S<long>::TS) proc_bind(master) reduction(+: c) reduction(max: e) +// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(1) copyin(S<long>::TS) proc_bind(master) reduction(+: c) reduction(max: e) // CHECK-NEXT: foo() // CHECK-NEXT: #pragma omp parallel if(1) num_threads(s) proc_bind(close) reduction(^: e,f) reduction(&&: g) // CHECK-NEXT: foo() @@ -68,7 +68,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: S<T> s; // CHECK-NEXT: #pragma omp parallel // CHECK-NEXT: a = 2; -// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) num_threads(C) copyin(S<T>::TS) proc_bind(master) reduction(+: c) reduction(max: e) +// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(C) copyin(S<T>::TS) proc_bind(master) reduction(+: c) reduction(max: e) // CHECK-NEXT: foo() // CHECK-NEXT: #pragma omp parallel if(C) num_threads(s) proc_bind(close) reduction(^: e,f) reduction(&&: g) // CHECK-NEXT: foo() @@ -86,10 +86,14 @@ int main (int argc, char **argv) { // CHECK-NEXT: #pragma omp parallel a=2; // CHECK-NEXT: a = 2; -#pragma omp parallel default(none), private(argc,b) firstprivate(argv) if (argc > 0) num_threads(ee) copyin(a) proc_bind(spread) reduction(| : c, d) reduction(* : e) -// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) if(argc > 0) num_threads(ee) copyin(a) proc_bind(spread) reduction(|: c,d) reduction(*: e) +#pragma omp parallel default(none), private(argc,b) firstprivate(argv) if (parallel: argc > 0) num_threads(ee) copyin(a) proc_bind(spread) reduction(| : c, d) reduction(* : e) +// CHECK-NEXT: #pragma omp parallel default(none) private(argc,b) firstprivate(argv) if(parallel: argc > 0) num_threads(ee) copyin(a) proc_bind(spread) reduction(|: c,d) reduction(*: e) foo(); // CHECK-NEXT: foo(); +// CHECK-NEXT: #pragma omp parallel if(b) num_threads(c) proc_bind(close) reduction(^: e,f) reduction(&&: g) +// CHECK-NEXT: foo() +#pragma omp parallel if (b) num_threads(c) proc_bind(close) reduction(^:e, f) reduction(&& : g) + foo(); return tmain<int, 5>(b, &b) + tmain<long, 1>(x, &x); } diff --git a/test/OpenMP/parallel_for_ast_print.cpp b/test/OpenMP/parallel_for_ast_print.cpp index 7450c7531d..197cd0fe3f 100644 --- a/test/OpenMP/parallel_for_ast_print.cpp +++ b/test/OpenMP/parallel_for_ast_print.cpp @@ -21,7 +21,7 @@ T tmain(T argc) { a = 2; // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: a = 2; -#pragma omp parallel for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) if (argc) num_threads(N) default(shared) shared(e) reduction(+ : h) linear(a:N) +#pragma omp parallel for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) if (parallel :argc) num_threads(N) default(shared) shared(e) reduction(+ : h) linear(a:N) for (int i = 0; i < 2; ++i) for (int j = 0; j < 2; ++j) for (int j = 0; j < 2; ++j) @@ -33,7 +33,7 @@ T tmain(T argc) { for (int j = 0; j < 2; ++j) for (int j = 0; j < 2; ++j) foo(); - // CHECK-NEXT: #pragma omp parallel for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) if(argc) num_threads(N) default(shared) shared(e) reduction(+: h) linear(a: N) + // CHECK-NEXT: #pragma omp parallel for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) if(parallel: argc) num_threads(N) default(shared) shared(e) reduction(+: h) linear(a: N) // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: for (int j = 0; j < 2; ++j) // CHECK-NEXT: for (int j = 0; j < 2; ++j) diff --git a/test/OpenMP/parallel_for_simd_ast_print.cpp b/test/OpenMP/parallel_for_simd_ast_print.cpp index ef0c002f21..e23c2cbd24 100644 --- a/test/OpenMP/parallel_for_simd_ast_print.cpp +++ b/test/OpenMP/parallel_for_simd_ast_print.cpp @@ -14,8 +14,8 @@ template<class T, class N> T reduct(T* arr, N num) { N myind; T sum = (T)0; // CHECK: T sum = (T)0; -#pragma omp parallel for simd private(myind, g_ind), linear(ind), aligned(arr) -// CHECK-NEXT: #pragma omp parallel for simd private(myind,g_ind) linear(ind) aligned(arr) +#pragma omp parallel for simd private(myind, g_ind), linear(ind), aligned(arr) if (parallel :num) +// CHECK-NEXT: #pragma omp parallel for simd private(myind,g_ind) linear(ind) aligned(arr) if(parallel: num) for (i = 0; i < num; ++i) { myind = ind; T cur = arr[myind]; @@ -35,8 +35,8 @@ template<class T> struct S { // CHECK: T res; // CHECK: T val; // CHECK: T lin = 0; - #pragma omp parallel for simd private(val) safelen(7) linear(lin : -5) lastprivate(res) simdlen(5) -// CHECK-NEXT: #pragma omp parallel for simd private(val) safelen(7) linear(lin: -5) lastprivate(res) simdlen(5) + #pragma omp parallel for simd private(val) safelen(7) linear(lin : -5) lastprivate(res) simdlen(5) if(7) +// CHECK-NEXT: #pragma omp parallel for simd private(val) safelen(7) linear(lin: -5) lastprivate(res) simdlen(5) if(7) for (T i = 7; i < m_a; ++i) { val = v[i-7] + m_a; res = val; @@ -92,17 +92,17 @@ int main (int argc, char **argv) { int k1=0,k2=0; static int *a; // CHECK: static int *a; -#pragma omp parallel for simd -// CHECK-NEXT: #pragma omp parallel for simd +#pragma omp parallel for simd if(parallel :b) +// CHECK-NEXT: #pragma omp parallel for simd if(parallel: b) for (int i=0; i < 2; ++i)*a=2; // CHECK-NEXT: for (int i = 0; i < 2; ++i) // CHECK-NEXT: *a = 2; #pragma omp parallel -#pragma omp parallel for simd private(argc, b),lastprivate(d,f) collapse(2) aligned(a : 4) ,firstprivate( g ) +#pragma omp parallel for simd private(argc, b),lastprivate(d,f) collapse(2) aligned(a : 4) ,firstprivate( g ) if(g) for (int i = 0; i < 10; ++i) for (int j = 0; j < 10; ++j) {foo(); k1 += 8; k2 += 8;} // CHECK-NEXT: #pragma omp parallel -// CHECK-NEXT: #pragma omp parallel for simd private(argc,b) lastprivate(d,f) collapse(2) aligned(a: 4) firstprivate(g) +// CHECK-NEXT: #pragma omp parallel for simd private(argc,b) lastprivate(d,f) collapse(2) aligned(a: 4) firstprivate(g) if(g) // CHECK-NEXT: for (int i = 0; i < 10; ++i) // CHECK-NEXT: for (int j = 0; j < 10; ++j) { // CHECK-NEXT: foo(); diff --git a/test/OpenMP/parallel_if_codegen.cpp b/test/OpenMP/parallel_if_codegen.cpp index ace20ecd83..e711b5d299 100644 --- a/test/OpenMP/parallel_if_codegen.cpp +++ b/test/OpenMP/parallel_if_codegen.cpp @@ -18,7 +18,7 @@ int Arg; void gtid_test() { // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, {{.+}}* [[GTID_TEST_REGION1:@.+]] to void #pragma omp parallel -#pragma omp parallel if (false) +#pragma omp parallel if (parallel: false) gtid_test(); // CHECK: ret void } @@ -43,7 +43,7 @@ int tmain(T Arg) { fn1(); #pragma omp parallel if (false) fn2(); -#pragma omp parallel if (Arg) +#pragma omp parallel if (parallel: Arg) fn3(); return 0; } diff --git a/test/OpenMP/parallel_sections_ast_print.cpp b/test/OpenMP/parallel_sections_ast_print.cpp index 7667e45bfd..9f5c1fadbe 100644 --- a/test/OpenMP/parallel_sections_ast_print.cpp +++ b/test/OpenMP/parallel_sections_ast_print.cpp @@ -37,7 +37,7 @@ T tmain(T argc, T *argv) { { a = 2; } -#pragma omp parallel sections default(none), private(argc, b) firstprivate(argv) shared(d) if (argc > 0) num_threads(C) copyin(S < T > ::TS) proc_bind(master) reduction(+ : c) reduction(max : e) +#pragma omp parallel sections default(none), private(argc, b) firstprivate(argv) shared(d) if (parallel: argc > 0) num_threads(C) copyin(S < T > ::TS) proc_bind(master) reduction(+ : c) reduction(max : e) { foo(); } @@ -58,7 +58,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: { // CHECK-NEXT: a = 2; // CHECK-NEXT: } -// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) num_threads(5) copyin(S<int>::TS) proc_bind(master) reduction(+: c) reduction(max: e) +// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(5) copyin(S<int>::TS) proc_bind(master) reduction(+: c) reduction(max: e) // CHECK-NEXT: { // CHECK-NEXT: foo(); // CHECK-NEXT: } @@ -76,7 +76,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: { // CHECK-NEXT: a = 2; // CHECK-NEXT: } -// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) num_threads(1) copyin(S<long>::TS) proc_bind(master) reduction(+: c) reduction(max: e) +// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(1) copyin(S<long>::TS) proc_bind(master) reduction(+: c) reduction(max: e) // CHECK-NEXT: { // CHECK-NEXT: foo(); // CHECK-NEXT: } @@ -94,7 +94,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: { // CHECK-NEXT: a = 2; // CHECK-NEXT: } -// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) num_threads(C) copyin(S<T>::TS) proc_bind(master) reduction(+: c) reduction(max: e) +// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(C) copyin(S<T>::TS) proc_bind(master) reduction(+: c) reduction(max: e) // CHECK-NEXT: { // CHECK-NEXT: foo(); // CHECK-NEXT: } diff --git a/test/OpenMP/target_ast_print.cpp b/test/OpenMP/target_ast_print.cpp index 6955cf3111..89b5205d8e 100644 --- a/test/OpenMP/target_ast_print.cpp +++ b/test/OpenMP/target_ast_print.cpp @@ -12,7 +12,7 @@ template <typename T, int C> T tmain(T argc, T *argv) { #pragma omp target foo(); -#pragma omp target if (argc > 0) +#pragma omp target if (target:argc > 0) foo(); #pragma omp target if (C) foo(); @@ -22,21 +22,21 @@ T tmain(T argc, T *argv) { // CHECK: template <typename T = int, int C = 5> int tmain(int argc, int *argv) { // CHECK-NEXT: #pragma omp target // CHECK-NEXT: foo(); -// CHECK-NEXT: #pragma omp target if(argc > 0) +// CHECK-NEXT: #pragma omp target if(target: argc > 0) // CHECK-NEXT: foo() // CHECK-NEXT: #pragma omp target if(5) // CHECK-NEXT: foo() // CHECK: template <typename T = char, int C = 1> char tmain(char argc, char *argv) { // CHECK-NEXT: #pragma omp target // CHECK-NEXT: foo(); -// CHECK-NEXT: #pragma omp target if(argc > 0) +// CHECK-NEXT: #pragma omp target if(target: argc > 0) // CHECK-NEXT: foo() // CHECK-NEXT: #pragma omp target if(1) // CHECK-NEXT: foo() // CHECK: template <typename T, int C> T tmain(T argc, T *argv) { // CHECK-NEXT: #pragma omp target // CHECK-NEXT: foo(); -// CHECK-NEXT: #pragma omp target if(argc > 0) +// CHECK-NEXT: #pragma omp target if(target: argc > 0) // CHECK-NEXT: foo() // CHECK-NEXT: #pragma omp target if(C) // CHECK-NEXT: foo() diff --git a/test/OpenMP/target_data_ast_print.cpp b/test/OpenMP/target_data_ast_print.cpp index ec60a22657..06b46166cd 100644 --- a/test/OpenMP/target_data_ast_print.cpp +++ b/test/OpenMP/target_data_ast_print.cpp @@ -17,8 +17,8 @@ int main (int argc, char **argv) { // CHECK: #pragma omp target data a=2; // CHECK-NEXT: a = 2; -#pragma omp target data if (b) -// CHECK: #pragma omp target data if(b) +#pragma omp target data if (target data: b) +// CHECK: #pragma omp target data if(target data: b) foo(); // CHECK-NEXT: foo(); diff --git a/test/OpenMP/task_ast_print.cpp b/test/OpenMP/task_ast_print.cpp index 2d49444b8b..c87dbdd5ea 100644 --- a/test/OpenMP/task_ast_print.cpp +++ b/test/OpenMP/task_ast_print.cpp @@ -34,7 +34,7 @@ T tmain(T argc, T *argv) { static T a; S<T> s; T arr[argc]; -#pragma omp task untied depend(in : argc, argv[b:argc], arr[:]) +#pragma omp task untied depend(in : argc, argv[b:argc], arr[:]) if (task : argc > 0) a = 2; #pragma omp task default(none), private(argc, b) firstprivate(argv) shared(d) if (argc > 0) final(S<T>::TS > 0) foo(); @@ -48,7 +48,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: static int a; // CHECK-NEXT: S<int> s; // CHECK-NEXT: int arr[argc]; -// CHECK-NEXT: #pragma omp task untied depend(in : argc,argv[b:argc],arr[:]) +// CHECK-NEXT: #pragma omp task untied depend(in : argc,argv[b:argc],arr[:]) if(task: argc > 0) // CHECK-NEXT: a = 2; // CHECK-NEXT: #pragma omp task default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) final(S<int>::TS > 0) // CHECK-NEXT: foo() @@ -59,7 +59,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: static long a; // CHECK-NEXT: S<long> s; // CHECK-NEXT: long arr[argc]; -// CHECK-NEXT: #pragma omp task untied depend(in : argc,argv[b:argc],arr[:]) +// CHECK-NEXT: #pragma omp task untied depend(in : argc,argv[b:argc],arr[:]) if(task: argc > 0) // CHECK-NEXT: a = 2; // CHECK-NEXT: #pragma omp task default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) final(S<long>::TS > 0) // CHECK-NEXT: foo() @@ -70,7 +70,7 @@ T tmain(T argc, T *argv) { // CHECK-NEXT: static T a; // CHECK-NEXT: S<T> s; // CHECK-NEXT: T arr[argc]; -// CHECK-NEXT: #pragma omp task untied depend(in : argc,argv[b:argc],arr[:]) +// CHECK-NEXT: #pragma omp task untied depend(in : argc,argv[b:argc],arr[:]) if(task: argc > 0) // CHECK-NEXT: a = 2; // CHECK-NEXT: #pragma omp task default(none) private(argc,b) firstprivate(argv) shared(d) if(argc > 0) final(S<T>::TS > 0) // CHECK-NEXT: foo() @@ -87,8 +87,8 @@ int main(int argc, char **argv) { #pragma omp threadprivate(a) Enum ee; // CHECK: Enum ee; -#pragma omp task untied mergeable depend(out:argv[1], (arr)[0:]) - // CHECK-NEXT: #pragma omp task untied mergeable depend(out : argv[1],(arr)[0:]) +#pragma omp task untied mergeable depend(out:argv[1], (arr)[0:]) if(task: argc > 0) + // CHECK-NEXT: #pragma omp task untied mergeable depend(out : argv[1],(arr)[0:]) if(task: argc > 0) a = 2; // CHECK-NEXT: a = 2; #pragma omp task default(none), private(argc, b) firstprivate(argv) if (argc > 0) final(a > 0) depend(inout : a, argv[:argc],arr[:a]) diff --git a/test/OpenMP/task_if_codegen.cpp b/test/OpenMP/task_if_codegen.cpp index d08c27f5a4..cbdf117a05 100644 --- a/test/OpenMP/task_if_codegen.cpp +++ b/test/OpenMP/task_if_codegen.cpp @@ -23,7 +23,7 @@ int Arg; void gtid_test() { // CHECK: call void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 1, {{.+}}* [[GTID_TEST_REGION1:@.+]] to void #pragma omp parallel -#pragma omp task if (false) +#pragma omp task if (task: false) gtid_test(); // CHECK: ret void } @@ -45,13 +45,13 @@ void gtid_test() { template <typename T> int tmain(T Arg) { -#pragma omp task if (true) +#pragma omp task if (task: true) fn1(); #pragma omp task if (false) fn2(); #pragma omp task if (Arg) fn3(); -#pragma omp task if (Arg) depend(in : Arg) +#pragma omp task if (task: Arg) depend(in : Arg) fn4(); #pragma omp task if (Arg) depend(out : Arg) fn5(); |