src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java
Print this page
*** 26,35 ****
--- 26,36 ----
import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_UNKNOWN;
import java.util.Arrays;
import org.graalvm.compiler.core.common.type.AbstractPointerStamp;
+ import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.graph.NodeSuccessorList;
*** 88,107 ****
--- 89,146 ----
assert total > 0.999 && total < 1.001 : "Total " + total;
return true;
}
@Override
+ public int getSuccessorCount() {
+ return successors.count();
+ }
+
+ @Override
public double probability(AbstractBeginNode successor) {
double sum = 0;
for (int i = 0; i < keySuccessors.length; i++) {
if (successors.get(keySuccessors[i]) == successor) {
sum += keyProbabilities[i];
}
}
return sum;
}
+ @Override
+ public boolean setProbability(AbstractBeginNode successor, double value) {
+ assert value <= 1.0 && value >= 0.0 : value;
+ assert assertProbabilities();
+
+ double sum = 0;
+ double otherSum = 0;
+ for (int i = 0; i < keySuccessors.length; i++) {
+ if (successors.get(keySuccessors[i]) == successor) {
+ sum += keyProbabilities[i];
+ } else {
+ otherSum += keyProbabilities[i];
+ }
+ }
+
+ if (otherSum == 0 || sum == 0) {
+ // Cannot correctly adjust probabilities.
+ return false;
+ }
+
+ double delta = value - sum;
+
+ for (int i = 0; i < keySuccessors.length; i++) {
+ if (successors.get(keySuccessors[i]) == successor) {
+ keyProbabilities[i] = Math.max(0.0, keyProbabilities[i] + (delta * keyProbabilities[i]) / sum);
+ } else {
+ keyProbabilities[i] = Math.max(0.0, keyProbabilities[i] - (delta * keyProbabilities[i]) / otherSum);
+ }
+ }
+ assert assertProbabilities();
+ return true;
+ }
+
public ValueNode value() {
return value;
}
public abstract boolean isSorted();
*** 199,204 ****
--- 238,245 ----
}
}
tool.addToWorkList(blockSuccessor(survivingEdge));
graph().removeSplit(this, blockSuccessor(survivingEdge));
}
+
+ public abstract Stamp getValueStampForSuccessor(AbstractBeginNode beginNode);
}
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/extended/SwitchNode.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File