Course contents: Introduction: Compiler construction, architecture and compilation; Lexical, syntactic and semantic analysis; modern computer architectures. Control Flow and Dataflow Analysis: Basic blocks and loops, dominators, control dependence; Bit vectors, interval analysis, structural analysis, reachability, Data flow analysis (forward and backward) reaching definitions, constant propagation, conditional constant propagation Symbol table and Intermediate Representations: Symbol table design issues. Issues in design; High, medium and low level intermediate languages; Static Single Assignment, construction and destruction, Phi functions, applications in optimization Optimizations: Early optimizations, scalar optimizations, procedure optimizations, dependence analysis, loop optimizations, register allocation, code scheduling, interprocedural analysis and optimization, memory hierarchy optimization, bitwidth aware register allocation, analyzing parallel programs. Advanced Topics: Just-in-time compilation, garbage collection, pointer/alias analysis, parallelization, code generation; profile guided optimization; compilation for modern architectures; modern compiler frameworks; compilation for non-imperative programming paradigms.