Some question about OpenMP outlining and the source code in LLVM

Dear Developers,

I am researching Clang and LLVM OpenMP Runtime Library, and I try to research into the topic: How does OpenMP outline functions in Clang , and I could try to implement the new OpenMP directive and outlined functions to achive the functional requirement that I purpoed.

For instance aboult OpenMP outlining,
void foo()
{
#pragma omp parallel
{
… do something …
}
}
is converted into
static void outlinedFooBody()
{
… do something …
}
void foo()
{
__OMP_runtime_fork(outlinedFooBody, (void*)0);
}

I have some questions about the topic,

  1. How could I know what OpenMP actually done when OpenMP outlines the functions? It seems there are no tools to observe that except for observing LLVM-IR or assembly code.
  2. Which is the OpenMP outlining actions actually done, in Clang or LLVM OpenMP runtime library?
  3. Is there any useful tools to dump the outlining information for dubugging or observing?

Sorry about there are so many questions above. I stuck in here for several months, and still don’t know how OpenMP oulining fuctions, how the source code of Clang and OpenMP runtime library actually does about outlining.

Thank you for your time to read the mail.

Looking forward to your feedback.

Respectfully yours,

Yu-Wen, the student from Chung-Cheng University of Taiwan