Hi,
We are starting to work on an LLVM loop vectorizer. There's number of different projects that already vectorize LLVM IR. For example Hal's BB-Vectorizer, Intel's OpenCL Vectorizer, Polly, ISPC, AnySL, just to name a few. I think that it would be great if we could collaborate on the areas that are shared between the different projects. I think that refactoring LLVM in away that would expose target information to IR-level transformations would be a good way to start. Vectorizers, as well as other IR-level transformations, require target-specific information, such as the cost of different instruction or the availability of certain features. Currently, llvm-based vectorizers do not make use of this information, or just hard-code target information. A loop vectorizer would need target information. After we have some basic target information infrastructure in place we can start discussing the vectorizer itself.
I think that the first step would be to expose Target Lowering Interface (TLI) to OPT's IR-level passes. Currently TLI is only available in LLC. I suggest that we merge LLC and OPT into a single tool that will drive both IR-level passes and the codegen. LLC and OPT can remain as wrappers around the new tool. Please let me know if you can think of a good name for the new tool. I was thinking that "llvm-cli" may be a good name (cli = command line interface). OPT and LLC are only used by LLVM developers, so the impact of this change on the user community would be small.
Thanks,
Nadav