Mercurial > hg > truffle
changeset 18881:5e85485a1b44
Merge.
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 19 Jan 2015 16:06:04 +0100 |
parents | 5be321eab6ac (diff) 1ca36602c05b (current diff) |
children | ceeaa3d58f1c |
files | |
diffstat | 5 files changed, 62 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java Mon Jan 19 14:29:54 2015 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Kind.java Mon Jan 19 16:06:04 2015 +0100 @@ -70,6 +70,7 @@ private final boolean isStackInt; private final Class<?> primitiveJavaClass; private final Class<?> boxedJavaClass; + private final EnumKey key = new EnumKey(this); private Kind(char typeChar, String javaName, boolean isStackInt, Class<?> primitiveJavaClass, Class<?> boxedJavaClass) { this.typeChar = typeChar; @@ -95,6 +96,10 @@ return javaName; } + public Key getKey() { + return key; + } + /** * Checks whether this type is a Java primitive type. *
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java Mon Jan 19 14:29:54 2015 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/PlatformKind.java Mon Jan 19 16:06:04 2015 +0100 @@ -22,6 +22,8 @@ */ package com.oracle.graal.api.meta; +import com.sun.javafx.collections.MappingChange.Map; + /** * Represents a platform-specific low-level type for values. */ @@ -31,6 +33,43 @@ JavaConstant getDefaultValue(); + public interface Key { + + } + + public class EnumKey implements Key { + @SuppressWarnings("rawtypes") private final Enum e; + + @SuppressWarnings("rawtypes") + public EnumKey(Enum e) { + this.e = e; + } + + @Override + public int hashCode() { + return e.ordinal() ^ e.name().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj instanceof EnumKey) { + EnumKey that = (EnumKey) obj; + return this.e == that.e; + } + return false; + } + } + + /** + * Gets a value associated with this object that can be used as a stable key in a {@link Map}. + * The {@link Object#hashCode()} implementation of the returned value should be stable between + * VM executions. + */ + Key getKey(); + default int getVectorLength() { return 1; }
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Mon Jan 19 14:29:54 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Mon Jan 19 16:06:04 2015 +0100 @@ -750,6 +750,12 @@ @SuppressWarnings("unused") private void postDeserialization() { recomputeIterableNodeLists(); + + // CacheEntry.hashCode() is not stable across VM executions so + // the cachedLeafNodes map needs to be re-created. + HashMap<CacheEntry, Node> entries = new LinkedHashMap<>(cachedLeafNodes); + cachedLeafNodes.clear(); + cachedLeafNodes.putAll(entries); } /**
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Mon Jan 19 14:29:54 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Mon Jan 19 16:06:04 2015 +0100 @@ -52,7 +52,7 @@ private final boolean allAllocatableAreCallerSaved; - private final Map<PlatformKind, Register[]> categorized = new ConcurrentHashMap<>(); + private final Map<PlatformKind.Key, Register[]> categorized = new ConcurrentHashMap<>(); private final RegisterAttributes[] attributesMap; @@ -66,8 +66,10 @@ } public Register[] getAllocatableRegisters(PlatformKind kind) { - if (categorized.containsKey(kind)) { - return categorized.get(kind); + PlatformKind.Key key = kind.getKey(); + if (categorized.containsKey(key)) { + Register[] val = categorized.get(key); + return val; } ArrayList<Register> list = new ArrayList<>(); @@ -78,7 +80,7 @@ } Register[] ret = list.toArray(new Register[list.size()]); - categorized.put(kind, ret); + categorized.put(key, ret); return ret; }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Mon Jan 19 14:29:54 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Mon Jan 19 16:06:04 2015 +0100 @@ -196,7 +196,9 @@ private final Map<String, AtomicReference<ClassReplacements>> classReplacements; private final Map<String, Class<?>[]> internalNameToSubstitutionClasses; - private final Map<Class<? extends SnippetTemplateCache>, SnippetTemplateCache> snippetTemplateCache; + // This map is key'ed by a class name instead of a Class object so that + // it is stable across VM executions (in support of replay compilation). + private final Map<String, SnippetTemplateCache> snippetTemplateCache; public ReplacementsImpl(Providers providers, SnippetReflectionProvider snippetReflection, Assumptions assumptions, TargetDescription target) { this.providers = providers.copyWith(this); @@ -797,13 +799,13 @@ @Override public void registerSnippetTemplateCache(SnippetTemplateCache templates) { - assert snippetTemplateCache.get(templates.getClass()) == null; - snippetTemplateCache.put(templates.getClass(), templates); + assert snippetTemplateCache.get(templates.getClass().getName()) == null; + snippetTemplateCache.put(templates.getClass().getName(), templates); } @Override public <T extends SnippetTemplateCache> T getSnippetTemplateCache(Class<T> templatesClass) { - SnippetTemplateCache ret = snippetTemplateCache.get(templatesClass); + SnippetTemplateCache ret = snippetTemplateCache.get(templatesClass.getName()); return templatesClass.cast(ret); } }