src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/ComputeLoopFrequenciesClosure.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/ComputeLoopFrequenciesClosure.java Mon Mar 20 17:39:13 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/ComputeLoopFrequenciesClosure.java Mon Mar 20 17:39:13 2017
*** 21,32 ****
--- 21,30 ----
* questions.
*/
package org.graalvm.compiler.java;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.graalvm.compiler.nodes.AbstractBeginNode;
import org.graalvm.compiler.nodes.AbstractMergeNode;
import org.graalvm.compiler.nodes.ControlSplitNode;
import org.graalvm.compiler.nodes.FixedNode;
*** 34,43 ****
--- 32,42 ----
import org.graalvm.compiler.nodes.LoopExitNode;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
import org.graalvm.compiler.phases.Phase;
import org.graalvm.compiler.phases.graph.ReentrantNodeIterator;
+ import org.graalvm.util.EconomicMap;
public final class ComputeLoopFrequenciesClosure extends ReentrantNodeIterator.NodeIteratorClosure<Double> {
private static final ComputeLoopFrequenciesClosure INSTANCE = new ComputeLoopFrequenciesClosure();
*** 52,76 ****
--- 51,82 ----
}
@Override
protected Double merge(AbstractMergeNode merge, List<Double> states) {
// a merge has the sum of all predecessor probabilities
! return states.stream().collect(Collectors.summingDouble(d -> d));
! double result = 0.0;
+ for (double d : states) {
+ result += d;
+ }
+ return result;
}
@Override
protected Double afterSplit(AbstractBeginNode node, Double oldState) {
// a control split splits up the probability
ControlSplitNode split = (ControlSplitNode) node.predecessor();
return oldState * split.probability(node);
}
@Override
! protected EconomicMap<LoopExitNode, Double> processLoop(LoopBeginNode loop, Double initialState) {
! EconomicMap<LoopExitNode, Double> exitStates = ReentrantNodeIterator.processLoop(this, loop, 1D).exitStates;
! double exitProbability = exitStates.values().stream().mapToDouble(d -> d).sum();
! double exitProbability = 0.0;
+ for (double d : exitStates.getValues()) {
+ exitProbability += d;
+ }
exitProbability = Math.min(1D, exitProbability);
if (exitProbability < ControlFlowGraph.MIN_PROBABILITY) {
exitProbability = ControlFlowGraph.MIN_PROBABILITY;
}
assert exitProbability <= 1D && exitProbability >= 0D;
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/ComputeLoopFrequenciesClosure.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File