<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/66708>66708</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [OpenMP] Inner reduction crashes at runtime
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          doru1004
      </td>
    </tr>
</table>

<pre>
    In the following example:

```
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX_N 64 * 1024 * 4

void reset_input(double *a, double *a_h, double *b, double *c) {
  for(int i = 0 ; i < MAX_N ; i++) {
    a[i] = a_h[i] = 0;
    b[i] = i;
    c[i] = i;
 }
}

int main(int argc, char *argv[]) {
  double * a = (double *) malloc(MAX_N * sizeof(double));
  double * a_h = (double *) malloc(MAX_N * sizeof(double));
  double * b = (double *) malloc(MAX_N * sizeof(double));
  double * c = (double *) malloc(MAX_N * sizeof(double));

  int n = MAX_N;
#pragma omp target enter data map(to:a[:MAX_N],b[:MAX_N],c[:MAX_N])

  reset_input(a, a_h, b, c);

#pragma omp target update to(a[:n],b[:n],c[:n])
#pragma omp target teams distribute parallel for
  for (uint64_t sample=0; sample < 64 * 1024; sample++) {
    double partial_sum = 0.0;
    #pragma omp parallel for reduction(+:partial_sum)
    for (int i = 0; i < 4; ++i) {
      partial_sum += b[sample * 4 + i] + c[sample * 4 + i];
    }
 if (sample==0)
    printf("BLA\n");
    a[sample * 4] = partial_sum;
  }

  for (int i = 0; i < 64 * 1024; ++i) {
 double p_sum = 0.0;
    for (int j = 0; j < 4; ++j) {
      p_sum += b[4*i + j] + c[4*i + j];
    }
    a_h[i*4] = p_sum;
  }
#pragma omp target update from(a[:n])

  for (int i = 0; i < MAX_N; ++i) {
 if (a_h[i] != a[i]) {
      printf("A Error at n = %d, i = %d: host = %f, device = %f\n", n, i, a_h[i], a[i]);
      return 1;
    }
 }
  printf("Succeeded\n");
  return 0;
}
```

the inner reduction crashes at runtime.

Compile line:

```
clang++  -O3 -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx90a test.cpp  -o test -save-temps
```

The postlink LLVM IR looks ok. The postopt LLVM IR looks suspicious with function bodies being set to unreachable and then called from the kernel. This could well be a red herring and/or the error could be somewhere else but it could be starting point.



</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0V01vpDgT_jXuS6lbtIH-OPShPybSSDPvvNpdreYWGVyAE2Mj2ySz--tXNhCg053Zw45ECHbZ5cdPVT12M2tFqRAPJD2R9LJgrau0OXBt2nUUJYtM878OnxW4CqHQUupXoUrAH6xuJJL4SKILiYb3JuqfrkljoXLZcgQSn3XdrCoSf7pls44L_ZFVimxqHgZxLIRC-Hr8_vg_2CRA6BHWEe0-kungFy04GLToHoVqWkfojus2k-iHMkLPMGk-VvOObN7MCd0D2Z46zwCFNoTuhHIggMQXiIDEp_B97qGFNqGn8MzmAjCSngRJL2GqX3rSjEg8GZlNTWJmyu-YyPbSs_D2Ed4ebM2E6nEzU-Z-j3nFTGDAlC9dPlzBHUkAFtaa8egH10xKnRO663dOj2DF36iLt5GE7v0T33T6WP0Kt9mvcJr_R04H1z4QKvgMM0c7jRvDypqBrhtwzJToAJVDA5w5BjVrCN05TeKjzyUSH7v5Pnjn7F1Pft2zn8OYF0kojb4gQhnk76HfBNg2nDkEp4OTsKSaQVIzOGoG5ZZDh6y2wIV1RmStQ2iYYVKiDPU3lqKPSCuU2ySPDmwvUxdfSX0r1OVELEbLnQrt49sw4wSTj7atu-JczctzjnqKDgzyNndC-3rzK8THibO3bXsn_QYmYjJqSUDaYRTvQMIcn1_kEhRj2LRXRN8PnU7QUxCNm9b5tgblAFF4aG-UBlan2BsjlCvCFunpy5GkZ0UonddPp3fTVQfVmjIyjr_SrY8JugrqTaqGYN4N42SBp3GBp-sIPN2KwDX3CaFHEWh9mpI-777DtqeqPw3ocWTpLj8fFGFhdH1dhvt_T-sgR7cJ7bJienDRdTjK-vYtniaJcoRPxmgDbBA_QlPuhUaMrfgIlbZu6CjCcYwvIsexa0i2M6gwe9CtAcR5CmhGuZc81xoF6zuRmMRkivz3Ns8ROfKbid77HHNrjNTVLSm8_fVKKIUTrYDcMFuh9dSYVjlR42o6xd-ohESQQv3kIpZLpsoueADLbzEsC92gqpu3j2WXMJbEF1bzMldLVnP_V1kGy--zQbfH1MzkFYkvZfFjHzFwaN0qbxqApQ4NWFr2gkuHdWM_4OGPCqHR1kmhnuHLlz-_wuffQGr9bEE_r2Aw68ZdWW1rG5EL3Vp4Fa6ColUdi5nmAi1k6O-t1h8kGlplkOUV80rAFPeXWwW512seiiXcdp_RKJR-TWEh163k8IpSQobAfJSgQmO8U6Y4oQ_ahFkYsrkbniFYXeNrhQYBpUXIWgfCTczOq54qodFCuVl4u_eCH2K-j_dsgYf1Zp9G2ySNt4vqsE_WbFts6CbdbXkaxes9psU62e0y5DxJioU40IjG0X69ozSi6-0qQVZs9smOJWuebpKcJBHWTMiVlC_1SptyIaxt8bDZbKPdQrIMpQ2_CihV-ArB6NM8vSzMwc9ZZm1pSRJJYZ0dvTjhZPg58a1B9fX_XhI-_zSzF62Rh8q5xvpUpg-EPpTCVW22yr12PXjv_b9lY_QT5o7Qh4DJEvoQMP8TAAD__0Gsj30">