Rename DataFlowPass to DefiniteAssignmentPass and AbstractFlowPass to DataFlowPass. DataFlowPass is actually a specific implementation of lattice data flow implementing definite assignment. AbstractFlowPass is the abstract class representing generalized lattice data flow.
Move use-analysis out of DataFlowPass entirely. The most confusing thing about use-analysis being in DataFlowPass right now is it is assumed that use analysis incorporates data flow knowledge into use metrics, e.g. a use of a variable in unreachable code may not be regarded as an actual use. This is not true. Use analysis is a simple tree walk that doesn't incorporate data flow at all. The second problem is that fixes to use analysis, which are simple, straightforward warnings, suddenly carry a lot more risk because they impact how almost all data flow analysis in the compiler is performed, including things like async capturing.
There are two things I would like to do:
Rename DataFlowPass to DefiniteAssignmentPass and AbstractFlowPass to DataFlowPass. DataFlowPass is actually a specific implementation of lattice data flow implementing definite assignment. AbstractFlowPass is the abstract class representing generalized lattice data flow.
Move use-analysis out of DataFlowPass entirely. The most confusing thing about use-analysis being in DataFlowPass right now is it is assumed that use analysis incorporates data flow knowledge into use metrics, e.g. a use of a variable in unreachable code may not be regarded as an actual use. This is not true. Use analysis is a simple tree walk that doesn't incorporate data flow at all. The second problem is that fixes to use analysis, which are simple, straightforward warnings, suddenly carry a lot more risk because they impact how almost all data flow analysis in the compiler is performed, including things like async capturing.