[LLVMdev] Contributing to LLVM

David Greene dag at cray.com
Tue Aug 5 09:15:58 PDT 2008

On Tuesday 05 August 2008 03:27, Bill Wendling wrote:
> On Aug 4, 2008, at 10:29 PM, Shrutarshi Basu wrote:
> > Hello all,
> > I'm a rising sophomore CS/Engineering student in the US and I'm
> > interested in programming languages/ compilers.I think the LLVM would

Yay!  We need more compiler people in this industry.  :)

This is actually a very good time to be getting into the field.  As clock 
speeds plateau, compilers are being relied upon much more to make
up the difference.  There are lots of interesting things going on with
dynamic compilation and programming tools.

> Read the books you have access to -- Advanced Compiler Design and
> Implementation by Steven Muchnick is a good one. Because you're a

I second the Muchnick recommendation, though maybe not as a teach-yourself
kind of book.  It's a great reference and the bibliography is very 

_The Design and Evolution of C++_, though a little dated now, is a good book 
to read about practical language tradeoffs and "why things are the way they 

It's also very, very, very important to understand computer architecture.  
Even if your degree program doesn't require it, take a computer architecture 
course.  Then you'll understand why we fuss over things like partial register
writes and cache efficiency.  Ok, partial register writes might be a 
graduate-level computer architecture course topic.

Patterson & Hennessy (or Hennessy & Patterson for graduate level) is the 
standard university computer architecture book.  The editions I have have an 
unfortunate bias toward pure RISC processor design but perhaps that's been 
improved in later editions.

Finally, read _The Soul of a New Machine_ by Kidder.  It's a great story about
hacker culture, system design, debugging and not taking yourself too 
seriously.  Don't get sucked in completely by work and computing.  Have fun!

> sophomore, you should take a compiler class at your university.
> Compilers are a specialized field of computer science. It comes with a
> nomenclature and set of skills all its own and which you will need to
> know before you can make any progress at it. Classes and studying
> should get you there.


Your typical undergrad-level compiler course will focus almost exclusively on
parsing.  That's good theory to know because the general concepts apply
to other phases of the compiler as well (pattern matching, data structures,
tree traversal, etc.).  An undergrad-level compiler course that actually has 
you build a compiler from scratch is a GREAT way to grok data structures
and algorithmic complexity.  It's also very useful to fully understand what's
going on under the hood (runtime stack, function linkage, ABIs, etc.).

If possible, try to do some learning about program transformation during
your undergrad degree.  Most universities have a graduate-level compiler
course that dives into things like dataflow analysis, transformation, etc.
Try to take that class if possible, because this is where all the work is
currently being done in the industry.  Parsing is considered "solved."  The 
undergrad course might touch on this stuff toward the end.  The more you're
exposed to, the better.

Don't take a graduate level compiler course and a graduate level computer 
architecture course in the same semester.  It's an interesting way to learn 
about connections between the two but you'll have no social life.  I speak 
from experience.  :)

The best way to learn is to work on real projects.  Perhaps there's a 
professor that would take you on as an undergrad researcher.  Or just
try to do something cool in LLVM as others have suggested.  One can
learn theory all day but learning really happens when theory gets put
into practice and you start tearing your hair out over a misued 

Welcome to the party!


More information about the llvm-dev mailing list