One of the research projects I am working on at the University of Toronto is the speculative vectorization. Nowadays, many processors come with vector instructions. In order to make use of its vectorization capability, one will need autovectorization compilers (hand written assembly is not scabale). One of the most difficult part about autovectorization is dependence test. Very commonly, dependence test will need to rely on alias analysis. However, alias analysis needs to be very conservative for weakly typed languages, i.e. C, C++, etc. This could sometimes result in the inability to fully take advantage of the vector capability of the processor. Therefore,Say I have a processor that have a set of speculative vector instructions, these instructions behave just like the regular vector instructions in case of no data dependencies, but act as a NOP in case aliasing is detected when the instructions are about to be issued to the functional units of the processor. If aliasing happens, one needs to make the processor fall back to the scalar approach of doing the computation. In order to implement this project, I will need a state-of-art autovectorizing compiler. Considering the open-source compilers in the field, gcc looks like a good choice. Unfortunately, while I do have much experience working llvm, I have no experience with gcc. Can any of you give me some suggestions on where to start, I think I need to learn the gcc framework as a whole first, then I need to focus on the autovectorization pass. Also, any comments on the project idea are appreciated as well. Thanks Xin