< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/ComputeLoopFrequenciesClosure.java

Print this page
rev 52509 : [mq]: graal

*** 22,32 **** */ package org.graalvm.compiler.java; ! import static org.graalvm.compiler.nodes.cfg.ControlFlowGraph.multiplyProbabilities; import java.util.List; import jdk.internal.vm.compiler.collections.EconomicMap; import org.graalvm.compiler.nodes.AbstractBeginNode; --- 22,32 ---- */ package org.graalvm.compiler.java; ! import static org.graalvm.compiler.nodes.cfg.ControlFlowGraph.multiplyRelativeFrequencies; import java.util.List; import jdk.internal.vm.compiler.collections.EconomicMap; import org.graalvm.compiler.nodes.AbstractBeginNode;
*** 73,93 **** @Override protected EconomicMap<LoopExitNode, Double> processLoop(LoopBeginNode loop, Double initialState) { EconomicMap<LoopExitNode, Double> exitStates = ReentrantNodeIterator.processLoop(this, loop, 1D).exitStates; ! double exitProbability = 0.0; for (double d : exitStates.getValues()) { ! exitProbability += d; } ! exitProbability = Math.min(1.0, exitProbability); ! exitProbability = Math.max(ControlFlowGraph.MIN_PROBABILITY, exitProbability); ! double loopFrequency = 1.0 / exitProbability; loop.setLoopFrequency(loopFrequency); double adjustmentFactor = initialState * loopFrequency; ! exitStates.replaceAll((exitNode, probability) -> multiplyProbabilities(probability, adjustmentFactor)); return exitStates; } /** --- 73,93 ---- @Override protected EconomicMap<LoopExitNode, Double> processLoop(LoopBeginNode loop, Double initialState) { EconomicMap<LoopExitNode, Double> exitStates = ReentrantNodeIterator.processLoop(this, loop, 1D).exitStates; ! double exitRelativeFrequency = 0.0; for (double d : exitStates.getValues()) { ! exitRelativeFrequency += d; } ! exitRelativeFrequency = Math.min(1.0, exitRelativeFrequency); ! exitRelativeFrequency = Math.max(ControlFlowGraph.MIN_RELATIVE_FREQUENCY, exitRelativeFrequency); ! double loopFrequency = 1.0 / exitRelativeFrequency; loop.setLoopFrequency(loopFrequency); double adjustmentFactor = initialState * loopFrequency; ! exitStates.replaceAll((exitNode, frequency) -> multiplyRelativeFrequencies(frequency, adjustmentFactor)); return exitStates; } /**
< prev index next >