src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Wed Jun 27 16:57:21 2018 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/BytecodeParser.java Wed Jun 27 17:02:41 2018 -0700
@@ -20,6 +20,8 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+
+
package org.graalvm.compiler.java;
import static java.lang.String.format;
@@ -255,7 +257,8 @@
import static org.graalvm.compiler.java.BytecodeParserOptions.TraceParserPlugins;
import static org.graalvm.compiler.java.BytecodeParserOptions.UseGuardedIntrinsics;
import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.FAST_PATH_PROBABILITY;
-import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.SLOW_PATH_PROBABILITY;
+import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.LUDICROUSLY_FAST_PATH_PROBABILITY;
+import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.LUDICROUSLY_SLOW_PATH_PROBABILITY;
import static org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext.CompilationContext.INLINE_DURING_PARSING;
import static org.graalvm.compiler.nodes.type.StampTool.isPointerNonNull;
@@ -1379,7 +1382,7 @@
FixedNode trueSuccessor = passingOnTrue ? passingSuccessor : exception;
FixedNode falseSuccessor = passingOnTrue ? exception : passingSuccessor;
- append(new IfNode(condition, trueSuccessor, falseSuccessor, SLOW_PATH_PROBABILITY));
+ append(new IfNode(condition, trueSuccessor, falseSuccessor, passingOnTrue ? LUDICROUSLY_FAST_PATH_PROBABILITY : LUDICROUSLY_SLOW_PATH_PROBABILITY));
lastInstr = passingSuccessor;
exception.setStateAfter(createFrameState(bci(), exception));
@@ -2698,7 +2701,9 @@
private <T extends ValueNode> void updateLastInstruction(T v) {
if (v instanceof FixedNode) {
FixedNode fixedNode = (FixedNode) v;
- lastInstr.setNext(fixedNode);
+ if (lastInstr != null) {
+ lastInstr.setNext(fixedNode);
+ }
if (fixedNode instanceof FixedWithNextNode) {
FixedWithNextNode fixedWithNextNode = (FixedWithNextNode) fixedNode;
assert fixedWithNextNode.next() == null : "cannot append instruction to instruction which isn't end";
@@ -3600,7 +3605,7 @@
@Override
public void setStateAfter(StateSplit sideEffect) {
- assert sideEffect.hasSideEffect();
+ assert sideEffect.hasSideEffect() || sideEffect instanceof AbstractMergeNode;
FrameState stateAfter = createFrameState(stream.nextBCI(), sideEffect);
sideEffect.setStateAfter(stateAfter);
}
@@ -4602,9 +4607,9 @@
private double clampProbability(double probability) {
if (!optimisticOpts.removeNeverExecutedCode(getOptions())) {
if (probability == 0) {
- return 0.0000001;
+ return LUDICROUSLY_SLOW_PATH_PROBABILITY;
} else if (probability == 1) {
- return 0.999999;
+ return LUDICROUSLY_FAST_PATH_PROBABILITY;
}
}
return probability;