xref: /llvm-project/openmp/docs/remarks/OMP170.rst (revision 0c660256eb41fb0ba44277a32f39d2a028f797f2)
1.. _omp170:
2
3OpenMP runtime call <call> deduplicated. [OMP170]
4====================================================================
5
6This optimization remark indicates that a call to an OpenMP runtime call was
7replaced with the result of an existing one. This occurs when the compiler knows
8that the result of a runtime call is immutable. Removing duplicate calls is done
9by replacing all calls to that function with the result of the first call. This
10cannot be done automatically by the compiler because the implementations of the
11OpenMP runtime calls live in a separate library the compiler cannot see.
12
13Example
14-------
15
16This optimization will trigger for known OpenMP runtime calls whose return value
17will not change.
18
19.. code-block:: c++
20
21  void foo(int N) {
22    double *A = malloc(N * omp_get_thread_limit());
23    double *B = malloc(N * omp_get_thread_limit());
24
25  #pragma omp parallel
26    work(&A[omp_get_thread_num() * N]);
27  #pragma omp parallel
28    work(&B[omp_get_thread_num() * N]);
29  }
30
31.. code-block:: console
32
33  $ clang -fopenmp -O2 -Rpass=openmp-opt omp170.c
34  ompi170.c:2:26: remark: OpenMP runtime call omp_get_thread_limit deduplicated. [OMP170]
35  double *A = malloc(N * omp_get_thread_limit());
36                         ^
37
38Diagnostic Scope
39----------------
40
41OpenMP optimization remark.
42