private void processOperandRefs(Address address, int opIndex) {
		Reference[] latestRefs = latestRefMgr.getReferencesFrom(address, opIndex);
		Reference[] myRefs = myRefMgr.getReferencesFrom(address, opIndex);
		Reference[] originalRefs = originalRefMgr.getReferencesFrom(address, opIndex);
		// Only need the non-fallthrough references so call getDiffRefs().
		latestRefs = ProgramDiff.getDiffRefs(latestRefs);
		myRefs = ProgramDiff.getDiffRefs(myRefs);
		originalRefs = ProgramDiff.getDiffRefs(originalRefs);
		Arrays.sort(latestRefs);
		Arrays.sort(myRefs);
		Arrays.sort(originalRefs);
		if (equalRefArrays(listingMergeMgr.diffLatestMy, latestRefs, myRefs)) {
			return; // LATEST and MY refs match.
		}
		if (equalRefArrays(listingMergeMgr.diffOriginalMy, originalRefs, myRefs)) {
			return; // No changes to MY from original
		}
		if (equalRefArrays(listingMergeMgr.diffOriginalLatest, originalRefs, latestRefs)) {
			listingMergeMgr.mergeMy.replaceReferences(address, opIndex);
			return; // No changes to LATEST from original so automerge MY.
		}
		// Otherwise, something changed in LATEST and in MY.
		if (!compatibleRefs(myRefs, latestRefs)) {
			saveTypeConflict(address, opIndex);
			return;
		}
		// Otherwise the type of references are similar.
		Reference someRef = getSomeRef(myRefs, latestRefs);
		if (someRef.isMemoryReference()) {
			processMemoryRefs(address, opIndex, latestRefs, myRefs, originalRefs);
		}
		else {
			processSingleRefs(address, opIndex, latestRefs, myRefs, originalRefs);
		}
	}
Merges the references from the same program that had its code units chosen
in the Code Unit merge phase.
@param monitor the task monitor for allowing cancel and showing progress.
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ReferenceMerger.java