Request for compilers

Hi,

For one of our research projects, we are planning to use LLVM. We need the following features:

  1. We need to aggressively fuse loops that have inter-loop dependencies.

  2. We need to identify intrinsic functions and induction variables.

  3. We need to detect few memory access patterns like copy, transpose-copy, stride-copy etc.

  4. Lastly, auto-vectorization and auto-openmp.

Is there a LLVM tool(s) that addresses these optimizations? The target language is C or C++. The target architectures are Intel Xeon with AVX and Xeon Phi .

Regards,

Ganesh

Hi Ganesh,

Please have a look at:

These core parts of LLVM:
http://llvm.org/docs/doxygen/html/classllvm_1_1Loop.html#a72bbf45d2e00971f56bf8cfe4e1df01c
http://llvm.org/docs/Vectorizers.html

These research projects based on LLVM:
http://polly.llvm.org

http://aesop.ece.umd.edu

I’m not sure what you mean by “identify intrinsic functions”. If you really mean LLVM intrinsics, they are trivial to identify in LLVM (see http://llvm.org/docs/LangRef.html#intrinsic-functions for a high level introduction). If you mean something like idiom recognition, some optimizations of LLVM do this but typically just recognize the idioms as they optimize.

LLVM doesn’t include loop fusion, but Polly may help there. Likewise, Polly and AESOP are probably your best bets for things like memory access patterns and auto-parallelization.

All the best,

Stefanus

Thanks. I’ll take a look.

Regarding intrinsic functions, we want to do few trigonometric optimizations (i.e. exp(i*theta)). Not sure if that is covered in idiom recognition.

Ganesh