Mercurial > hg > truffle
changeset 3035:35d4ea420ea7
Disable StoreField lowering for now.
author | Thomas Wuerthinger <thomas@wuerthinger.net> |
---|---|
date | Mon, 20 Jun 2011 19:09:40 +0200 |
parents | 077f999e3583 |
children | 82898994df70 |
files | graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MemoryWrite.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/StoreField.java graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java |
diffstat | 4 files changed, 44 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Mon Jun 20 18:00:26 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java Mon Jun 20 19:09:40 2011 +0200 @@ -1443,6 +1443,12 @@ @Override + public void visitMemoryWrite(MemoryWrite memWrite) { + lir.move(load(memWrite.location()), new CiAddress(memWrite.valueKind(), load(memWrite.location()), memWrite.displacement()), memWrite.valueKind()); + } + + + @Override public void visitLoopEnd(LoopEnd x) { setNoResult(x); moveToPhi(x.loopBegin(), x.loopBegin().endCount());
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MemoryWrite.java Mon Jun 20 18:00:26 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MemoryWrite.java Mon Jun 20 19:09:40 2011 +0200 @@ -28,12 +28,21 @@ public final class MemoryWrite extends MemoryAccess { - private static final int INPUT_COUNT = 0; + private static final int INPUT_COUNT = 1; + private static final int INPUT_VALUE = 0; private static final int SUCCESSOR_COUNT = 0; + public Value value() { + return (Value) inputs().get(super.inputCount() + INPUT_VALUE); + } - public MemoryWrite(CiKind kind, int displacement, Graph graph) { + public void setValue(Value v) { + inputs().set(super.inputCount() + INPUT_VALUE, v); + } + + public MemoryWrite(CiKind kind, Value value, int displacement, Graph graph) { super(kind, displacement, INPUT_COUNT, SUCCESSOR_COUNT, graph); + setValue(value); } @Override @@ -43,11 +52,11 @@ @Override public void print(LogStream out) { - out.print("mem read from ").print(location()); + out.print("mem write to ").print(location()).print(" with value").print(value()); } @Override public Node copy(Graph into) { - return new MemoryWrite(super.kind, displacement(), into); + return new MemoryWrite(super.kind, null, displacement(), into); } }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/StoreField.java Mon Jun 20 18:00:26 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/StoreField.java Mon Jun 20 19:09:40 2011 +0200 @@ -23,6 +23,8 @@ package com.oracle.max.graal.compiler.ir; import com.oracle.max.graal.compiler.debug.*; +import com.oracle.max.graal.compiler.phases.*; +import com.oracle.max.graal.compiler.phases.LoweringPhase.LoweringOp; import com.oracle.max.graal.graph.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -76,6 +78,15 @@ v.visitStoreField(this); } + @SuppressWarnings("unchecked") + @Override + public <T extends Op> T lookup(java.lang.Class<T> clazz) { + if (clazz == LoweringOp.class) { + return (T) LoweringPhase.DELEGATE_TO_RUNTIME; + } + return null; + }; + @Override public void print(LogStream out) { out.print(object()). @@ -89,7 +100,6 @@ @Override public Node copy(Graph into) { - StoreField x = new StoreField(null, field, null, into); - return x; + return new StoreField(null, field, null, into); } }
--- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java Mon Jun 20 18:00:26 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java Mon Jun 20 19:09:40 2011 +0200 @@ -255,6 +255,19 @@ memoryRead.setNext(field.next()); memoryRead.setLocation(field.object()); return memoryRead; + } else if (n instanceof StoreField) { + return null; +// StoreField field = (StoreField) n; +// if (field.isVolatile()) { +// return null; +// } +// Graph graph = field.graph(); +// int displacement = ((HotSpotField) field.field()).offset(); +// MemoryWrite memoryWrite = new MemoryWrite(field.field().kind(), field.value(), displacement, graph); +// memoryWrite.setGuard((GuardNode) tool.createGuard(new IsNonNull(field.object(), graph))); +// memoryWrite.setNext(field.next()); +// memoryWrite.setLocation(field.object()); +// return memoryWrite; } return null; }