# HG changeset patch # User Lukas Stadler # Date 1360575880 -3600 # Node ID f20c2b1f528989518a2f8e4b0030e837426fb68a # Parent cff55cdeea48196c3bdc03ece9e6e8c2612d7053 fix for Object.clone virtualization diff -r cff55cdeea48 -r f20c2b1f5289 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectCloneNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectCloneNode.java Fri Feb 08 11:14:15 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectCloneNode.java Mon Feb 11 10:44:40 2013 +0100 @@ -107,7 +107,7 @@ for (int i = 0; i < newEntryState.length; i++) { newEntryState[i] = originalState.getEntry(i); } - VirtualObjectNode newVirtual = (VirtualObjectNode) originalVirtual.copyWithInputs(); + VirtualObjectNode newVirtual = originalVirtual.duplicate(); tool.createVirtualObject(newVirtual, newEntryState, 0); tool.replaceWithVirtual(newVirtual); } diff -r cff55cdeea48 -r f20c2b1f5289 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java Fri Feb 08 11:14:15 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java Mon Feb 11 10:44:40 2013 +0100 @@ -70,4 +70,9 @@ public Kind entryKind(int index) { return kind; } + + @Override + public BoxedVirtualObjectNode duplicate() { + return new BoxedVirtualObjectNode(type, kind, unboxedValue); + } } diff -r cff55cdeea48 -r f20c2b1f5289 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Fri Feb 08 11:14:15 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Mon Feb 11 10:44:40 2013 +0100 @@ -132,4 +132,9 @@ assert index >= 0 && index < length; return componentType.getKind(); } + + @Override + public VirtualArrayNode duplicate() { + return new VirtualArrayNode(componentType, length); + } } diff -r cff55cdeea48 -r f20c2b1f5289 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java Fri Feb 08 11:14:15 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java Mon Feb 11 10:44:40 2013 +0100 @@ -32,16 +32,23 @@ private final ResolvedJavaType type; private final ResolvedJavaField[] fields; - private final HashMap fieldMap = new HashMap<>(); + private final HashMap fieldMap; public VirtualInstanceNode(ResolvedJavaType type, ResolvedJavaField[] fields) { this.type = type; this.fields = fields; + fieldMap = new HashMap<>(); for (int i = 0; i < fields.length; i++) { fieldMap.put(fields[i], i); } } + private VirtualInstanceNode(ResolvedJavaType type, ResolvedJavaField[] fields, HashMap fieldMap) { + this.type = type; + this.fields = fields; + this.fieldMap = fieldMap; + } + @Override public ResolvedJavaType type() { return type; @@ -85,4 +92,9 @@ assert index >= 0 && index < fields.length; return fields[index].getKind(); } + + @Override + public VirtualInstanceNode duplicate() { + return new VirtualInstanceNode(type, fields, fieldMap); + } } diff -r cff55cdeea48 -r f20c2b1f5289 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Fri Feb 08 11:14:15 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Mon Feb 11 10:44:40 2013 +0100 @@ -53,4 +53,6 @@ public abstract int entryIndexForOffset(long constantOffset); public abstract Kind entryKind(int index); + + public abstract VirtualObjectNode duplicate(); }