src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BranchProbabilityNode.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BranchProbabilityNode.java Wed Jun 27 16:57:21 2018 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/BranchProbabilityNode.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.nodes.extended;
import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_0;
@@ -69,6 +71,15 @@
public static final double VERY_FAST_PATH_PROBABILITY = 0.999;
public static final double VERY_SLOW_PATH_PROBABILITY = 1 - VERY_FAST_PATH_PROBABILITY;
+ /*
+ * This probability may seem excessive, but it makes a difference in long running loops. Lets
+ * say a loop is executed 100k times and it has a few null checks with probability 0.999. As
+ * these probabilities multiply for every loop iteration, the overall loop frequency will be
+ * calculated as approximately 30 while it should be 100k.
+ */
+ public static final double LUDICROUSLY_FAST_PATH_PROBABILITY = 0.999999;
+ public static final double LUDICROUSLY_SLOW_PATH_PROBABILITY = 1 - LUDICROUSLY_FAST_PATH_PROBABILITY;
+
@Input ValueNode probability;
@Input ValueNode condition;