Lecture Slides


   Introduction to course

   Getting started: A simple one-pass compiler (3 lectures)
   Stack Machines: SaM
   Parsing
   Recursive-descent parsing and code generation

   Back-end optimizations
   Solving fixpoint equations
   Scalar optimizations
   Control-flow graphs
   Live variables and copy propagation
   Dataflow analysis frameworks
   Lazy code motion (slides from Cooper and Torczon, Rice University)
        Papers: Lazy Code Motion by Jens Knoop et al (PLDI 1992)
                      Drechsler and Stadl's version of Lazy Code Motion (SIGPLAN Notices, May 1993)
   Strength Reduction
         Paper: Operator strength reduction by Cooper et al (TOPLAS September 2001)
   Dominators,control dependence,SSA
   Using SSA for optimization
         Papers:  The Program Dependence Graph and its Use in Optimization by Ferrante et al (TOPLAS July 1987)
                         Efficiently computing the SSA form and control dependence by Ferrante et al (TOPLAS 1991)
                         Algorithms for Computing the SSA Form by Bilardi et al (JACM, May 2003)
    Register allocation

   Abstract Interpretation: "All the world is an abstract interpretation" by David Schmidt.

  Vectorization: tutorial by Professor David Padua, UIUC

   Analysis and transformation of dense array programs:
       Loop transformations, dependence analysis, solving Diophantine equations
       Dependence abstractions
       Code generation using Fourier-Motzkin elimination
       Unimodular transformations
            Papers: The Omega test: a fast and practical integer programming algorithm for dependence analysis
                           Bill Pugh, CACM, August 1992.
                           Access normalization: loop restructuring for NUMA computers
                           Wei Li and Keshav Pingali, ACM Transactions on Computer Systems (TOCS), 1993.
                           A data locality optimizing algorithm
                           Michael Wolf and Monica Lam, PLDI 1991.