# HG changeset patch # User Doug Simon # Date 1417705923 -3600 # Node ID 965f1e08c083427770d3862287f2ca05c457ff88 # Parent 0aec14bcf006d9ce36a76963dbaa49f2166abd81# Parent 56c6eb8f52612addee026baf052ec67fff357569 Merge. diff -r 0aec14bcf006 -r 965f1e08c083 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ReferenceMap.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ReferenceMap.java Thu Dec 04 15:28:02 2014 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ReferenceMap.java Thu Dec 04 16:12:03 2014 +0100 @@ -46,7 +46,7 @@ ReferenceMap clone(); /** - * Merge in references marked in the {@code other} {@link ReferenceMap}. + * Updates this map with all references marked in {@code other}. */ - void mergeMaps(ReferenceMap other); + void updateUnion(ReferenceMap other); } diff -r 0aec14bcf006 -r 965f1e08c083 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LocationMarker.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LocationMarker.java Thu Dec 04 15:28:02 2014 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LocationMarker.java Thu Dec 04 16:12:03 2014 +0100 @@ -94,12 +94,12 @@ * Merge outSet with in-set of successors. */ private boolean updateOutBlock(AbstractBlock block) { - ReferenceMap merged = frameMap.initReferenceMap(true); - block.getSuccessors().forEach(succ -> merged.mergeMaps(liveInMap.get(succ))); + ReferenceMap union = frameMap.initReferenceMap(true); + block.getSuccessors().forEach(succ -> union.updateUnion(liveInMap.get(succ))); ReferenceMap outSet = liveOutMap.get(block); // check if changed - if (outSet == null || !merged.equals(outSet)) { - liveOutMap.put(block, merged); + if (outSet == null || !union.equals(outSet)) { + liveOutMap.put(block, union); return true; } return false; @@ -203,7 +203,7 @@ if (!info.hasDebugInfo()) { info.initDebugInfo(frameMap, !op.destroysCallerSavedRegisters() || !frameMap.getRegisterConfig().areAllAllocatableRegistersCallerSaved()); } - info.markLocation(refMap); + info.updateUnion(refMap); } /** diff -r 0aec14bcf006 -r 965f1e08c083 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReferenceMap.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReferenceMap.java Thu Dec 04 15:28:02 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReferenceMap.java Thu Dec 04 16:12:03 2014 +0100 @@ -230,30 +230,30 @@ } } - public void mergeMaps(ReferenceMap otherArg) { + public void updateUnion(ReferenceMap otherArg) { HotSpotReferenceMap other = (HotSpotReferenceMap) otherArg; if (registerRefMap != null) { assert other.registerRefMap != null; - mergeBitSetRaw(registerRefMap, other.registerRefMap); + updateUnionBitSetRaw(registerRefMap, other.registerRefMap); } else { assert other.registerRefMap == null || other.registerRefMap.cardinality() == 0 : "Target register reference map is empty but the source is not: " + other.registerRefMap; } - mergeBitSetRaw(frameRefMap, other.frameRefMap); + updateUnionBitSetRaw(frameRefMap, other.frameRefMap); } /** - * Merge the references from {@code src} into {@code dst}. + * Update {@code src} with the union of {@code src} and {@code dst}. * * @see HotSpotReferenceMap#registerRefMap * @see HotSpotReferenceMap#frameRefMap */ - private static void mergeBitSetRaw(BitSet dst, BitSet src) { + private static void updateUnionBitSetRaw(BitSet dst, BitSet src) { assert dst.size() == src.size(); - assert MergeVerifier.verifyMerge(dst, src); + assert UpdateUnionVerifier.verifyUpate(dst, src); dst.or(src); } - private enum MergeVerifier { + private enum UpdateUnionVerifier { NoReference, WideOop, NarrowOopLowerHalf, @@ -277,7 +277,7 @@ * @see HotSpotReferenceMap#registerRefMap * @see HotSpotReferenceMap#frameRefMap */ - static MergeVerifier getFromBits(int idx, BitSet set) { + static UpdateUnionVerifier getFromBits(int idx, BitSet set) { int n = (set.get(idx) ? 1 : 0) << 0 | (set.get(idx + 1) ? 1 : 0) << 1 | (set.get(idx + 2) ? 1 : 0) << 2; switch (n) { case 0: @@ -303,7 +303,7 @@ return String.format("%3s", Integer.toBinaryString(bits)).replace(' ', '0'); } - static int toBit(MergeVerifier type) { + static int toBit(UpdateUnionVerifier type) { switch (type) { case NoReference: return 0; @@ -320,20 +320,20 @@ } } - private static boolean verifyMerge(BitSet dst, BitSet src) { + private static boolean verifyUpate(BitSet dst, BitSet src) { for (int idx = 0; idx < dst.size(); idx += BITS_PER_WORD) { - if (!verifyMergeEntry(idx, dst, src)) { + if (!verifyUpdateEntry(idx, dst, src)) { return false; } } return true; } - private static boolean verifyMergeEntry(int idx, BitSet dst, BitSet src) { - MergeVerifier dstType = MergeVerifier.getFromBits(idx, dst); - MergeVerifier srcType = MergeVerifier.getFromBits(idx, src); + private static boolean verifyUpdateEntry(int idx, BitSet dst, BitSet src) { + UpdateUnionVerifier dstType = UpdateUnionVerifier.getFromBits(idx, dst); + UpdateUnionVerifier srcType = UpdateUnionVerifier.getFromBits(idx, src); - if (dstType == MergeVerifier.Illegal || srcType == MergeVerifier.Illegal) { + if (dstType == UpdateUnionVerifier.Illegal || srcType == UpdateUnionVerifier.Illegal) { assert false : String.format("Illegal RefMap bit pattern: %s (0b%s), %s (0b%s)", dstType, dstType.toBitString(), srcType, srcType.toBitString()); return false; } diff -r 0aec14bcf006 -r 965f1e08c083 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRFrameState.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRFrameState.java Thu Dec 04 15:28:02 2014 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRFrameState.java Thu Dec 04 16:12:03 2014 +0100 @@ -133,8 +133,11 @@ frameMap.setReference(location, debugInfo.getReferenceMap()); } - public void markLocation(ReferenceMap refMap) { - debugInfo.getReferenceMap().mergeMaps(refMap); + /** + * Updates this reference map with all references that are marked in {@code refMap}. + */ + public void updateUnion(ReferenceMap refMap) { + debugInfo.getReferenceMap().updateUnion(refMap); } /**