changeset 18880:5be321eab6ac

made ReplacementsImpl.snippetTemplateCache stable across VM executions to support replay compilation
author Doug Simon <doug.simon@oracle.com>
date Mon, 19 Jan 2015 14:50:36 +0100
parents ec7dcd210467
children 5e85485a1b44
files graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java
diffstat 1 files changed, 6 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Mon Jan 19 14:46:55 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Mon Jan 19 14:50:36 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);
     }
 }