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