detailed syllabus (tentative)

SUBJECT: Language Processor II (Compiler Design – Advanced)
1. Introduction to the course, Review of various phases of compiler studied in the previous
2. Run-Time Environments
 Source language issues, Storage organization, Storage-allocation strategies, Access to
nonlocal names, Parameter passing
 Symbol-Table Structure: Storage Classes, Visibility, and Lifetimes, Symbol Attributes
and Symbol-Table Entries, Local Symbol-Table Management, Global Symbol-Table
Structure, Storage Binding and Symbolic Registers, Approaches to Generating Loads
and Stores, Language facilities for dynamic storage allocation, Dynamic storage
allocation techniques, Storage allocation in C
3. Intermediate Code Generation
 Intermediate languages, Declarations, Assignment statements, Boolean expressions,
Case statements, Backpatching, Procedure calls.
4. Code Generation
 Issues in the design of a code generator, The target machine, Run-time storage
management, Basic blocks and flow graphs, Next-use information, A simple code
generator, Register allocation and assignment, The dag representation of basic blocks,
Peephole optimization, Generating code from dags, Dynamic programming codegeneration algorithm, Code-generator generators
5. Code Optimization
 Global Optimizations, Flow Sensitivity and May vs. Must Information, Importance of
Individual Optimizations, Order and Repetition of Optimizations.
 Early Optimizations: Constant-Expression Evaluation (Constant Folding), Scalar
Replacement of Aggregates, Algebraic Simplifications and Reassociation, Value
numbering, Copy Propagation, Sparse Conditional Constant Propagation.
 Redundancy Elimination: Common-Subexpression Elimination, Loop-Invariant Code
Motion, Partial-Redundancy Elimination, Redundancy Elimination and Reassociation,
Code Hoisting.
 Loop Optimizations: Induction-Variable Optimizations, Unnecessary Bounds –
Checking Elimination.
 Procedure Optimizations: Tail-Call Optimization and Tail-Recursion Elimination,
Procedure Integration, In-Line Expansion, Leaf-Routine Optimization and Shrink
6. Control-Flow Analysis
 Approaches to Control-Flow Analysis, Depth-First Search, Preorder Traversal,
Postorder Traversal, and Breadth-First Search, Dominators, Loops and Strongly
Connected Components, Reducibility, Interval Analysis and Control Trees, Structural
7. Data-Flow Analysis
 An Example: Reaching Definitions, Basic Concepts: Lattices, Flow Functions, and
Fixed Points, Taxonomy of Data-Flow Problems and Solution Methods, Iterative DataFlow Analysis, Lattices of Flow Functions, Control-Tree-Based Data-Flow Analysis,
Structural Analysis, Interval Analysis, Other Approaches, Du-Chains, Ud-Chains, and
Webs, Static Single-Assignment (SSA) Form, Dealing with Arrays, Structures, and
Pointers, Automating Construction of Data-Flow Analyzers, More Ambitious Analyses
8. Dependence Analysis and Dependence Graph
 Dependence Relations, Basic-Block Dependence DAGs, Dependences in Loops,
Dependence Testing, Program-Dependence Graphs, Dependences Between
Dynamically Allocated Objects
9. Optimization of the Memory Hierarchy
 Impact of Data and Instruction Caches, Instruction-Cache Optimization, Scalar
Replacement of Array Elements, Data-Cache Optimization, Scalar vs. MemoryOriented Optimizations.
10. Case Studies of Compilers and Future Trends
o The Sun Compilers for SPARC, The IBM XL Compilers for the POWER and PowerPC
Architectures, Digital Equipment's Compilers for Alpha, The Intel Reference
Compilers for the Intel 386 Architecture, Future Trends in Compiler Design and
Text Books Recommended
1. Aho, A.V., Ravi Sethi and J.D. Ullman, Compilers- Principles, Techniques and Tools,
Pearson education
2. Steven S. Muchnick., Advanced Compiler Design and Implementation, Morgan Kauffman/
Elsevier Science India.
Andrew W. Appel, Maia Ginsburg, Modern Compiler implementation in C, Oxford
university press.
John Levine, Tony Mason, Doug Brown, lex & yacc (A Nutshell Handbook)
Keith Cooper, Linda Torczon, Engineering a Compiler, Morgan Kauffman / Elsevier Science