# HG changeset patch # User Bernhard Urban # Date 1365170097 -7200 # Node ID 369710426f7432221bb1c6c807a6efe04d20e96c # Parent ce271e0d03726cc95f4ee03345a9b23c0006e100 PushNodesThroughPi: add metric for pushed nodes diff -r ce271e0d0372 -r 369710426f74 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Fri Apr 05 15:24:22 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Fri Apr 05 15:54:57 2013 +0200 @@ -80,7 +80,8 @@ } @Override - public void push(PiNode parent) { + public boolean push(PiNode parent) { replaceFirstInput(parent, parent.object()); + return true; } } diff -r ce271e0d0372 -r 369710426f74 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Fri Apr 05 15:24:22 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Fri Apr 05 15:54:57 2013 +0200 @@ -99,7 +99,7 @@ } @Override - public void push(PiNode parent) { + public boolean push(PiNode parent) { Object locId = location().locationIdentity(); if (locId instanceof ResolvedJavaField) { ResolvedJavaType fieldType = ((ResolvedJavaField) locId).getDeclaringClass(); @@ -107,8 +107,10 @@ if (fieldType.isAssignableFrom(beforePiType)) { replaceFirstInput(parent, parent.object()); + return true; } } + return false; } /** diff -r ce271e0d0372 -r 369710426f74 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/PiPushable.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/PiPushable.java Fri Apr 05 15:24:22 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/PiPushable.java Fri Apr 05 15:54:57 2013 +0200 @@ -29,5 +29,10 @@ */ public interface PiPushable { - void push(PiNode parent); + /** + * + * @param parent PiNode + * @return true if node was moved + */ + boolean push(PiNode parent); } diff -r ce271e0d0372 -r 369710426f74 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/PushNodesThroughPi.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/PushNodesThroughPi.java Fri Apr 05 15:24:22 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/PushNodesThroughPi.java Fri Apr 05 15:54:57 2013 +0200 @@ -22,6 +22,7 @@ */ package com.oracle.graal.phases.common; +import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -29,13 +30,17 @@ public class PushNodesThroughPi extends Phase { + public static final DebugMetric PUSHED_NODES = Debug.metric("NodesPushedThroughPi"); + @Override protected void run(StructuredGraph graph) { for (PiNode pi : graph.getNodes(PiNode.class)) { for (Node n : pi.usages().snapshot()) { if (n instanceof PiPushable) { PiPushable pip = (PiPushable) n; - pip.push(pi); + if (pip.push(pi)) { + PUSHED_NODES.add(1); + } } } }