Topics to be Covered During Classtime

Referencs in () use MU for Muchnick's book and notation from the bibliography page for articles.

  1. Introduction and Overview
    1. The Role of Program Analysis in Software Development
    2. Forms of Program Analysis
  2. Formulating Problems as Data Flow Frameworks
    1. A Graphical Representation of Program Control
      1. Control Flow Graph (MU ch. 7)
      2. Call Graph (MU 19.1)
      3. Supergraph
    2. Transformations to Control Flow Representations (MU ch. 15,18)
    3. The Lattice Formulation (MU 8.1-8.3,8.5)
    4. Example Data Flow Problem Formulations
    5. Example Uses of Analysis for Transformation (MU ch 12,13,14)
    6. Properties and Classifications of Data Flow Problems
  3. Classical Data Flow Analysis Techniques
    1. Intraprocedural
      1. Iteration-based (MU 8.4,8.6,8.12)
      2. Elimination-based (MU 8.7-8.9)
    2. Interprocedural (MU 11.2, MU ch 19)
      1. Flow Insensitive, Context Insensitive
      2. Flow Sensitive, Context Sensitive
      3. Other Variations on Sensitivity
  4. Evaluation of Data Flow Analysis Techniques
  5. Alternate Program Representations for Scalability
    1. Changes in control flow graph to allow direct connections (avoid all points)
      1. Def-use chains (MU 8.10)
      2. SSA - faster analysis (MU 8.11)
      3. Sparse evaluation graph
      4. Dependence flow graph
      5. Congruence partitioning
      6. Program Dependence Graph
      7. Program Dependence Web
      8. Value dependence graph

    2. Changes in Supergraph (avoid all quantities simultaneously)
      1. SDG
      2. Program summary graph
      3. Sharir and Pnuelli's graph
      4. Exploded supergraph

  6. Alternate Solution Procedures for Scalability
    1. Avoids all points and all quantities
      1. Demand Driven
        1. Duesterwald et.al.
        2. Horwitz et.al.
      2. Slotwise - Dhamdhere et.al.

    2. Partitioning - Avoid all quantities simultaneously
      1. Using Types - Ruf
      2. Using pointer-related statements - Zhang et.al.
      3. Interprocedural
        1. Relevant Context Inference - Chatterjee et.al.
        2. Flow insensitive, context sensitive - Liang et.al.

    3. Parallelizing the Analysis
  7. Incremental Analysis
  8. Gaining Precision with Scalability in Mind
    1. Path-based Techniques
      1. Eliminate Paths - improve precision of whole program
        1. Labeled exploded supergraph and graph reachability - Reps et.al.
        2. Qualified Data Flow Analysis - Holley and Rosen
        3. Demand-driven infeasible path elimination via branch correlations (Bodik et.al.)

      2. Separate Paths - improve the precision on some paths
        1. Hot-path based Analysis - Ammons and Larus

        2. CFG unchanged - flow functions changed
          1. Value Flow Graph - Steffen et.al.
          2. Value Name Graph - Bodik and Anik

    2. Pointer Alias Analysis
      1. Points to Analysis
      2. Connection Analysis
      3. Shape Analysis