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, reachability, liveness, constant propagation. Intermediate Representations: Issues in design; High, medium and low level intermediate languages; Static Single Assignment, construction and destruction, Chi functions, applications in optimization. Optimization: Early optimization, scalar optimization, procedure optimization, 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 analysis, parallelization, code generation; profile guided optimization; compilation for modern architectures; modern compiler frameworks; compilation for non-imperative programming paradigms. Including or changing optimizations in gcc and llvm.