# HG changeset patch # User Thomas Wuerthinger # Date 1308589780 -7200 # Node ID 35d4ea420ea70cbf751294005fabe7c6500f6b69 # Parent 077f999e358383660885a3feb2fb9dcf01eb5d45 Disable StoreField lowering for now. diff -r 077f999e3583 -r 35d4ea420ea7 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java --- 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()); diff -r 077f999e3583 -r 35d4ea420ea7 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MemoryWrite.java --- 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); } } diff -r 077f999e3583 -r 35d4ea420ea7 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/StoreField.java --- 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 lookup(java.lang.Class 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); } } diff -r 077f999e3583 -r 35d4ea420ea7 graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java --- 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; }