# HG changeset patch # User Tom Rodriguez # Date 1435600171 25200 # Node ID 84d5125aa31a6185b031b26ccf28fd3a3f007e36 # Parent 9143e6b3c475ccc904db95067cbabb9bccffb41c# Parent 62dc08c8b68726436cc8789e0f41e6d32c214dff Merge diff -r 62dc08c8b687 -r 84d5125aa31a 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 Mon Jun 29 18:38:47 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Mon Jun 29 10:49:31 2015 -0700 @@ -523,6 +523,11 @@ @Override public boolean verify() { + if (virtualObjectMappingCount() > 0) { + for (EscapeObjectState state : virtualObjectMappings()) { + assertTrue(state != null, "must be non-null"); + } + } assertTrue(locksSize() == monitorIdCount(), "mismatch in number of locks"); for (ValueNode value : values) { assertTrue(value == null || !value.isDeleted(), "frame state must not contain deleted nodes"); diff -r 62dc08c8b687 -r 84d5125aa31a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Mon Jun 29 18:38:47 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Mon Jun 29 10:49:31 2015 -0700 @@ -152,8 +152,18 @@ public static void killWithUnusedFloatingInputs(Node node) { node.safeDelete(); node.acceptInputs((n, in) -> { - if (in.isAlive() && in.hasNoUsages() && !(in instanceof FixedNode)) { - killWithUnusedFloatingInputs(in); + if (in.isAlive() && !(in instanceof FixedNode)) { + if (in.hasNoUsages()) { + killWithUnusedFloatingInputs(in); + } else if (in instanceof PhiNode) { + for (Node use : in.usages()) { + if (use != in) { + return; + } + } + in.replaceAtUsages(null); + killWithUnusedFloatingInputs(in); + } } }); } diff -r 62dc08c8b687 -r 84d5125aa31a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java Mon Jun 29 18:38:47 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java Mon Jun 29 10:49:31 2015 -0700 @@ -102,6 +102,11 @@ int valuePos = 0; for (int objIndex = 0; objIndex < virtualObjects.size(); objIndex++) { VirtualObjectNode virtual = virtualObjects.get(objIndex); + if (virtual == null) { + // Could occur in invalid graphs + properties.put("object(" + objIndex + ")", "null"); + continue; + } StringBuilder s = new StringBuilder(); s.append(virtual.type().toJavaName(false)).append("["); for (int i = 0; i < virtual.entryCount(); i++) { diff -r 62dc08c8b687 -r 84d5125aa31a graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Mon Jun 29 18:38:47 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Mon Jun 29 10:49:31 2015 -0700 @@ -350,7 +350,12 @@ } } sb.append(")"); - formatter.format(applyFormattingFlagsAndWidth(sb.toString(), flags & ~ALTERNATE, width)); + String string = sb.toString(); + if (string.indexOf('%') != -1) { + // Quote any % signs + string = string.replace("%", "%%"); + } + formatter.format(applyFormattingFlagsAndWidth(string, flags & ~ALTERNATE, width)); } } }