--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/ComputeLoopFrequenciesClosure.java 2017-03-20 17:39:13.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/ComputeLoopFrequenciesClosure.java 2017-03-20 17:39:13.000000000 -0700 @@ -23,8 +23,6 @@ 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; @@ -36,6 +34,7 @@ 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 { @@ -54,7 +53,11 @@ @Override protected Double merge(AbstractMergeNode merge, List 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 @@ -65,10 +68,13 @@ } @Override - protected Map processLoop(LoopBeginNode loop, Double initialState) { - Map exitStates = ReentrantNodeIterator.processLoop(this, loop, 1D).exitStates; + protected EconomicMap processLoop(LoopBeginNode loop, Double initialState) { + EconomicMap 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;