[PATCH] D102107: [OpenMP] Codegen aggregate for outlined function captures

Pushpinder Singh via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 30 00:27:05 PDT 2021


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



More information about the llvm-commits mailing list