# HG changeset patch # User Thomas Wuerthinger # Date 1427066797 -3600 # Node ID 58f2aad37d0ec0904957f635e1fb8c963c0540e7 # Parent 486cba140d2bc3137cad23e94ca6dabc50c77950 Further improvements to IGV. Make displayed names of nodes shorter. diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NamedLocationIdentity.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NamedLocationIdentity.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/NamedLocationIdentity.java Mon Mar 23 00:26:37 2015 +0100 @@ -88,7 +88,7 @@ @Override public String toString() { - return name + (isImmutable() ? ":immutable" : ":mutable"); + return name + (isImmutable() ? ":final" : ""); } /** diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -37,7 +37,7 @@ /** * The {@code ConstantNode} represents a {@link Constant constant}. */ -@NodeInfo(shortName = "Const", nameTemplate = "Const({p#rawvalue})") +@NodeInfo(nameTemplate = "C({p#rawvalue})") public final class ConstantNode extends FloatingNode implements LIRLowerable { public static final NodeClass TYPE = NodeClass.create(ConstantNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -25,7 +25,7 @@ import com.oracle.graal.graph.*; import com.oracle.graal.nodeinfo.*; -@NodeInfo(allowedUsageTypes = {InputType.Association}) +@NodeInfo(allowedUsageTypes = {InputType.Association}, nameTemplate = "End") public final class EndNode extends AbstractEndNode { public static final NodeClass TYPE = NodeClass.create(EndNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Mon Mar 23 00:26:37 2015 +0100 @@ -40,7 +40,7 @@ * * This can be used as debug or deoptimization information. */ -@NodeInfo(nameTemplate = "FrameState@{p#method/s}:{p#bci}") +@NodeInfo(nameTemplate = "@{p#method/s}:{p#bci}") public final class FrameState extends VirtualState implements IterableNodeType { public static final NodeClass TYPE = NodeClass.create(FrameState.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; -@NodeInfo(allowedUsageTypes = {InputType.Guard}) +@NodeInfo(allowedUsageTypes = {InputType.Guard}, nameTemplate = "Proxy({i#value})") public final class GuardProxyNode extends ProxyNode implements GuardingNode, Proxy, LIRLowerable { public static final NodeClass TYPE = NodeClass.create(GuardProxyNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -31,7 +31,7 @@ /** * Memory {@code PhiNode}s merge memory dependencies at control flow merges. */ -@NodeInfo(nameTemplate = "MemoryPhi({i#values}) {p#locationIdentity/s}", allowedUsageTypes = {InputType.Memory}) +@NodeInfo(nameTemplate = "Φ({i#values}) {p#locationIdentity/s}", allowedUsageTypes = {InputType.Memory}) public final class MemoryPhiNode extends PhiNode implements MemoryNode { public static final NodeClass TYPE = NodeClass.create(MemoryPhiNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -31,7 +31,7 @@ /** * The {@code Parameter} instruction is a placeholder for an incoming argument to a function call. */ -@NodeInfo(nameTemplate = "Param({p#index})") +@NodeInfo(nameTemplate = "P({p#index})") public final class ParameterNode extends AbstractLocalNode implements IterableNodeType, UncheckedInterfaceProvider { public static final NodeClass TYPE = NodeClass.create(ParameterNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -30,7 +30,7 @@ /** * The start node of a graph. */ -@NodeInfo(allowedUsageTypes = {InputType.Memory}) +@NodeInfo(allowedUsageTypes = {InputType.Memory}, nameTemplate = "Start") public class StartNode extends BeginStateSplitNode implements MemoryCheckpoint.Single { public static final NodeClass TYPE = NodeClass.create(StartNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -30,7 +30,7 @@ /** * Value {@link PhiNode}s merge data flow values at control flow merges. */ -@NodeInfo(nameTemplate = "ValuePhi({i#values})") +@NodeInfo(nameTemplate = "Φ({i#values})") public class ValuePhiNode extends PhiNode { public static final NodeClass TYPE = NodeClass.create(ValuePhiNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -27,7 +27,7 @@ import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.spi.*; -@NodeInfo +@NodeInfo(nameTemplate = "Proxy({i#value})") public final class ValueProxyNode extends ProxyNode implements Canonicalizable, Virtualizable, ValueProxy { public static final NodeClass TYPE = NodeClass.create(ValueProxyNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -36,7 +36,7 @@ * Location node that is the sum of two other location nodes. Can represent locations in the form of * [(base + x) + y] where base is a node and x and y are location nodes. */ -@NodeInfo(nameTemplate = "AddLoc {p#locationIdentity/s}") +@NodeInfo(nameTemplate = "&+({p#locationIdentity/s})") public final class AddLocationNode extends LocationNode implements Canonicalizable.Binary { public static final NodeClass TYPE = NodeClass.create(AddLocationNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -33,7 +33,7 @@ * Location node that has a constant displacement. Can represent addresses of the form [base + disp] * where base is a node and disp is a constant. */ -@NodeInfo(nameTemplate = "Loc {p#locationIdentity/s}") +@NodeInfo(nameTemplate = "&({p#locationIdentity/s})") public final class ConstantLocationNode extends LocationNode { public static final NodeClass TYPE = NodeClass.create(ConstantLocationNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -37,7 +37,7 @@ * [base + index * scale + disp] where base and index are nodes and scale and disp are integer * constants. */ -@NodeInfo(nameTemplate = "IdxLoc {p#locationIdentity/s}") +@NodeInfo(nameTemplate = "&({p#locationIdentity/s})[{i#index}]") public final class IndexedLocationNode extends LocationNode implements Canonicalizable { public static final NodeClass TYPE = NodeClass.create(IndexedLocationNode.class); diff -r 486cba140d2b -r 58f2aad37d0e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Sat Mar 21 16:22:15 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Mon Mar 23 00:26:37 2015 +0100 @@ -37,7 +37,7 @@ /** * The {@code LoadFieldNode} represents a read of a static or instance field. */ -@NodeInfo(nameTemplate = "LoadField#{p#field/s}") +@NodeInfo(nameTemplate = "#{p#field/s}") public final class LoadFieldNode extends AccessFieldNode implements Canonicalizable.Unary, VirtualizableRoot, UncheckedInterfaceProvider { public static final NodeClass TYPE = NodeClass.create(LoadFieldNode.class); diff -r 486cba140d2b -r 58f2aad37d0e src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/BinaryParser.java --- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/BinaryParser.java Sat Mar 21 16:22:15 2015 +0100 +++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/serialization/BinaryParser.java Mon Mar 23 00:26:37 2015 +0100 @@ -825,7 +825,7 @@ case "i": StringBuilder inputString = new StringBuilder(); for(Edge edge : edges) { - if (name.equals(edge.label)) { + if (edge.label.startsWith(name) && (name.length() == edge.label.length() || edge.label.charAt(name.length()) == '[')) { if (inputString.length() > 0) { inputString.append(", "); } diff -r 486cba140d2b -r 58f2aad37d0e src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalLayoutManager.java --- a/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalLayoutManager.java Sat Mar 21 16:22:15 2015 +0100 +++ b/src/share/tools/IdealGraphVisualizer/HierarchicalLayout/src/com/sun/hotspot/igv/hierarchicallayout/HierarchicalLayoutManager.java Mon Mar 23 00:26:37 2015 +0100 @@ -657,15 +657,31 @@ if (size == 0) { return n.x; } - int[] values = new int[size]; - for (int i = 0; i < size; i++) { - LayoutEdge e = n.preds.get(i); - values[i] = e.from.x + e.relativeFrom - e.relativeTo; + int vipCount = 0; + for (LayoutEdge e : n.preds) { if (e.vip) { - return values[i]; + vipCount++; } } - return median(values); + + if (vipCount == 0) { + int[] values = new int[size]; + for (int i = 0; i < size; i++) { + LayoutEdge e = n.preds.get(i); + values[i] = e.from.x + e.relativeFrom - e.relativeTo; + } + return median(values); + } else { + int z = 0; + int[] values = new int[vipCount]; + for (int i = 0; i < size; i++) { + LayoutEdge e = n.preds.get(i); + if (e.vip) { + values[z++] = e.from.x + e.relativeFrom - e.relativeTo; + } + } + return median(values); + } } private int calculateOptimalBoth(LayoutNode n) { @@ -1698,6 +1714,13 @@ @Override public int compare(Link l1, Link l2) { + if (l1.isVIP() && !l2.isVIP()) { + return -1; + } + + if (!l1.isVIP() && l2.isVIP()) { + return 1; + } int result = l1.getFrom().getVertex().compareTo(l2.getFrom().getVertex()); if (result != 0) { @@ -1746,9 +1769,9 @@ edge.relativeFrom = l.getFrom().getRelativePosition().x; edge.relativeTo = l.getTo().getRelativePosition().x; edge.link = l; + edge.vip = l.isVIP(); edge.from.succs.add(edge); edge.to.preds.add(edge); - edge.vip = l.isVIP(); //assert edge.from != edge.to; // No self-loops allowed }