Polybench llvm's IR -fopenmp

Hi all,

I’m trying to get the llvm’s IR from the source code of Polybench (OMP) https://github.com/cavazos-lab/PolyBench-ACC/tree/master/OpenMP.

I noticed a considerable difference between the IR generated using clang -emit-llvm -fopenmp and clang -emit-llvm:

  • using the -fopenmp flag I get a simplified IR in which I read a single basic block where I can highlight a llvm.memcpy function
  • without -fopenmp flag I get the expected IR in which I find a large number of basic blocks (e.g. for loop → for.begin, for.end …)
    Is there a way to avoid the insertion of llvm.memcpy when I’m using the -fopenmp flag?
    I’ve already tried -fno-builtin and -ffreestanding.

Thanks,
Best Regards,
Stefano Corda

Detection and insertion of llvm.memcpy is done by the LoopIdiom
("-loop-idiom") pass. Currently, there is no way to disable this pass
in the pipeline other than using -O0, using opt to rebuild the pass
pipeline or editing the LLVM sources.

Michael

We had a similar problem in our SYCL compiler so we added a way to skip
the LoopIdiom pass...
https://github.com/triSYCL/triSYCL/blob/master/doc/architecture.rst#host-side-compilation-flow
https://github.com/triSYCL/clang/commit/16c2fc68cc
https://github.com/triSYCL/clang/commit/5508bf637a