This document discusses dataflow analysis. It begins by introducing available expression analysis and why it is needed instead of testing programs at runtime. It then discusses the basic concepts of dataflow analysis including expressions, their life spans, and how to automate the analysis. The rest of the document discusses the technical details and theory behind dataflow analysis including lattices, partial orders, fixed point theory, and how the analysis algorithms work and are proven correct.