pdhaliwal added a comment.

I modified the declare_mapper_target to print the contents of array after 
target region and found the following output:

  2 3 4 5 6 7 8 9 10 11 Sum = 65

Program:

  #include <cstdio>
  #include <cstdlib>
  
  #define NUM 10
  
  int main() {
    int *c= new int[NUM];
    for (int i = 0; i < NUM; i++) {
      c[i] = 1;
    }
  #pragma omp target teams distribute  parallel for map(tofrom: c[0:NUM])
    for (int i = 0; i < NUM; i++) {
      c[i]++;
    }
    int sum = 0;
    for (int i = 0; i < NUM; i++) {
      sum += c[i];
      printf("%d ", c[i]);
    }
    // CHECK: Sum = 2048
    printf("Sum = %d\n", sum);
    return 0;
  }

Different variant of the same program is producing correct output,

  #include <cstdio>
  #include <cstdlib>
  
  #define NUM 10
  
  int main() {
    int *c= new int[NUM];
    for (int i = 0; i < NUM; i++) {
      c[i] = 1;
    }
  
    int *b = new int[NUM];
  #pragma omp target teams distribute  parallel for map(tofrom: c[0:NUM], 
b[0:NUM])
    for (int i = 0; i < NUM; i++) {
      b[i] = c[i] + 1;
    }
    int sum = 0;
    for (int i = 0; i < NUM; i++) {
      sum += b[i];
      printf("%d ", b[i]);
    }
    // CHECK: Sum = 2048
    printf("Sum = %d\n", sum);
    return 0;
  }

Output (this is the right answer):

  2 2 2 2 2 2 2 2 2 2 Sum = 20

On internal amd-stg-open branch, this patch works fine, so issue is only with 
the trunk.
I compared the generated IR before and after applying this patch, I didn't see 
anything suspicious. (but can't be 100% sure).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D102107/new/

https://reviews.llvm.org/D102107

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to