I worked for some time on an OpenMP frontend based on Clang. This is not just an OpenMP frontend but a more comprehensive framework to handle user defined pragmas. OpenMP is implemented just to test its functionalities. This was implemented as part of a bigger project called insieme which is developed at the university of Innsbruck ( http://insieme-compiler.org/). Several people asked me to release this code since long time and I finally took some time to isolate the pragma handling mechanism from the rest of the project and open source it. This is only the frontend part, there is no backend. Therefore, if you happen to have an OpenMP backend for LLVM and you need a frontend then you just found your soul mate
I host this code in the following repository: https://github.com/motonacciu/clomp
This project contains the infrastructure for pragma handling and the OpenMP frontend. It doesn’t work on the current SVN release on clang. It requires LLVM/Clang 3.0 and additionally a small patch has to be applied to Clang in order for the all thing to work. However the patch can be easily updated to work with the latest clang. The project contains a couple of examples that show how it is meant to be used.
In order to compile the project you need to do 2 things. First of all install the patched version of LLVM/Clang. This can be done by running the llvm-3.0-installer.sh script stored in the script folder. Clomp is built with cmake. Specify the LLVM_HOME=/path/to/patched-llvm env variable when you run CMAKE. It is required to set up some internal paths. (I will add installation instruction in the project web page soon)
It would be nice to have the code in Clang (so that I don’t have to update the patch every time a new release of clang comes along) but I really have no time to rewrite everything to conform with the coding style of LLVM. I use C++11 a lot and templates as well and I know LLVM how people here feel about those things. Also the code was first written more than 1 year ago and I suppose in the meantime several things have changed in Clang and probably there is an easier way to do some of the things. If someone is interested in taking over the effort of going through a code review and port it into clang I can help, just contact me. The code is well tested and functional. It can handle several OpenMP benchmark codes like the NAS Parallel Benchmarks and Rodinia benchmarks.
Everyone can use it. If you do so, please cite. I am open to research collaborations.