if (other.isBottom()) this.availableLoadMap.clear(); else if (!other.isTop()) this.availableLoadMap.entrySet().retainAll(other.availableLoadMap.entrySet());
String s = ""; if (RLE_DEBUG) { s = "Merging " + this.availableLoadMapAsString() + " and " + other.availableLoadMapAsString(); } boolean changed = false; if (other.isBottom()) { changed = !this.availableLoadMap.isEmpty(); availableLoadMap.clear(); loadForValueNumber.clear(); } else if (!other.isTop()) { for(Map.Entry<AvailableLoad,ValueNumber[]> e : availableLoadMap.entrySet()) { AvailableLoad load = e.getKey(); ValueNumber[] myVN = e.getValue(); ValueNumber[] otherVN = other.availableLoadMap.get(load); if (this.phiNodeForLoads && myVN != null && myVN.length == 1 && myVN[0].hasFlag(ValueNumber.PHI_NODE)) continue; if (!Arrays.equals(myVN, otherVN)) {  ValueNumber phi = mergedLoads.get(load); if (phi == null) { phi = factory.createFreshValue(); phi.setFlag(ValueNumber.PHI_NODE); mergedLoads.put(load, phi); if (RLE_DEBUG) System.out.println("Creating phi node " + phi + " for " + load);  }  changed = true; if (myVN != null) for(ValueNumber v : myVN) loadForValueNumber.remove(v); loadForValueNumber.put(phi, load); e.setValue(new ValueNumber[] { phi }); }  }   } if (changed) this.phiNodeForLoads = true; if (changed && RLE_DEBUG) { System.out.println(s); System.out.println("  Result is " + this.availableLoadMapAsString()); System.out.println(" Set phi for " + System.identityHashCode(this)); }
	void mergeAvailableLoadSets(ValueNumberFrame other) {		if (REDUNDANT_LOAD_ELIMINATION) {			// Merge available load sets.			// Only loads that are available in both frames			// remain available. All others are discarded.			if (other.isBottom())				this.availableLoadMap.clear();			else if (!other.isTop())				this.availableLoadMap.entrySet().retainAll(other.availableLoadMap.entrySet());		}	}