@Override
		public void visitVal(JitVal v) {
			final String name;
			final String label;
			if (v instanceof JitVar vv) {
				if (!vars.add(vv)) {
					return;
				}
				name = "var%d".formatted(vv.id());
				label = varLabel(vv);
			}
			else if (v instanceof JitConstVal cv) {
				name = "val%x".formatted(System.identityHashCode(cv));
				label = cv.value().toString();
			}
			else {
				throw new AssertionError();
			}

			out.println("""
					  "%s" [
					    label = "%s"
					    shape = "box"
					  ];
					""".formatted(name, label));
			for (ValUse use : v.uses()) {
				out.println("""
						  "%s" -> "op%x" [
						    dir = "back"
						    arrowhead = "none"
						    arrowtail = "crow"
						    taillabel = "use"
						  ];
						""".formatted(name, System.identityHashCode(use.op())));
			}
			if (v instanceof JitOutVar ov) {
				out.println("""
						  "op%x" -> "%s" [
						    dir = "back"
						    arrowhead = "none"
						    arrowtail = "crow"
						    taillabel = "def"
						  ];
						""".formatted(System.identityHashCode(ov.definition()), name));
			}

			JitOpUpwardVisitor.super.visitVal(v);
		}
A diagnostic tool for visualizing the use-def graph.

<p>
NOTE: This is only as complete as it needed to be for me to diagnose whatever issue I was
having at the time.

@see #exportGraphviz(File)
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowModel.java