xref: /llvm-project/openmp/docs/remarks/OptimizationRemarks.rst (revision c44fa3e8a9a44c2e9a575768a3c185354b9f6c17)
130e818dbSJohannes DoerfertOpenMP Optimization Remarks
230e818dbSJohannes Doerfert===========================
3994bb6ebSJohannes Doerfert
49ae171bcSJohannes DoerfertThe :doc:`OpenMP-Aware optimization pass </optimizations/OpenMPOpt>` is able to
59ae171bcSJohannes Doerfertgenerate compiler remarks for performed and missed optimisations. To emit them,
6eae306f5SJoseph Huberpass these options to the Clang invocation: ``-Rpass=openmp-opt
7eae306f5SJoseph Huber-Rpass-analysis=openmp-opt -Rpass-missed=openmp-opt``.  For more information and
8eae306f5SJoseph Huberfeatures of the remark system, consult the clang documentation:
99ae171bcSJohannes Doerfert
109ae171bcSJohannes Doerfert+ `Clang options to emit optimization reports <https://clang.llvm.org/docs/UsersManual.html#options-to-emit-optimization-reports>`_
119ae171bcSJohannes Doerfert+ `Clang diagnostic and remark flags <https://clang.llvm.org/docs/ClangCommandLineReference.html#diagnostic-flags>`_
129ae171bcSJohannes Doerfert+ The `-foptimization-record-file flag
139ae171bcSJohannes Doerfert  <https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-foptimization-record-file>`_
149ae171bcSJohannes Doerfert  and the `-fsave-optimization-record flag
159ae171bcSJohannes Doerfert  <https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang1-fsave-optimization-record>`_
169ae171bcSJohannes Doerfert
179ae171bcSJohannes Doerfert
1816164079SJoseph HuberOpenMP Remarks
1916164079SJoseph Huber--------------
209ae171bcSJohannes Doerfert
2116164079SJoseph Huber.. toctree::
2216164079SJoseph Huber   :hidden:
2316164079SJoseph Huber   :maxdepth: 1
249ae171bcSJohannes Doerfert
2516164079SJoseph Huber   OMP100
2616164079SJoseph Huber   OMP101
2716164079SJoseph Huber   OMP102
2816164079SJoseph Huber   OMP110
2916164079SJoseph Huber   OMP111
3016164079SJoseph Huber   OMP112
3116164079SJoseph Huber   OMP113
3216164079SJoseph Huber   OMP120
3316164079SJoseph Huber   OMP121
3416164079SJoseph Huber   OMP130
3516164079SJoseph Huber   OMP131
3616164079SJoseph Huber   OMP132
3716164079SJoseph Huber   OMP133
3816164079SJoseph Huber   OMP140
3916164079SJoseph Huber   OMP150
4016164079SJoseph Huber   OMP160
4116164079SJoseph Huber   OMP170
427eb899cbSJoseph Huber   OMP180
433c8a4c6fSJohannes Doerfert   OMP190
449ae171bcSJohannes Doerfert
4516164079SJoseph Huber.. list-table::
4616164079SJoseph Huber   :widths: 15 15 70
4716164079SJoseph Huber   :header-rows: 1
489ae171bcSJohannes Doerfert
4916164079SJoseph Huber   * - Diagnostics Number
5016164079SJoseph Huber     - Diagnostics Kind
5116164079SJoseph Huber     - Diagnostics Description
5216164079SJoseph Huber   * - :ref:`OMP100 <omp100>`
5316164079SJoseph Huber     - Analysis
5416164079SJoseph Huber     - Potentially unknown OpenMP target region caller.
5516164079SJoseph Huber   * - :ref:`OMP101 <omp101>`
5616164079SJoseph Huber     - Analysis
5716164079SJoseph Huber     - Parallel region is used in unknown / unexpected ways. Will not attempt to
5816164079SJoseph Huber       rewrite the state machine.
5916164079SJoseph Huber   * - :ref:`OMP102 <omp102>`
6016164079SJoseph Huber     - Analysis
6116164079SJoseph Huber     - Parallel region is not called from a unique kernel. Will not attempt to
6216164079SJoseph Huber       rewrite the state machine.
6316164079SJoseph Huber   * - :ref:`OMP110 <omp110>`
6416164079SJoseph Huber     - Optimization
6516164079SJoseph Huber     - Moving globalized variable to the stack.
6616164079SJoseph Huber   * - :ref:`OMP111 <omp111>`
6716164079SJoseph Huber     - Optimization
6816164079SJoseph Huber     - Replaced globalized variable with X bytes of shared memory.
6916164079SJoseph Huber   * - :ref:`OMP112 <omp112>`
7016164079SJoseph Huber     - Missed
7116164079SJoseph Huber     - Found thread data sharing on the GPU. Expect degraded performance due to
7216164079SJoseph Huber       data globalization.
7316164079SJoseph Huber   * - :ref:`OMP113 <omp113>`
7416164079SJoseph Huber     - Missed
7516164079SJoseph Huber     - Could not move globalized variable to the stack. Variable is potentially
7616164079SJoseph Huber       captured in call. Mark parameter as `__attribute__((noescape))` to
7716164079SJoseph Huber       override.
7816164079SJoseph Huber   * - :ref:`OMP120 <omp120>`
7916164079SJoseph Huber     - Optimization
8016164079SJoseph Huber     - Transformed generic-mode kernel to SPMD-mode.
8116164079SJoseph Huber   * - :ref:`OMP121 <omp121>`
8216164079SJoseph Huber     - Analysis
8316164079SJoseph Huber     - Value has potential side effects preventing SPMD-mode execution. Add
84*c44fa3e8SSirraide       `[[omp::assume(\"ompx_spmd_amenable\")]]` to the called function
8516164079SJoseph Huber       to override.
8616164079SJoseph Huber   * - :ref:`OMP130 <omp130>`
8716164079SJoseph Huber     - Optimization
8816164079SJoseph Huber     - Removing unused state machine from generic-mode kernel.
8916164079SJoseph Huber   * - :ref:`OMP131 <omp131>`
9016164079SJoseph Huber     - Optimization
9116164079SJoseph Huber     - Rewriting generic-mode kernel with a customized state machine.
9216164079SJoseph Huber   * - :ref:`OMP132 <omp132>`
9316164079SJoseph Huber     - Analysis
9416164079SJoseph Huber     - Generic-mode kernel is executed with a customized state machine that
9516164079SJoseph Huber       requires a fallback.
9616164079SJoseph Huber   * - :ref:`OMP133 <omp133>`
9716164079SJoseph Huber     - Analysis
9816164079SJoseph Huber     - Call may contain unknown parallel regions. Use
99*c44fa3e8SSirraide       `[[omp::assume("omp_no_parallelism")]]` to override.
10016164079SJoseph Huber   * - :ref:`OMP140 <omp140>`
10116164079SJoseph Huber     - Analysis
10216164079SJoseph Huber     - Could not internalize function. Some optimizations may not be possible.
10316164079SJoseph Huber   * - :ref:`OMP150 <omp150>`
10416164079SJoseph Huber     - Optimization
10516164079SJoseph Huber     - Parallel region merged with parallel region at <location>.
10616164079SJoseph Huber   * - :ref:`OMP160 <omp160>`
10716164079SJoseph Huber     - Optimization
10816164079SJoseph Huber     - Removing parallel region with no side-effects.
10916164079SJoseph Huber   * - :ref:`OMP170 <omp170>`
11016164079SJoseph Huber     - Optimization
11116164079SJoseph Huber     - OpenMP runtime call <call> deduplicated.
1127eb899cbSJoseph Huber   * - :ref:`OMP180 <omp180>`
1137eb899cbSJoseph Huber     - Optimization
1147eb899cbSJoseph Huber     - Replacing OpenMP runtime call <call> with <value>.
1153c8a4c6fSJohannes Doerfert   * - :ref:`OMP190 <omp190>`
1163c8a4c6fSJohannes Doerfert     - Optimization
1173c8a4c6fSJohannes Doerfert     - Redundant barrier eliminated. (device only)
118