.. _omp121:

Value has potential side effects preventing SPMD-mode execution. Add `__attribute__((assume(\"ompx_spmd_amenable\")))` to the called function to override. [OMP121]
===================================================================================================================================================================

This analysis remarks indicates that a potential side-effect that cannot be
guarded prevents the target region from executing in SPMD-mode. SPMD-mode
requires that each thread is active inside the region. Any instruction that
cannot be either recomputed by each thread independently or guarded and executed
by a single thread prevents the region from executing in SPMD-mode. 

This remark will attempt to print out the instructions preventing the region
from being executed in SPMD-mode. Calls to functions outside the current
translation unit will prevent this transformation from occurring as well, but
can be overridden using an assumption stating that it contains no calls that
prevent SPMD execution.

Examples
--------

Calls to functions outside the current translation unit may contain instructions
or operations that cannot be executed in SPMD-mode.

.. code-block:: c++

  extern int work();

  void use(int x);
  
  void foo() {
  #pragma omp target teams
    {
      int x = work();
  #pragma omp parallel
        use(x);
  
    }
  }


.. code-block:: console

   $ clang++ -fopenmp -fopenmp-targets=nvptx64 -O2 -Rpass-analysis=openmp-opt omp121.cpp
   omp121.cpp:8:13: remark: Value has potential side effects preventing SPMD-mode 
   execution.  Add `__attribute__((assume("ompx_spmd_amenable")))` to the called function 
   to override. [OMP121]
   int x = work();
            ^

As the remark suggests, the problem is caused by the unknown call to the
external function ``work``. This can be overridden by asserting that it does not
contain any code that prevents SPMD-mode execution.

.. code-block:: c++

  __attribute__((assume("ompx_spmd_amenable"))) extern int work();

  void use(int x);
  
  void foo() {
  #pragma omp target teams
    {
      int x = work();
  #pragma omp parallel
        use(x);
  
    }
  }

.. code-block:: console

   $ clang++ -fopenmp -fopenmp-targets=nvptx64 -O2 -Rpass=openmp-opt omp121.cpp
   omp121.cpp:6:1: remark: Transformed generic-mode kernel to SPMD-mode. [OMP120]
   #pragma omp target teams
   ^

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

OpenMP target offloading analysis remark.
