Mercurial > hg > graal-jvmci-8
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) {