<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - OpenMP missing profile instrumentation counter in CGOpenMPRegionInfo::EmitBody"
   href="https://bugs.llvm.org/show_bug.cgi?id=49521">49521</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>OpenMP missing profile instrumentation counter in CGOpenMPRegionInfo::EmitBody
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>OpenMP
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Clang Compiler Support
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>lxfind@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>In CGOpenMPRegionInfo::EmitBody, it does not emit any profile counter
increment, which means that the instrumentation of a function generated this
way will be missing the function entry count. In some cases this leads to
inaccurate instrumentation, while in worse cases some function has no counter
emitted, causing llvm-cov to error out since some functions are missing from
the function name table.

A fix attempt is <a href="https://reviews.llvm.org/D98135">https://reviews.llvm.org/D98135</a>, but it seems to have some
issues.

Example test case:

// RUN: %clang_cc1 -verify -fopenmp -x c -emit-llvm %s -triple
x86_64-unknown-linux -o - -femit-all-decls -disable-llvm-passes
-fprofile-instrument=clang | FileCheck %s
// expected-no-diagnostics

void sub(double *restrict a, double *restrict b, int n) {
  int i;

#pragma omp parallel for
#pragma clang loop vectorize(disable)
  for (i = 0; i < n; i++) {
    a[i] = a[i] + b[i];
  }
}

// CHECK-LABEL: @.omp_outlined.(
// CHECK-NEXT:  entry:
// CHECK:         call void @llvm.instrprof.increment(
// CHECK:       omp.precond.then:
// CHECK-NEXT:    call void @llvm.instrprof.increment(
// CHECK:       cond.true:
// CEHCK-NEXT:    call void @llvm.instrprof.increment(
// CHECK:       omp.inner.for.body:
// CHECK-NEXT:    call void @llvm.instrprof.increment(</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>