code: GraphvizGraph getPassGraph() {
      LinkedDirectedGraph<String, String> graph =
          LinkedDirectedGraph.createWithoutAnnotations();
      Iterable<PassFactory> allPasses =
          Iterables.concat(getChecks(), getOptimizations());
      String lastPass = null;
      String loopStart = null;
      for (PassFactory pass : allPasses) {
        String passName = pass.getName();
        int i = 1;
        while (graph.hasNode(passName)) {
          passName = pass.getName() + (i++);
        }
        graph.createNode(passName);
  
        if (loopStart == null && !pass.isOneTimePass()) {
          loopStart = passName;
        } else if (loopStart != null && pass.isOneTimePass()) {
          graph.connect(lastPass, "loop", loopStart);
          loopStart = null;
        }
  
        if (lastPass != null) {
          graph.connect(lastPass, "", passName);
        }
        lastPass = passName;
      }
      return graph;
    }
docs: Gets a graph of the passes run. For debugging.