https://bugs.llvm.org/show_bug.cgi?id=40253

            Bug ID: 40253
           Summary: combined target teams implements shared clause as
                    firstprivate
           Product: OpenMP
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Clang Compiler Support
          Assignee: unassignedclangb...@nondot.org
          Reporter: jdenny.o...@gmail.com
                CC: a.bat...@hotmail.com, llvm-bugs@lists.llvm.org

Clang implements `shared(n)` on `omp target teams` as firstprivate instead of
shared.  For example, n is not shared in the following example:

```
$ cat test.c
#include <omp.h>
#include <stdio.h>
int main() {
  int n = 0;
  #pragma omp target teams shared(n) num_teams(2)
  #pragma omp parallel num_threads(1)
  {
    #pragma omp atomic update
    ++n;
    printf("n=%d, team=%d\n", n, omp_get_team_num());
  }
  return 0;
}

$ clang -fopenmp test.c && ./a.out
n=1, team=0
n=1, team=1
```

However, if I split the `target teams` directive into two directives, I see
results indicating n is shared:

```
$ cat test.c
#include <omp.h>
#include <stdio.h>
int main() {
  int n = 0;
  #pragma omp target 
  #pragma omp teams shared(n) num_teams(2)
  #pragma omp parallel num_threads(1)
  {
    #pragma omp atomic update
    ++n;
    printf("n=%d, team=%d\n", n, omp_get_team_num());
  }
  return 0;
}

$ clang -fopenmp test.c && ./a.out
n=1, team=0
n=2, team=1
```

The LLVM IR shows that n is passed to the teams by value in the first case and
by pointer in the second.

This bugzilla was suggested at:

  https://reviews.llvm.org/D56113#1345047

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to