Mercurial > hg > graal-compiler
changeset 5646:aa52cbbab598
small changes/renamings to virtual object handling
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Mon, 18 Jun 2012 18:00:06 +0200 |
parents | f53a347eae93 |
children | 419df70cc6a2 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectState.java |
diffstat | 3 files changed, 35 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Mon Jun 18 17:58:36 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/VirtualState.java Mon Jun 18 18:00:06 2012 +0200 @@ -30,4 +30,12 @@ */ public abstract class VirtualState extends Node { + public interface NodeClosure<T extends Node> { + void apply(T node); + } + + public abstract VirtualState duplicateWithVirtualState(); + + public abstract void applyToNonVirtual(NodeClosure<? super ValueNode> closure); + }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Mon Jun 18 17:58:36 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Mon Jun 18 18:00:06 2012 +0200 @@ -102,7 +102,7 @@ EscapeField[] fields = new EscapeField[length]; for (int i = 0; i < length; i++) { Integer representation = i; - fields[i] = new EscapeField("[" + i + "]", representation, ((NewArrayNode) node).elementType()); + fields[i] = new EscapeField(Integer.toString(i), representation, ((NewArrayNode) node).elementType()); } return fields; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectState.java Mon Jun 18 17:58:36 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectState.java Mon Jun 18 18:00:06 2012 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.graal.nodes.virtual; +import java.util.*; + import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -32,24 +34,42 @@ public final class VirtualObjectState extends VirtualState implements Node.IterableNodeType, LIRLowerable { @Input private VirtualObjectNode object; - @Input private NodeInputList<ValueNode> fields; + @Input private NodeInputList<ValueNode> fieldValues; public VirtualObjectNode object() { return object; } - public NodeInputList<ValueNode> fields() { - return fields; + public NodeInputList<ValueNode> fieldValues() { + return fieldValues; } - public VirtualObjectState(VirtualObjectNode object, ValueNode[] fields) { + public VirtualObjectState(VirtualObjectNode object, ValueNode[] fieldValues) { + assert object.fieldsCount() == fieldValues.length; this.object = object; - assert object.fields().length == fields.length; - this.fields = new NodeInputList<>(this, fields); + this.fieldValues = new NodeInputList<>(this, fieldValues); + } + + private VirtualObjectState(VirtualObjectNode object, List<ValueNode> fieldValues) { + assert object.fieldsCount() == fieldValues.size(); + this.object = object; + this.fieldValues = new NodeInputList<>(this, fieldValues); } @Override public void generate(LIRGeneratorTool generator) { // Nothing to do, virtual object states are processed as part of the handling of StateSplit nodes. } + + @Override + public VirtualObjectState duplicateWithVirtualState() { + return graph().add(new VirtualObjectState(object, fieldValues)); + } + + @Override + public void applyToNonVirtual(NodeClosure< ? super ValueNode> closure) { + for (ValueNode value : fieldValues) { + closure.apply(value); + } + } }