Apr. 29th, 2003

My on-and-off work project for the past several months has been designing a new intermediate representation for our compiler; that is, come up with a new way for our program to look at the program you typed in, store it internally, mangle it, and ultimately spit out something the computer understands. This week I've been attacking CiteSeer to try to find out what the state-of-the-art in IRs is, particularly since I have something in mind that I'm sure somebody else has thought of before.

Conclusions: intermediate representations that store code as glorified lists of assembly instructions have been around forever, and the most recent interesting advance was static single assignment (SSA) form, around 1990ish. If you want to abandon that, there are various graph forms that are less obvious but more flexible. The most common of these is program dependence graph form (1987); Microsoft Research came up with something called value dependence graphs in 1994, but they never really escaped into the broader world.

And that's it. People keep implementing things, but as far as new and exciting things go, the newest commonly-used thing is 15 years old. Whatever I do for this, it's unlikely to be new and innovative; everything has pretty much been done. Thinking about compilers as a whole, there are classical optimizations, which aren't exciting, and processor-specific things. For really weird architectures (and even for some pretty conventional architectures these days) the compiler is the only thing that makes the chip useful, but in a sense it's grunge work supporting other people's advances.

Profile

dmaze

Page Summary

Expand Cut Tags

No cut tags
Page generated May. 30th, 2025 03:02 am
Powered by Dreamwidth Studios