# HG changeset patch # User Doug Simon # Date 1429287899 -7200 # Node ID 76e3f83aa4accff7cf18fb5f3f977d3d9cf35c40 # Parent f84166ee079878ede5bbc46f93f9d3d5729bed6b loop safepoints are removed during graph parsing of intrinsics and snippets diff -r f84166ee0798 -r 76e3f83aa4ac graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- 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. diff -r f84166ee0798 -r 76e3f83aa4ac graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java --- 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) {