Automatic Parallelization

It is hard to find programmers really good at writing efficient code. This difficulty increases even more if we are looking for programmers able to write efficient parallel code. I believe that compilers can be better than human at producing efficient parallel code from sequential code. However, there is a lot of room for improvements in this area, because it involves problems that are really hard to solve. Thus, automatic parallelization is a field of research that fascinates me.

Code optimization

Modern programming languages provide developers with a plethora of high-level abstractions that increase their productivity. However, these abstractions might have a cost in terms of efficiency, for they put the language a bit too far away from the hardware that executes it. In this case, the compiler may be used to reduce this overhead whenever possible, by generating optimized code. This kind of optimization is something that always catches my attention.

Code analysis

A compiler usually changes a programming language gradually from higher to lower-levels of representation. In this process, usually we lose some information, originally available in the source code. This loss becomes more evident once we start talking about Domain-Specific Languages, which are very good at staying close to developer's needs, and distant from the hardware. Recovering this "lost" information from lower level languages such as the LLVM IR is an important and challenging task that interests me deeply.