.. _omp130:

Removing unused state machine from generic-mode kernel. [OMP130]
================================================================

This optimization remark indicates that an unused state machine was removed from
a target region. This occurs when there are no parallel regions inside of a
target construct. Normally, a state machine is required to schedule the threads
inside of a parallel region. If there are no parallel regions, the state machine
is unnecessary because there is only a single thread active at any time.

Examples
--------

This optimization should occur on any target region that does not contain any
parallel work.

.. code-block:: c++

   void copy(int N, double *X, double *Y) {
   #pragma omp target teams distribute map(tofrom: X[0:N]) map(tofrom: Y[0:N])
     for (int i = 0; i < N; ++i)
       Y[i] = X[i];
   }

.. code-block:: console

   $ clang++ -fopenmp -fopenmp-targets=nvptx64 -O2 -Rpass=openmp-opt omp130.cpp
   omp130.cpp:2:1: remark: Removing unused state machine from generic-mode kernel. [OMP130]
   #pragma omp target teams distribute map(tofrom: X[0:N]) map(tofrom: Y[0:N])
   ^

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

OpenMP target offloading optimization remark.
