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

    <tr>
        <th>Summary</th>
        <td>
            [OpenMP] no async tasks when there is 1 thread only
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          ye-luo
      </td>
    </tr>
</table>

<pre>
    This is a libomp implementation issue not an OpenMP spec one.
The async tasking behavior should be respected even when there is no parallel region and there is only a single implicit thread.
I wrote this reproducer as a proxy for the issue of target tasks which should be asynchronous but not due to the limitation of the libomp behavior.

code
```
#include <iostream>
void run()
{
 #pragma omp task
  std::cout << "running task 1" << std::endl;
 #pragma omp task
  std::cout << "running task 2" << std::endl;

 std::cout << "task 1 & 2 launched" << std::endl;
  #pragma omp taskwait
  std::cout << "taskwait completed!" << std::endl;

}

int main()
{
  std::cout << "run without parallel" << std::endl;
  run();

  std::cout << "\nrun with parallel but 1 thread" << std::endl;
  #pragma omp parallel num_threads(1)
  run();

  std::cout << "\nrun with parallel but 2 thread" << std::endl;
  #pragma omp parallel num_threads(2)
 run();
}
```

```
$ clang++ -fopenmp test_task.cpp && ./a.out 
run without parallel
running task 1
running task 2
task 1 & 2 launched # no asynchronicity, both tasks are treated as included tasks and execute immediately. 
taskwait completed!

run with parallel but 1 thread
running task 1
running task 2
task 1 & 2 launched # no asynchronicity, both tasks are treated as included tasks and execute immediately. 
taskwait completed!

run with parallel but 2 thread
task 1 & 2 launched  # both tasks are async
running task 2
running task 1
taskwait completed!
running task 1
running task 2
task 1 & 2 launched
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcVs1u6zYTfRpqM4ghUbJsLbRI4s_Atyjaxd1fUORYYkuRAn_i67cvSEu2m-vELZpVAcM2OeLMOYczo2HOyV4jtmT9Qta7jAU_GNue8EkFk3VGnNpvg3QgHTBQsjPjBHKcFI6oPfPSaJDOBQRtPDANv06of_kN3IQcjMYVyXckf_42IDB30hw8c39I3UOHA3uTxoIbTFACOgSL8ZRHAfiGGo4DavADWozBtYGJWaYUKrDYx7hMi6vdaHUCBk7qXmFCKLn04AeLTMwo_g9HazyCj4QsTtaIwNECi9wma36c4GBs9DlzMgfwzPboE2wHx0Hy4QZxojRYo01w0AWfRBABwZvkRclRziJFV2knKbiwn4Gdv7kROK_rfP6cl7SUmqsgEEj5Ko3zFtlIyv-dzW9GCrBBE7oltJmPbF7Of4DQcrKsHxnEwJHHbADnBSmfSfnMTfDRMylfgVBqg9bxiuKzUBBKF9vlAGqhSPlFEejDCLO7j7ydcQKhNVBQLGg-oHgM-w7uI5P-EfblOeAmloGPoR6LtNzK7nYptYeRyQ8u7jP14Cj9EHeXmvgbdK8Z8k7XDwOR9ategl2rL-Z5MRfWP1b54kWH8fvZhyN0W1z4fy1O-sU46RXnHZiX231XvvdrugKumO4JfSH0BZ4OZkId8xCd_x6TbMWnKSZ1zOsVoXu2SqzT6bspsFhui_fnPXreu1s0UYTYaS99LfbQE6Gv0Bk_zE2QWYTYgGKjZg7mziQWqxaAP5AHH7vwiEIyj-q0gmvYn6vnRqYH-fYf5kj_wvE-9gT-Hc5E5GMR7on1CcJ_pe0n6Z-JthRN2bAM26LebmhRrLebbGixqjtaIO_qQ1NU66Jsmu5QbettTXlTsSqTLc1pmddFQ4t1mW9Wh4rneCiasqrzYrNGUuU4MqlWSr2NK2P7LL2927osmypTrEPl0nhDqcbj-dWeusYus20889SF3pEqV9J5d_XipVdpLjrPNGS9u-TNZR64HVGWJE2zSBasagfvJxe7Dd0Tuu-lH0K34mYkdB-jzD9PkzW_I_eE7hM2R-g-Yf8zAAD__1aD9HQ">