src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/DefaultLoopPolicies.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.loop/src/org/graalvm/compiler/loop/DefaultLoopPolicies.java

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

Print this page

        

*** 44,71 **** import org.graalvm.compiler.nodes.cfg.Block; import org.graalvm.compiler.nodes.cfg.ControlFlowGraph; import org.graalvm.compiler.nodes.java.TypeSwitchNode; import org.graalvm.compiler.options.Option; import org.graalvm.compiler.options.OptionType; ! import org.graalvm.compiler.options.OptionValue; import jdk.vm.ci.meta.MetaAccessProvider; public class DefaultLoopPolicies implements LoopPolicies { ! @Option(help = "", type = OptionType.Expert) public static final OptionValue<Integer> LoopUnswitchMaxIncrease = new OptionValue<>(500); ! @Option(help = "", type = OptionType.Expert) public static final OptionValue<Integer> LoopUnswitchTrivial = new OptionValue<>(10); ! @Option(help = "", type = OptionType.Expert) public static final OptionValue<Double> LoopUnswitchFrequencyBoost = new OptionValue<>(10.0); ! ! @Option(help = "", type = OptionType.Expert) public static final OptionValue<Integer> FullUnrollMaxNodes = new OptionValue<>(300); ! @Option(help = "", type = OptionType.Expert) public static final OptionValue<Integer> FullUnrollMaxIterations = new OptionValue<>(600); ! @Option(help = "", type = OptionType.Expert) public static final OptionValue<Integer> ExactFullUnrollMaxNodes = new OptionValue<>(1200); @Override public boolean shouldPeel(LoopEx loop, ControlFlowGraph cfg, MetaAccessProvider metaAccess) { LoopBeginNode loopBegin = loop.loopBegin(); double entryProbability = cfg.blockFor(loopBegin.forwardEnd()).probability(); ! if (entryProbability > MinimumPeelProbability.getValue() && loop.size() + loopBegin.graph().getNodeCount() < MaximumDesiredSize.getValue()) { // check whether we're allowed to peel this loop return loop.canDuplicateLoop(); } else { return false; } --- 44,73 ---- import org.graalvm.compiler.nodes.cfg.Block; import org.graalvm.compiler.nodes.cfg.ControlFlowGraph; import org.graalvm.compiler.nodes.java.TypeSwitchNode; import org.graalvm.compiler.options.Option; import org.graalvm.compiler.options.OptionType; ! import org.graalvm.compiler.options.OptionValues; ! import org.graalvm.compiler.options.OptionKey; import jdk.vm.ci.meta.MetaAccessProvider; public class DefaultLoopPolicies implements LoopPolicies { ! @Option(help = "", type = OptionType.Expert) public static final OptionKey<Integer> LoopUnswitchMaxIncrease = new OptionKey<>(500); ! @Option(help = "", type = OptionType.Expert) public static final OptionKey<Integer> LoopUnswitchTrivial = new OptionKey<>(10); ! @Option(help = "", type = OptionType.Expert) public static final OptionKey<Double> LoopUnswitchFrequencyBoost = new OptionKey<>(10.0); ! ! @Option(help = "", type = OptionType.Expert) public static final OptionKey<Integer> FullUnrollMaxNodes = new OptionKey<>(300); ! @Option(help = "", type = OptionType.Expert) public static final OptionKey<Integer> FullUnrollMaxIterations = new OptionKey<>(600); ! @Option(help = "", type = OptionType.Expert) public static final OptionKey<Integer> ExactFullUnrollMaxNodes = new OptionKey<>(1200); @Override public boolean shouldPeel(LoopEx loop, ControlFlowGraph cfg, MetaAccessProvider metaAccess) { LoopBeginNode loopBegin = loop.loopBegin(); double entryProbability = cfg.blockFor(loopBegin.forwardEnd()).probability(); ! OptionValues options = cfg.graph.getOptions(); ! if (entryProbability > MinimumPeelProbability.getValue(options) && loop.size() + loopBegin.graph().getNodeCount() < MaximumDesiredSize.getValue(options)) { // check whether we're allowed to peel this loop return loop.canDuplicateLoop(); } else { return false; }
*** 74,89 **** @Override public boolean shouldFullUnroll(LoopEx loop) { if (!loop.isCounted() || !loop.counted().isConstantMaxTripCount()) { return false; } CountedLoopInfo counted = loop.counted(); long maxTrips = counted.constantMaxTripCount(); ! int maxNodes = (counted.isExactTripCount() && counted.isConstantExactTripCount()) ? ExactFullUnrollMaxNodes.getValue() : FullUnrollMaxNodes.getValue(); ! maxNodes = Math.min(maxNodes, Math.max(0, MaximumDesiredSize.getValue() - loop.loopBegin().graph().getNodeCount())); int size = Math.max(1, loop.size() - 1 - loop.loopBegin().phis().count()); ! if (maxTrips <= FullUnrollMaxIterations.getValue() && size * (maxTrips - 1) <= maxNodes) { // check whether we're allowed to unroll this loop return loop.canDuplicateLoop(); } else { return false; } --- 76,92 ---- @Override public boolean shouldFullUnroll(LoopEx loop) { if (!loop.isCounted() || !loop.counted().isConstantMaxTripCount()) { return false; } + OptionValues options = loop.entryPoint().getOptions(); CountedLoopInfo counted = loop.counted(); long maxTrips = counted.constantMaxTripCount(); ! int maxNodes = (counted.isExactTripCount() && counted.isConstantExactTripCount()) ? ExactFullUnrollMaxNodes.getValue(options) : FullUnrollMaxNodes.getValue(options); ! maxNodes = Math.min(maxNodes, Math.max(0, MaximumDesiredSize.getValue(options) - loop.loopBegin().graph().getNodeCount())); int size = Math.max(1, loop.size() - 1 - loop.loopBegin().phis().count()); ! if (maxTrips <= FullUnrollMaxIterations.getValue(options) && size * (maxTrips - 1) <= maxNodes) { // check whether we're allowed to unroll this loop return loop.canDuplicateLoop(); } else { return false; }
*** 94,104 **** LoopBeginNode loopBegin = loop.loopBegin(); double loopFrequency = loopBegin.loopFrequency(); if (loopFrequency <= 1.0) { return false; } ! return loopBegin.unswitches() <= LoopMaxUnswitch.getValue(); } private static final class CountingClosure implements VirtualClosure { int count; --- 97,108 ---- LoopBeginNode loopBegin = loop.loopBegin(); double loopFrequency = loopBegin.loopFrequency(); if (loopFrequency <= 1.0) { return false; } ! OptionValues options = loop.entryPoint().getOptions(); ! return loopBegin.unswitches() <= LoopMaxUnswitch.getValue(options); } private static final class CountingClosure implements VirtualClosure { int count;
*** 130,143 **** } int inBranchTotal = branchNodes.count(); CountingClosure stateNodesCount = new CountingClosure(); double loopFrequency = loop.loopBegin().loopFrequency(); ! int maxDiff = LoopUnswitchTrivial.getValue() + (int) (LoopUnswitchFrequencyBoost.getValue() * (loopFrequency - 1.0 + phis)); ! maxDiff = Math.min(maxDiff, LoopUnswitchMaxIncrease.getValue()); ! int remainingGraphSpace = MaximumDesiredSize.getValue() - loop.loopBegin().graph().getNodeCount(); maxDiff = Math.min(maxDiff, remainingGraphSpace); loop.loopBegin().stateAfter().applyToVirtual(stateNodesCount); int loopTotal = loop.size() - loop.loopBegin().phis().count() - stateNodesCount.count - 1; int actualDiff = (loopTotal - inBranchTotal); --- 134,148 ---- } int inBranchTotal = branchNodes.count(); CountingClosure stateNodesCount = new CountingClosure(); double loopFrequency = loop.loopBegin().loopFrequency(); ! OptionValues options = loop.loopBegin().getOptions(); ! int maxDiff = LoopUnswitchTrivial.getValue(options) + (int) (LoopUnswitchFrequencyBoost.getValue(options) * (loopFrequency - 1.0 + phis)); ! maxDiff = Math.min(maxDiff, LoopUnswitchMaxIncrease.getValue(options)); ! int remainingGraphSpace = MaximumDesiredSize.getValue(options) - loop.loopBegin().graph().getNodeCount(); maxDiff = Math.min(maxDiff, remainingGraphSpace); loop.loopBegin().stateAfter().applyToVirtual(stateNodesCount); int loopTotal = loop.size() - loop.loopBegin().phis().count() - stateNodesCount.count - 1; int actualDiff = (loopTotal - inBranchTotal);
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/DefaultLoopPolicies.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File