• The construct graph organizes the constraints by their end-points. It can be used to view a R1: R2 constraint as either an edge R1 -> R2 or R2 -> R1 depending on the direction type D.
  • Edges 🔒
  • Normal 🔒
    In normal mode, a R1: R2 constraint results in an edge R1 -> R2. This is what we use when constructing the SCCs for inference. This is because we compute the value of R1 by union’ing all the things that it relies on.
  • This struct brings together a constraint set and a (normal, not reverse) constraint graph. It implements the graph traits and is usd for doing the SCC computation.
  • Reverse 🔒
    In reverse mode, a R1: R2 constraint results in an edge R2 -> R1. We use this for optimizing liveness computation, because then we wish to iterate from a region (e.g., R2) to all the regions that will outlive it (e.g., R1).
  • Successors 🔒


  • Marker trait that controls whether a R1: R2 constraint represents an edge R1 -> R2 or R2 -> R1.

Type Definitions