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

    <tr>
        <th>Summary</th>
        <td>
            [Flang][OpenMP] default(firstprivate) failing with parallel do
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            bug,
            flang:ir
      </td>
    </tr>

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

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

<pre>
    `default(firstprivate)` fails to privatize when used with parallel do. Reproducer:

```
program sample
  
   integer :: x
   x = 10
   !$omp parallel do default(firstprivate) num_threads(50)
      do i = 1, 50
        x = x + 1
      end do
   !$omp end parallel do
   print *, x
end program sample
```

Current IR (mainly `fir.store %10 to %1 : !fir.ref<i32>`):
```
    %0 = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFEi"}
    %1 = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFEx"}
    %c10_i32 = arith.constant 10 : i32
    fir.store %c10_i32 to %1 : !fir.ref<i32>
    %c50_i32 = arith.constant 50 : i32
    omp.parallel num_threads(%c50_i32 : i32) {
 %8 = fir.alloca i32 {adapt.valuebyref, pinned}
      %c1_i32 = arith.constant 1 : i32
      %c50_i32_1 = arith.constant 50 : i32
 %c1_i32_2 = arith.constant 1 : i32
      omp.wsloop for  (%arg0) : i32 = (%c1_i32) to (%c50_i32_1) inclusive step (%c1_i32_2) {
        fir.store %arg0 to %8 : !fir.ref<i32>
        %9 = fir.load %1 : !fir.ref<i32>
 %c1_i32_3 = arith.constant 1 : i32
        %10 = arith.addi %9, %c1_i32_3 : i32
        fir.store %10 to %1 : !fir.ref<i32>
 omp.yield
      }
      omp.terminator
    }
```

Expected IR should be as follows (mainly `fir.store %12 to %9 : !fir.ref<i32>`):

```
    %0 = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFEi"}
    %1 = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFEx"}
    %c10_i32 = arith.constant 10 : i32
 fir.store %c10_i32 to %1 : !fir.ref<i32>
    %c50_i32 = arith.constant 50 : i32
    omp.parallel num_threads(%c50_i32 : i32) {
      %8 = fir.alloca i32 {adapt.valuebyref, pinned}
      %9 = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFEx"}
      %10 = fir.load %1 : !fir.ref<i32>
      fir.store %10 to %9 : !fir.ref<i32>
 %c1_i32 = arith.constant 1 : i32
      %c50_i32_1 = arith.constant 50 : i32
      %c1_i32_2 = arith.constant 1 : i32
      omp.wsloop for (%arg0) : i32 = (%c1_i32) to (%c50_i32_1) inclusive step (%c1_i32_2) {
 fir.store %arg0 to %8 : !fir.ref<i32>
        %11 = fir.load %9 : !fir.ref<i32>
        %c1_i32_3 = arith.constant 1 : i32
        %12 = arith.addi %11, %c1_i32_3 : i32
        fir.store %12 to %9 : !fir.ref<i32>
        omp.yield
      }
      omp.terminator
 }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkV81u6zYTfRp6M7gGObIUa-FFEsfAt7hf2_sCBiVSEguKVEkqcfr0BWXZsRI7cdIfoGgQSAmHM2fmzPAI5N6r2ki5IukdQfy_apVvvivfOE4QSbqe8T401q1OLbPCiucVyaiQFe91ILislPOhc-qRB0kwJxmFiivtIVjYL6vfJTw10kDvpYAnFRrouONaSw3CzuGH7JwVfSkdSW4JXRN6eGZ0_B3-7ZytHW_B87bTcr8GcHiDMkHW0kEMktzC7mjYAUnWwOhxgSAjuLBtd5oHXCwJTN9uQ-MkF57gMqWxzEMsgOir9hAE7yGlp7YD-g4I3gE7NUkjQNgzSUXDSWLHHZ1TJgDB2wgzljfsPcPLK-r2z_veOWkC_O8HEFy2XBn9DCSjlXJzH6yTQDBlNHYu_hGZjGlFs5MVSe5VgiR5iFExf-nVFAqGWlI6lB1duda25KASBHJzVygjyq3hrRw2EEQVxw3voTfqt4lh-8vmYTDerCeh2dWhd--F3p0JXTK6HaIla-BOhWZeWuMDNwEYHfiIFBw9JsQdfD9ib4KXXsRLz-DZtpsfJ2M6lZNgezfMIyujN8F0eYE3LngX5o9c97J4jqniPXTKGCkm9IwEXeTnbbqnJW7ZVUUeIbbXg0RWnry2toPKugga2eCupgMFe4ex88sjQLQNrVqeJhlXlSl179WjBB9kN3HavmJ1_JnMQQQeh2D58RCMLOXH3mjLxTUD9JJTcjVTMB7wl_1cCDXgx6ZPQ57x_qxQ7J1jf56V1GIyGdPRinuCdK0yPFh3ckYO284K2sOuk2WQIiqab2yvBRQSuIfKam2f_Hsydzio-bUy958Wu3-R0h3m_K-Qu_zT7I-Rru7D6ZH8zPF_5zxenuhXyvH3yfj0c_F1Lf8HpfzPazhjb7r4USvgNVOf1XI8o-WMfUHMP5bDifOXNf2toM_EKhF5kvOZXLEszzNGkdFZs8oTkReLirMk5QuGokKZZuUiy4qKiqwUM7VCigljjNI8zVI6l8sqwwplld9URZUWZEFly5Wea_3Yzq2rZ8r7Xq5uWM7SmeaF1H68_xR9vT_BBLHS3NQkuVVuvAm5VQzwrehrTxZUKx_8S8iggh5uUZvBLV2T9O6nTprvP5N0_c6tIt6SlKnfXIhmvdOrJoTOx28PbghuahWavpiXtiW4icDj61vn7K-yDAQ3Q2Ge4Gao7Y8AAAD__8O0xBM">