hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ExpandLogicPhase.java
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ExpandLogicPhase.java Mon Dec 12 16:16:27 2016 +0300
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/ExpandLogicPhase.java Wed Mar 22 13:42:45 2017 -0700
@@ -46,6 +46,7 @@
processBinary(logic);
}
assert graph.getNodes(ShortCircuitOrNode.TYPE).isEmpty();
+ graph.setAllowShortCircuitOr(false);
}
private static void processBinary(ShortCircuitOrNode binary) {
@@ -90,6 +91,12 @@
trueTargetMerge.addForwardEnd(secondTrueEnd);
AbstractBeginNode firstTrueTarget = BeginNode.begin(firstTrueEnd);
AbstractBeginNode secondTrueTarget = BeginNode.begin(secondTrueEnd);
+ if (yNegated) {
+ secondIfProbability = 1.0 - secondIfProbability;
+ }
+ if (xNegated) {
+ firstIfProbability = 1.0 - firstIfProbability;
+ }
AbstractBeginNode secondIf = BeginNode.begin(graph.add(new IfNode(y, yNegated ? falseTarget : secondTrueTarget, yNegated ? secondTrueTarget : falseTarget, secondIfProbability)));
IfNode firstIf = graph.add(new IfNode(x, xNegated ? secondIf : firstTrueTarget, xNegated ? firstTrueTarget : secondIf, firstIfProbability));
ifNode.replaceAtPredecessor(firstIf);