# HG changeset patch # User Thomas Wuerthinger # Date 1421838074 -3600 # Node ID 0061f550ef317adadf92117639588e65d9f57109 # Parent e8fd0342d9c468a73c8349ffea84b1c47feba8f5 Make starting node a parameter in the GraphBuilder. diff -r e8fd0342d9c4 -r 0061f550ef31 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 Wed Jan 21 11:55:37 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed Jan 21 12:01:14 2015 +0100 @@ -124,7 +124,7 @@ TTY.Filter filter = new TTY.Filter(PrintFilter.getValue(), method); try { BytecodeParser parser = new BytecodeParser(metaAccess, method, graphBuilderConfig, optimisticOpts, frameState, entryBCI); - parser.build(); + parser.build(graph.start()); } finally { filter.remove(); } @@ -158,7 +158,7 @@ super(metaAccess, method, graphBuilderConfig, optimisticOpts, frameState, entryBCI); } - protected void build() { + protected void build(FixedWithNextNode startInstruction) { if (PrintProfilingInformation.getValue()) { TTY.println("Profiling info for " + method.format("%H.%n(%p)")); TTY.println(MetaUtil.indent(profilingInfo.toString(method, CodeUtil.NEW_LINE), " ")); @@ -171,14 +171,21 @@ loopHeaders = blockMap.getLoopHeaders(); liveness = blockMap.liveness; - lastInstr = currentGraph.start(); - frameState.clearNonLiveLocals(blockMap.startBlock, liveness, true); - assert bci() == 0; - ((StateSplit) lastInstr).setStateAfter(frameState.create(bci())); + lastInstr = startInstruction; + + if (startInstruction == currentGraph.start()) { + StartNode startNode = currentGraph.start(); + if (method.isSynchronized()) { + startNode.setStateAfter(frameState.create(BytecodeFrame.BEFORE_BCI)); + } else { + frameState.clearNonLiveLocals(blockMap.startBlock, liveness, true); + assert bci() == 0; + startNode.setStateAfter(frameState.create(bci())); + } + } if (method.isSynchronized()) { // add a monitor enter to the start block - currentGraph.start().stateAfter().replaceAndDelete(frameState.create(BytecodeFrame.BEFORE_BCI)); methodSynchronizedObject = synchronizedObject(frameState, method); genMonitorEnter(methodSynchronizedObject); }