30 import jdk.vm.ci.meta.JavaKind; |
30 import jdk.vm.ci.meta.JavaKind; |
31 import org.graalvm.compiler.core.common.calc.CanonicalCondition; |
31 import org.graalvm.compiler.core.common.calc.CanonicalCondition; |
32 import org.graalvm.compiler.core.common.type.IntegerStamp; |
32 import org.graalvm.compiler.core.common.type.IntegerStamp; |
33 import org.graalvm.compiler.core.common.type.StampFactory; |
33 import org.graalvm.compiler.core.common.type.StampFactory; |
34 import org.graalvm.compiler.debug.GraalError; |
34 import org.graalvm.compiler.debug.GraalError; |
|
35 import org.graalvm.compiler.graph.Node; |
35 import org.graalvm.compiler.graph.NodeClass; |
36 import org.graalvm.compiler.graph.NodeClass; |
36 import org.graalvm.compiler.graph.iterators.NodePredicates; |
37 import org.graalvm.compiler.graph.iterators.NodePredicates; |
|
38 import org.graalvm.compiler.graph.spi.Canonicalizable; |
|
39 import org.graalvm.compiler.graph.spi.CanonicalizerTool; |
37 import org.graalvm.compiler.graph.spi.Simplifiable; |
40 import org.graalvm.compiler.graph.spi.Simplifiable; |
38 import org.graalvm.compiler.graph.spi.SimplifierTool; |
41 import org.graalvm.compiler.graph.spi.SimplifierTool; |
39 import org.graalvm.compiler.nodeinfo.NodeInfo; |
42 import org.graalvm.compiler.nodeinfo.NodeInfo; |
40 import org.graalvm.compiler.nodes.FixedGuardNode; |
43 import org.graalvm.compiler.nodes.FixedGuardNode; |
41 import org.graalvm.compiler.nodes.IfNode; |
44 import org.graalvm.compiler.nodes.IfNode; |
54 * Instances of this node class will look for a preceding if node and put the given probability into |
57 * Instances of this node class will look for a preceding if node and put the given probability into |
55 * the if node's taken probability. Then the branch probability node will be removed. This node is |
58 * the if node's taken probability. Then the branch probability node will be removed. This node is |
56 * intended primarily for snippets, so that they can define their fast and slow paths. |
59 * intended primarily for snippets, so that they can define their fast and slow paths. |
57 */ |
60 */ |
58 @NodeInfo(cycles = CYCLES_0, cyclesRationale = "Artificial Node", size = SIZE_0) |
61 @NodeInfo(cycles = CYCLES_0, cyclesRationale = "Artificial Node", size = SIZE_0) |
59 public final class BranchProbabilityNode extends FloatingNode implements Simplifiable, Lowerable { |
62 public final class BranchProbabilityNode extends FloatingNode implements Simplifiable, Lowerable, Canonicalizable { |
60 |
63 |
61 public static final NodeClass<BranchProbabilityNode> TYPE = NodeClass.create(BranchProbabilityNode.class); |
64 public static final NodeClass<BranchProbabilityNode> TYPE = NodeClass.create(BranchProbabilityNode.class); |
62 public static final double LIKELY_PROBABILITY = 0.6; |
65 public static final double LIKELY_PROBABILITY = 0.6; |
63 public static final double NOT_LIKELY_PROBABILITY = 1 - LIKELY_PROBABILITY; |
66 public static final double NOT_LIKELY_PROBABILITY = 1 - LIKELY_PROBABILITY; |
64 |
67 |