Call may contain unknown parallel regions. Use `__attribute__((assume("omp_no_parallelism")))` to override. [OMP133]
====================================================================================================================

.. _omp133:

This analysis remark identifies calls that prevented :ref:`OMP131 <omp131>` from
providing the generic-mode kernel with a fully specialized state machine. This
remark will identify each call that may contain unknown parallel regions that
caused the kernel to require a fallback.

Examples
--------

This will occur for any generic-mode kernel that may contain unknown parallel
regions. This is typically coupled with the :ref:`OMP132 <omp132>` remark.

.. code-block:: c++

   extern void setup();

   void foo() {
   #pragma omp target
   {
     setup();
     #pragma omp parallel
     {
       work();
     }
   }
   }

.. code-block:: console

   $ clang++ -fopenmp -fopenmp-targets=nvptx64 -O2 -Rpass-analysis=openmp-opt omp133.cpp
   omp133.cpp:6:5: remark: Call may contain unknown parallel regions. Use
   `__attribute__((assume("omp_no_parallelism")))` to override. [OMP133]
   setup();
   ^

The remark suggests marking the function with the assumption that it contains no
parallel regions. If this is done then the kernel will be rewritten with a fully
specialized state machine.

.. code-block:: c++

   __attribute__((assume("omp_no_parallelism"))) extern void setup();


   void foo() {
   #pragma omp target
   {
     setup();
     #pragma omp parallel
     {
       work();
     }
   }
   }

.. code-block:: console

   $ clang++ -fopenmp -fopenmp-targets=nvptx64 -O2 -Rpass=openmp-opt omp133.cpp
   omp133.cpp:4:1: remark: Rewriting generic-mode kernel with a customized state machine. [OMP131]
   #pragma omp target
   ^

Diagnostic Scope
----------------

OpenMP target offloading analysis remark.
