CSE 231: Advanced Compilers

Course Project


General information

The course project will allow you to get some hands-on experience. For the project, you will explore some research question related to program analysis/optimization. The project will be done in teams of 2 to 3. In exceptional cases, you may work by yourself, but you have to talk to me about it beforehand. A project proposal will be due a few weeks into the class, and there will be several milestones along the way, to make sure that you are making good progress. A project report will be due at the end of the quarter. You will also give two presentations on your project: one short presentation at the midway point in the quarter,  and a final project presentation at the end of the quarter. If there is any way of incorporating your current research into the course project, I encourage you to do so.

You can find a list of infrastructure to use here.


Form groups (due Wednesday October 10)

Nothing to hand in.


Project Proposal (due Monday October 15)

Write a one page description of what you want to do in the project. The proposal should at least include the following:

For each group, one group member should send me the project proposal by email.


Mid-term project presentations (presented in class on Monday November 5)

Each group will give a 10 to 15 minute presentation giving an overview of their project, and any results they may already have.


Final project presentations (presented at some point during finals week)

Each group will give a 10 to 15 minute presentation on the final results from their project. This will be done sometime during finals week, at some date that works for all the students in the class.


Final report (due Tuesday December 11th)

Each group should hand in a 10 page report, describing what they did, what worked, what didn't, any results they may have gotten, and what they learned.


List of infrastructures

Here is a list of infrastructures that you can use for your project. This list was adapted from John Regehr's course on program analysis. This table also shows some sample project ideas which I've copied from his course.

tool and home page implemented in analyzes analysis type documentation? example projects
CCured OCaml using CIL C enforces type-safe execution good enough
CIL OCaml ANSI C, gcc, Microsoft C typechecking, provides infrastructure for other analyses good enough
cXprop OCaml using CIL C context and path insensitive dataflow with pluggable domains, pretty good pointer analysis, and concurrency analysis specific to interrupt-driven software no
  • support the octagon transfer functions
  • support propagation, folding, etc. for floating point values
  • implement signed interval domain, including backwards operations
  • implement a sparse dataflow representation
gcc C C, C++, Java optimizing compiler minimal
Jikes RVM Java Java bytecode not a static analyzer; performs analysis while JITing ??
LLVM C++ C, C++ optimizing compiler good
Locksmith OCaml using CIL C with pthreads context sensitive lockset minimal see doc/notes.txt in the source distribution
ProGuard Java Java bytecode optimizing compiler and obfuscator ?? add intervals or another abstract domain that is more interesting than constants
Saturn OCaml using CIL, analysis are written in CLP C path, flow, and context sensitive summary-based analysis good
Soot Java Java bytecode optimizing compiler ??
Sparse C C typechecking, random bugfinding no
valgrind C x86 and PPC object code not a static analyzer; performs analysis while JITing ??