Mercurial > hg > graal-compiler
changeset 7765:f20c2b1f5289
fix for Object.clone virtualization
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Mon, 11 Feb 2013 10:44:40 +0100 |
parents | cff55cdeea48 |
children | e393b8156c42 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/ObjectCloneNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/BoxedVirtualObjectNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java |
diffstat | 5 files changed, 26 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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); + } }
--- 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); + } }
--- 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<ResolvedJavaField, Integer> fieldMap = new HashMap<>(); + private final HashMap<ResolvedJavaField, Integer> 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<ResolvedJavaField, Integer> 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); + } }
--- 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(); }