src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/LoopBeginNode.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.nodes/src/org/graalvm/compiler/nodes/LoopBeginNode.java	Fri Jul  7 09:31:24 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/LoopBeginNode.java	Fri Jul  7 09:31:24 2017

*** 41,63 **** --- 41,118 ---- @NodeInfo public final class LoopBeginNode extends AbstractMergeNode implements IterableNodeType, LIRLowerable { public static final NodeClass<LoopBeginNode> TYPE = NodeClass.create(LoopBeginNode.class); protected double loopFrequency; + protected double loopOrigFrequency; protected int nextEndIndex; protected int unswitches; + protected int splits; protected int inversionCount; + protected LoopType loopType; + protected int unrollFactor; + + public enum LoopType { + SIMPLE_LOOP, + PRE_LOOP, + MAIN_LOOP, + POST_LOOP + } /** See {@link LoopEndNode#canSafepoint} for more information. */ boolean canEndsSafepoint; @OptionalInput(InputType.Guard) GuardingNode overflowGuard; public LoopBeginNode() { super(TYPE); loopFrequency = 1; + loopOrigFrequency = 1; + unswitches = 0; + splits = 0; this.canEndsSafepoint = true; + loopType = LoopType.SIMPLE_LOOP; + unrollFactor = 1; + } + + public boolean isSimpleLoop() { + return (loopType == LoopType.SIMPLE_LOOP); + } + + public void setPreLoop() { + assert isSimpleLoop(); + loopType = LoopType.PRE_LOOP; + } + + public boolean isPreLoop() { + return (loopType == LoopType.PRE_LOOP); + } + + public void setMainLoop() { + assert isSimpleLoop(); + loopType = LoopType.MAIN_LOOP; + } + + public boolean isMainLoop() { + return (loopType == LoopType.MAIN_LOOP); + } + + public void setPostLoop() { + assert isSimpleLoop(); + loopType = LoopType.POST_LOOP; + } + + public boolean isPostLoop() { + return (loopType == LoopType.POST_LOOP); + } + + public int getUnrollFactor() { + return unrollFactor; + } + + public void setUnrollFactor(int currentUnrollFactor) { + unrollFactor = currentUnrollFactor; } /** Disables safepoint for the whole loop, i.e., for all {@link LoopEndNode loop ends}. */ public void disableSafepoint() { /* Store flag locally in case new loop ends are created later on. */
*** 66,75 **** --- 121,139 ---- for (LoopEndNode loopEnd : loopEnds()) { loopEnd.disableSafepoint(); } } + public double loopOrigFrequency() { + return loopOrigFrequency; + } + + public void setLoopOrigFrequency(double loopOrigFrequency) { + assert loopOrigFrequency >= 0; + this.loopOrigFrequency = loopOrigFrequency; + } + public double loopFrequency() { return loopFrequency; } public void setLoopFrequency(double loopFrequency) {
*** 120,134 **** --- 184,210 ---- result[end.endIndex()] = end; } return result; } + public boolean isSingleEntryLoop() { + return (forwardEndCount() == 1); + } + public AbstractEndNode forwardEnd() { assert forwardEndCount() == 1; return forwardEndAt(0); } + public int splits() { + return splits; + } + + public void incrementSplits() { + splits++; + } + @Override public void generate(NodeLIRBuilderTool gen) { // Nothing to emit, since this is node is used for structural purposes only. }

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/LoopBeginNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File