This document provides lecture notes on dataflow analysis techniques. It introduces liveness analysis, neededness analysis, and reaching definitions analysis. Liveness analysis is extended to handle memory references. Neededness analysis is introduced to identify dead code by determining which variables are needed, rather than just live. Reaching definitions analysis is a forward dataflow analysis used for optimizations like constant propagation. Examples are provided and the analysis rules for each technique are specified.