diff graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java @ 18401:e7ab82e7cc37

Move metaspace pointer handling to hotspot specific WordTypeRewriter.
author Roland Schatz <roland.schatz@oracle.com>
date Mon, 17 Nov 2014 17:25:38 +0100
parents 91283d4a1218
children 6dc4f0be9a70
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java	Mon Nov 17 14:59:54 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java	Mon Nov 17 17:25:38 2014 +0100
@@ -30,9 +30,11 @@
 import com.oracle.graal.compiler.common.*;
 import com.oracle.graal.hotspot.meta.*;
 import com.oracle.graal.hotspot.replacements.*;
+import com.oracle.graal.hotspot.word.*;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.phases.util.*;
 import com.oracle.graal.replacements.*;
+import com.oracle.graal.word.phases.*;
 
 /**
  * Filters certain method substitutions based on whether there is underlying hardware support for
@@ -97,4 +99,23 @@
         }
         return super.getMacroSubstitution(method);
     }
+
+    @Override
+    protected GraphMaker createGraphMaker(ResolvedJavaMethod substitute, ResolvedJavaMethod original, FrameStateProcessing frameStateProcessing) {
+        return new HotSpotGraphMaker(this, substitute, original, frameStateProcessing);
+    }
+
+    private static class HotSpotGraphMaker extends ReplacementsImpl.GraphMaker {
+
+        protected HotSpotGraphMaker(ReplacementsImpl replacements, ResolvedJavaMethod substitute, ResolvedJavaMethod substitutedMethod, FrameStateProcessing frameStateProcessing) {
+            super(replacements, substitute, substitutedMethod, frameStateProcessing);
+        }
+
+        @Override
+        protected void afterParsing(StructuredGraph graph) {
+            MetaAccessProvider metaAccess = replacements.providers.getMetaAccess();
+            new WordTypeVerificationPhase(metaAccess, replacements.snippetReflection, replacements.target.wordKind).apply(graph);
+            new HotSpotWordTypeRewriterPhase(metaAccess, replacements.snippetReflection, replacements.target.wordKind).apply(graph);
+        }
+    }
 }