CS 553 Midterm Review 2014 -------------------------- ---------------- Outline Data-flow analysis - be able to do liveness analysis - use the results of liveness analysis to do register allocation - difference between a must versus a may analysis Lattice Theoretic Framework - Terminology like top, bottom, meet, and under. - Tuples of lattices and how to use it for reaching constants and available expressions in LLVM. - What is the relationship between a bitvector tuple of lattices and a powerset lattice? Dominators - What are the dominators and what is the dominance frontier for every node in the control-flow graph? - What is the relationship between dominance frontiers and SSA? Data dependencies - Flow/True, Anti, and Output dependencies - Distance vectors - Direction vectors - How to determine distance or direction vectors for a single loop example. ---------------- Review Questions from reading assignments - What are the three main components in the typical compiler design? - What is a peephole optimization? What are some example peephole optimizations? - Does register allocation in LLVM occur on the SSA code or after the code has been taken out of SSA form? - What NP-Complete problem is register allocation typically reduced to? - What are some ways that virtual registers can be prioritized/ordered for register allocation heuristics? - What are three special characteristics of partial order relations? - There were a number of different program transformations described in the Padua and Wolfe paper. What were the three main goals these transformations targeted? - Define lexicographic ordering.