CS 551 Compiler Construction I

 Announcments  Lectures  Programs  Course Resources  Assignments & Solutions  Grading Policy
Course Description
Covers the tools and techniques compilers use to optimize code to run on modern computers with deep memory hierarchies and coarse and fine grained parallelism. Topics include data dependence, program transformations, instruction scheduling, optimizations for fine grained parallelism, coarse grained parallelism, register usage and managing cache.
Course Objectives
  1. To be able to use dependency analysis to determine allowable program transformations and parallelism.
  2. To be able to perform transformations to enhance parallelism.
  3. To be able to perform transformations to better utilize the memory hierarchy.
  4. To be able to schedule instruction to improver performance.
  5. To be able to perform dependency analysis and program transformations in practice using a suite of compiler tools.
The official prerequisite is CS 525 (Theory of Computation); however, what is required is familiarity with automata, grammars, scanning, parsing, and simple code generation at the level of an undergraduate compiler course or an implementation oriented programming languages course (e.g. CS 360). Students should also be familiar with the fundamentals of computer architecture (e.g. CS 281-282) and algorithms and data structures (e.g. CS 260). An ideal prerequisite would be CS 550 - Programming Languages. Solid programming skills are a must.
Jeremy Johnson
Office: 100 University Crossings
phone: (215) 895-2669
e-mail: jjohnson AT cs DOT drexel DOT edu
office hours: R 4-6, M 8-9 (online). Additional hours by appointment.
Course mail list: Use discussion groups in BbVista
Meeting Time
R 6:30-9:20 in Korman 116 (and online)
Randy Allen and Ken Kennedy, Optimizing Compilers for Modern Architectures, Morgan Kaufmann, 2002.


  1. Written assignments and quizzes (30%)
  2. Programming Assignments 45% (3 each worth 15%)
  3. Take home final exam (25%)

All assignments must be completed alone unless otherwise stated. No Late assignments will be accepted without prior approval.


Reference Books
  1. More to be added.
Web Pages
Other Reference

Look Here for Important Announcements

(See BbVista)


This list is tentative and may be modified at the instructor's discretion.
  1. Lecture 1 (Jan. 12): Compiler Challenges for High-Performance Architectures.
  2. Lecture 2 (Jan. 19): Dependence Theory and Practice.
  3. Lecture 3 (Jan. 26): Dependence Testing.
  4. Lecture 4 (Feb. 2): Program Transformations.
  5. Lecture 5 (Feb. 9): Fine-Grained Parallelism.
  6. Lecture 6 (Feb. 16): Coarse-Grained Parallelism.
  7. Lecture 7 (Feb. 23): Control Flow.
  8. Lecture 8 (Mar. 1): Register Usage.
  9. Lecture 9 (Mar. 8): Managing Cache.
  10. Lecture 10 (Mar. 15): Scheduling.
  11. Final Exam Due (Mar. 22 by 11:59pm).



A series of programming assignments will be given utilizing the LLVM Compiler Infratructure
Created: 12/9/11 by jjohnson AT cs DOT drexel DOT edu