# HG changeset patch # User Gilles Duboscq # Date 1353942490 -3600 # Node ID 635349143c4f3ed6e8c5cbbff98f1052084bf80d # Parent 24950e93b962f64e27f0ba811d7069a969a67edf Insert less placeholder nodes in snippet code Remove placeholder chains diff -r 24950e93b962 -r 635349143c4f graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InsertStateAfterPlaceholderPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InsertStateAfterPlaceholderPhase.java Mon Nov 26 13:20:00 2012 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InsertStateAfterPlaceholderPhase.java Mon Nov 26 16:08:10 2012 +0100 @@ -50,16 +50,29 @@ if (stateAfter() == null) { return null; } + FixedNode next = next(); + if (next instanceof PlaceholderNode && ((PlaceholderNode) next).stateAfter() != null) { + return null; + } return this; } } @Override protected void run(StructuredGraph graph) { - for (ReturnNode ret : graph.getNodes(ReturnNode.class)) { - PlaceholderNode p = graph.add(new PlaceholderNode()); - p.setStateAfter(graph.add(new FrameState(FrameState.AFTER_BCI))); - graph.addBeforeFixed(ret, p); + boolean needsPlaceHolder = false; + for (Node node : graph.getNodes().filterInterface(StateSplit.class)) { + StateSplit stateSplit = (StateSplit) node; + if (stateSplit.hasSideEffect() && stateSplit.stateAfter() != null) { + needsPlaceHolder = true; + } + } + if (needsPlaceHolder) { + for (ReturnNode ret : graph.getNodes(ReturnNode.class)) { + PlaceholderNode p = graph.add(new PlaceholderNode()); + p.setStateAfter(graph.add(new FrameState(FrameState.AFTER_BCI))); + graph.addBeforeFixed(ret, p); + } } }