CSC 255/455 Software Analysis and Improvement Spring 2014

CSC 255/455 Software Analysis and Improvement (Spring 2014)

Lecture slides, demostration programs, and some of the reading material will be distributed through the class repository.  Assignments and projects will be submitted through the repository as well. 


 Course description

With the increasing diversity and complexity of computers and their applications, the development of efficient, reliable software has become increasingly dependent on automatic support from compilers & other program analysis and translation tools. This course covers principal topics in understanding and transforming programs by the compiler and at run time. Specific techniques include data flow and dependence theories and analyses; type checking and program correctness, security, and verification; memory and cache management; static and dynamic program transformation; and performance analysis and modeling.

Course projects include the design and implementation of program analysis and improvement tools.  Meets jointly with CSC 255, an undergraduate-level course whose requirement includes a subset of topics and a simpler version of the project.

This year there will be new modules on dynamic program optimization and parallel programming for multicore.

 Instructor and grading

Instructor: Chen Ding, Prof., CSB Rm 710, x51373
Lectures: Mondays and Wednesdays, 12:30pm-1:45pm, CSB 632
TA: Lingxiang Xiang, CSB Rm 615. lxiang [at]
Office hours: Ding, by appointment (use IM or email).  Lingxiang, Wednesdays 2:50pm-3:50pm, Fridays 3:30pm-4:30pm.
You may contact us using instant messaging through any Jabber IM client such as a gmail address. Connect address TBA.

Grading (total 100%)

  • midterm and final exams are 15% each
  • the projects total to 60%
  • written assignments are 10%

 Class repository

The class repository is managed by the distributed version control system called Mercurial.  If you haven't used Mercurial before, it is easy to follow one of the many on-line tutorials. The basic commands you need are as follows. Note that unlike subversion (svn), you have a copy of the repository on your local machine, and you check out from and check into the local repository.

Before you start, make sure that you have an account on or  They will be kept in sync.  You may use the repository on either machine regardless whether you're taking 255 or 455.


Create your local repository in a directory, which we use cs255repos as an example.  The sequence of commands needed are

mkdir cs255repos 
cd cs255repos
hg init

Create the file cs255repos/.hg/hgrc and add the following (if your repository is not on the same network as cycle1, e.g. on your laptop).  Otherwise use file://u/cs255/repos (CSC 255) or file://u/cding/cs255hg (CSC 455) instead of ssh addresses.  If ssh is used, you will need to type in your password each time you synchronize with server repository (your local commits never require a password).

Add the following lines in 'hgrc' if you are taking 255:
default = ssh://[uid]
default-push = ssh://[uid]

Or add the following lines in 'hgrc' if you are in 455:
default = ssh://[uid]
default-push = ssh://[uid]

Set up your user name by creating the file in your home directory ~/.hgrc and add the following

username = First, Last <email>

 Textbooks and other resources

Optimizing Compilers for Modern Architectures (UR access through books24x7), Randy Allen and Ken Kennedy, Morgan Kaufmann Publishers, 2001. Chapters 1, 2, 3, 7, 8, 9, 10, 11. lecture notes from Ken Kennedy. On-line Errata

Engineering a Compiler, (2nd edition preferred, 1st okay) Keith D. Cooper and Linda Torczon, Morgan Kaufmann Publishers. Chapters 1, 8, 9, 10, 12 and 13 (both editions). lecture notes and additional reading from Keith Cooper. On-line Errata