| .. _omp170: |
| |
| OpenMP runtime call <call> deduplicated. [OMP170] |
| ==================================================================== |
| |
| This optimization remark indicates that a call to an OpenMP runtime call was |
| replaced with the result of an existing one. This occurs when the compiler knows |
| that the result of a runtime call is immutable. Removing duplicate calls is done |
| by replacing all calls to that function with the result of the first call. This |
| cannot be done automatically by the compiler because the implementations of the |
| OpenMP runtime calls live in a separate library the compiler cannot see. |
| |
| Example |
| ------- |
| |
| This optimization will trigger for known OpenMP runtime calls whose return value |
| will not change. |
| |
| .. code-block:: c++ |
| |
| void foo(int N) { |
| double *A = malloc(N * omp_get_thread_limit()); |
| double *B = malloc(N * omp_get_thread_limit()); |
| |
| #pragma omp parallel |
| work(&A[omp_get_thread_num() * N]); |
| #pragma omp parallel |
| work(&B[omp_get_thread_num() * N]); |
| } |
| |
| .. code-block:: console |
| |
| $ clang -fopenmp -O2 -Rpass=openmp-opt omp170.c |
| ompi170.c:2:26: remark: OpenMP runtime call omp_get_thread_limit deduplicated. [OMP170] |
| double *A = malloc(N * omp_get_thread_limit()); |
| ^ |
| |
| Diagnostic Scope |
| ---------------- |
| |
| OpenMP optimization remark. |