Mercurial > hg > graal-compiler
changeset 8653:193403beca24
PiPushable: implementation for ReadNode
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Thu, 04 Apr 2013 15:04:59 +0200 |
parents | bdfd05a48d8e |
children | 3bbad4ec6510 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java |
diffstat | 1 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Fri Apr 05 16:43:13 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Thu Apr 04 15:04:59 2013 +0200 @@ -33,7 +33,7 @@ /** * Reads an {@linkplain AccessNode accessed} value. */ -public final class ReadNode extends FloatableAccessNode implements Node.IterableNodeType, LIRLowerable, Canonicalizable { +public final class ReadNode extends FloatableAccessNode implements Node.IterableNodeType, LIRLowerable, Canonicalizable, PiPushable { public ReadNode(ValueNode object, ValueNode location, Stamp stamp) { super(object, location, stamp); @@ -98,6 +98,19 @@ return read; } + @Override + public void push(PiNode parent) { + Object locId = location().locationIdentity(); + if (locId instanceof ResolvedJavaField) { + ResolvedJavaType fieldType = ((ResolvedJavaField) locId).getDeclaringClass(); + ResolvedJavaType beforePiType = parent.object().objectStamp().type(); + + if (fieldType.isAssignableFrom(beforePiType)) { + replaceFirstInput(parent, parent.object()); + } + } + } + /** * Reads a value from memory. *