OpenJDK / graal / graal-jvmci-8
changeset 16194:7fb828b4c32b
made LoopsData clients clean up dead nodes created during loop analysis
line wrap: on
line diff
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedScaledInductionVariable.java Thu Jun 19 17:33:44 2014 +0200 @@ -25,6 +25,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.util.*; public class DerivedScaledInductionVariable extends InductionVariable { @@ -119,4 +120,11 @@ public long constantExtremum() { return base.constantExtremum() * scale.asConstant().asLong(); } + + @Override + public void deleteUnusedNodes() { + if (scale.usages().isEmpty()) { + GraphUtil.killWithUnusedFloatingInputs(scale); + } + } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/InductionVariable.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/InductionVariable.java Thu Jun 19 17:33:44 2014 +0200 @@ -62,7 +62,7 @@ public abstract Direction direction(); /** - * Returns the value node that is described by this InductionVariable instance. + * Returns the value node that is described by this induction variable. */ public abstract ValueNode valueNode(); @@ -104,4 +104,10 @@ * induction variable at the loop exit. */ public abstract ValueNode exitValueNode(); + + /** + * Deletes any nodes created within the scope of this object that have no usages. + */ + public void deleteUnusedNodes() { + } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/InductionVariables.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/InductionVariables.java Thu Jun 19 17:33:44 2014 +0200 @@ -121,4 +121,13 @@ } return null; } + + /** + * Deletes any nodes created within the scope of this object that have no usages. + */ + public void deleteUnusedNodes() { + for (InductionVariable iv : ivs.values()) { + iv.deleteUnusedNodes(); + } + } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java Thu Jun 19 17:33:44 2014 +0200 @@ -253,4 +253,13 @@ } return ivs; } + + /** + * Deletes any nodes created within the scope of this object that have no usages. + */ + public void deleteUnusedNodes() { + if (ivs != null) { + ivs.deleteUnusedNodes(); + } + } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopsData.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopsData.java Thu Jun 19 17:33:44 2014 +0200 @@ -121,4 +121,13 @@ } return match; } + + /** + * Deletes any nodes created within the scope of this object that have no usages. + */ + public void deleteUnusedNodes() { + for (LoopEx loop : loops()) { + loop.deleteUnusedNodes(); + } + } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java Thu Jun 19 17:33:44 2014 +0200 @@ -56,6 +56,7 @@ break; } } + dataCounted.deleteUnusedNodes(); } while (peeled); } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopSafepointEliminationPhase.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopSafepointEliminationPhase.java Thu Jun 19 17:33:44 2014 +0200 @@ -66,5 +66,6 @@ } } } + loops.deleteUnusedNodes(); } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformHighPhase.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformHighPhase.java Thu Jun 19 17:33:44 2014 +0200 @@ -47,6 +47,7 @@ Debug.dump(graph, "After peeling %s", loop); } } + data.deleteUnusedNodes(); } } }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformLowPhase.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopTransformLowPhase.java Thu Jun 19 17:33:44 2014 +0200 @@ -47,6 +47,7 @@ } catch (Throwable e) { throw Debug.handle(e); } + dataReassociate.deleteUnusedNodes(); } if (LoopUnswitch.getValue()) { boolean unswitched;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Thu Jun 19 17:33:44 2014 +0200 @@ -618,6 +618,7 @@ Mark mark = snippetCopy.getMark(); LoopTransformations.fullUnroll(loop, phaseContext, new CanonicalizerPhase(true)); new CanonicalizerPhase(true).applyIncremental(snippetCopy, phaseContext, mark); + loop.deleteUnusedNodes(); } GraphUtil.removeFixedWithUnusedInputs(explodeLoop); exploded = true;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Thu Jun 19 17:33:44 2014 +0200 @@ -120,6 +120,7 @@ } } } + loopsData.deleteUnusedNodes(); } while (unrolled); }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Thu Jun 19 17:13:10 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Thu Jun 19 17:33:44 2014 +0200 @@ -280,6 +280,7 @@ break; } } + loopsData.deleteUnusedNodes(); } while (unrolled); } catch (Throwable e) { throw Debug.handle(e);