Advanced Compiler Construction

Administrative matters, adopted from Vikram Adve and Sasa Misailovic

Textbook and Readings

There is no required text for this class because no single text covers a sufficient part of the material. We will reference material from several sources, including the textbooks listed below. Copies of these texts are on reserve at Grainger Engineering library, and the papers will be made available electronically.

Communication: Web, E-mail, Piazza

Copies of notes and course handouts will be made available off the course web page.

For questions to the instructors and discussions among students we have set up a forum on Piazza, a modern and much improved form of newsgroup. I will use this for all course announcements, so please read it regularly (although I will occasionally forward urgent messages directly via email). You should also use Piazza for questions to me and questions and discussions among yourselves. I will monitor the forum daily but please be prepared for occasional delays in getting answers from me, especially if I am out of town or on weekends.

Send me e-mail to set up an appointment outside normal office hours, or to ask a question specific to yourself, or questions that reveal information about the course project that you think should not be shared. Please use Piazza for all other communication, since the answers will likely be of interest to the entire class.

NOTE: Please do not use Piazza for any posts other than those relating to the course.


There will be two take-home exams: one at the middle of the semester and one at the end. Please be on the lookout for Piazza posts and emails from the instructor for instructions.

Grading Approach

I do not grade on a curve. Grading on a curve generally means to assign a predetermined fraction of the class each grade (e.g., the top 10% get an A; the next 10% a B; etc.). I evaluate each person's performance individually when assigning grades. I do use the overall performance of the students as a guide in calibrating how difficult the projects and exams were, since these change from year to year. But I would be extremely happy to give the entire class As, if they all got high scores.

Computing Facilities

  • We will use the EWS machines for the programming projects.

    See the EWS web site for more information about EWS.

  • All students should automatically have EWS accounts assigned. You are responsible for getting your own passwords and making sure you can access the account in the first week of classes.

  • It has become common for students to want to work on their own machines. You are welcome to do that but it is your responsibility to get the necessary software installed and working on your machines. For any software that I must run, it is also your responsibility to ensure that software runs on the EWS machines. I cannot help solve porting problems between the machines.

Course Policies


Late programming assignments will be penalized 2% per hour late (or fraction thereof), counted from 11:59pm CST on the due date.  This means being several hours late could affect your grade.

There are two circumstances for which we'll give "free" extensions:

  • Serious personal problems. These will be dealt with individually. They are typically either serious illness to you (doctor's verification required) or a major family emergency.
  • Extended lab downtime. This is extremely rare. A whole day of downtime in the lab might qualify. Minor downtime does not qualify. "Flakiness all weekend" does not qualify. Accidental loss of files does not qualify.  If you have chosen to work on some other machine other than the designated class machines, then you do so at your own risk. To protect yourself, keep recent backups on the class machines so that if your machine breaks, you can recover.


You are NOT to copy solutions from ANY source (including, but not limited to, code available on the Web, code written in previous semesters, or code obtained from people other than your partner). While the pressures of many classes, homeworks, work and/or extracurricular activities can be great, this is never an excuse for copying solutions from others. "Helping" somebody by allowing them to copy part of your code is not doing them a favor either, but indicates your approval and active participation in such activities.  Refer to the Campus Code regarding academic integrity.  In particular, giving someone else code is just as much cheating as copying someone else's code. Cheating will result in a reduced grade, or an "F" grade for the course. If you are aware of any breach of academic integrity, it is your responsibility to report it to the instructor.

Discussing your problems with other students, however, is encouraged and even highly recommended. This means asking someone not in your team to give you advice, asking them for suggestions when you face an obstacle, or just discussing any aspect of the material.  What you may not do is to copy or in any way use code written by anyone else or dictated by anyone else not on your team.  As responsible adults, you can draw the distinction between cheating and honest behavior: exercise your judgement and try to preserve the highest level of professional integrity in everything you do.

Bottom line: You may discuss difficulties with others and get occasional help with debugging but you or your team must write your code entirely by yourself.

How to Get the Most Out of This Course

  1. Participate actively in class: join the discussions and ask questions when you don't understand something.
  2. Think about the project as a research problem to tackle and solve, not an MP with canned procedures and goals.
  3. When writing code in a large infrastructure, such as LLVM, it is easy to get intimidated and bogged down because of the quantity of code that exists. The critical lesson to learn is to determine what parts of the code you have to read and learn, and what you don't. You should try to learn what you actually need to get the project done, but also a little bit more. Read some of the functions you use often. Look for existing code fragments to use as patterns (but don't follow them rigidly: figure out how to write your code best). Then buckle down and write your own code, and don't read much more or you will get bogged down.
  4. Read assigned papers before coming to class.
  5. Start the project assignments early, and don't leave all your studying to the days before each exam.  Working madly to beat a deadline is a terrible way to learn!