changeset 21008:76e3f83aa4ac

loop safepoints are removed during graph parsing of intrinsics and snippets
author Doug Simon <doug.simon@oracle.com>
date Fri, 17 Apr 2015 18:24:59 +0200
parents f84166ee0798
children 0fe8b02e5cb6
files graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java
diffstat 2 files changed, 11 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Apr 17 17:13:09 2015 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Apr 17 18:24:59 2015 +0200
@@ -404,6 +404,9 @@
                                 }
                                 LoopBeginNode loopBegin = (LoopBeginNode) ((EndNode) merge.next()).merge();
                                 LoopEndNode loopEnd = graph.add(new LoopEndNode(loopBegin));
+                                if (parsingReplacement()) {
+                                    loopEnd.disableSafepoint();
+                                }
                                 endNode.replaceAndDelete(loopEnd);
                             } else if (visited.contains(n)) {
                                 // Normal merge into a branch we are already exploring.
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Fri Apr 17 17:13:09 2015 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Fri Apr 17 18:24:59 2015 +0200
@@ -592,20 +592,15 @@
         }
 
         private StructuredGraph parseGraph(final ResolvedJavaMethod methodToParse, Object[] args) {
-            StructuredGraph graph = args == null ? replacements.graphCache.get(methodToParse) : null;
+            assert methodToParse.hasBytecodes() : methodToParse;
+            if (args != null) {
+                return buildInitialGraph(methodToParse, args);
+            }
+            StructuredGraph graph = replacements.graphCache.get(methodToParse);
             if (graph == null) {
-                StructuredGraph newGraph = null;
-                try (Scope s = Debug.scope("ParseGraph", methodToParse)) {
-                    newGraph = buildGraph(methodToParse, args);
-                } catch (Throwable e) {
-                    throw Debug.handle(e);
-                }
-                if (args == null) {
-                    replacements.graphCache.putIfAbsent(methodToParse, newGraph);
-                    graph = replacements.graphCache.get(methodToParse);
-                } else {
-                    graph = newGraph;
-                }
+                StructuredGraph newGraph = buildInitialGraph(methodToParse, args);
+                replacements.graphCache.putIfAbsent(methodToParse, newGraph);
+                graph = replacements.graphCache.get(methodToParse);
                 assert graph != null;
             }
             return graph;
@@ -669,22 +664,6 @@
         protected Object beforeInline(@SuppressWarnings("unused") MethodCallTargetNode callTarget, @SuppressWarnings("unused") StructuredGraph callee) {
             return null;
         }
-
-        private StructuredGraph buildGraph(final ResolvedJavaMethod methodToParse, Object[] args) {
-            assert methodToParse.hasBytecodes() : methodToParse;
-            final StructuredGraph graph = buildInitialGraph(methodToParse, args);
-            try (Scope s = Debug.scope("buildGraph", graph)) {
-
-                for (LoopEndNode end : graph.getNodes(LoopEndNode.TYPE)) {
-                    end.disableSafepoint();
-                }
-
-                new DeadCodeEliminationPhase(Required).apply(graph);
-            } catch (Throwable e) {
-                throw Debug.handle(e);
-            }
-            return graph;
-        }
     }
 
     private static String originalName(Method substituteMethod, String methodSubstitution) {