< 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 >