private void graphOpData(AttributedGraph graph, PcodeOpAST op, TaskMonitor monitor)
			throws CancelledException {

		// TODO: Dropped INDIRECT pcode ops ??

		if (op == null || op.getOpcode() == PcodeOp.INDIRECT) {
			return;
		}

		AttributedVertex opVertex = getOpVertex(graph, op, monitor);

		Varnode output = op.getOutput();
		if (output != null) {
			opVertex = getOpVertex(graph, op, monitor);
			AttributedVertex outVertex = getDataVertex(graph, output, monitor);
			graph.addEdge(opVertex, outVertex);
			// TODO: set edge attributes ??
		}

		int start = 0;
		int stop = op.getNumInputs() - 1;
		switch (op.getOpcode()) {
			case PcodeOp.LOAD:
			case PcodeOp.STORE:
			case PcodeOp.BRANCH:
			case PcodeOp.CALL:
				start = 1;
				break;
			case PcodeOp.INDIRECT:
				stop = 1;
				break;
		}

		for (int i = start; i <= stop; i++) {
			monitor.checkCancelled();
			Varnode input = op.getInput(i);
			if (input != null) {
				if (opVertex == null) {
					opVertex = getOpVertex(graph, op, monitor);
				}
				AttributedVertex inVertex = getDataVertex(graph, input, monitor);
				graph.addEdge(inVertex, opVertex);
				// TODO: set edge attributes ??
			}
		}
	}
Task to create a PCode control flow graph based on decompiler output
Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/PCodeCfgGraphTask.java