# HG changeset patch # User Gilles Duboscq # Date 1386768238 -3600 # Node ID 01fd11e44f731f9b1ac27e201e60c6780bc7d3ef # Parent 492c9907b9bfaf2ba851e3108b06c35ee289010f Access is not necessarily a DeoptimizingNode. In particular, FloatingAccessNodes are not DeoptimizingNode. diff -r 492c9907b9bf -r 01fd11e44f73 graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Wed Dec 11 14:02:23 2013 +0100 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Wed Dec 11 14:23:58 2013 +0100 @@ -62,6 +62,7 @@ import com.oracle.graal.lir.ptx.PTXMove.MoveToRegOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.phases.util.*; @@ -269,18 +270,26 @@ } @Override - public Variable emitLoad(Kind kind, Value address, DeoptimizingNode deopting) { + public Variable emitLoad(Kind kind, Value address, Access access) { PTXAddressValue loadAddress = asAddress(address); Variable result = newVariable(kind); - append(new LoadOp(kind, result, loadAddress, deopting != null ? state(deopting) : null)); + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } + append(new LoadOp(kind, result, loadAddress, state)); return result; } @Override - public void emitStore(Kind kind, Value address, Value inputVal, DeoptimizingNode deopting) { + public void emitStore(Kind kind, Value address, Value inputVal, Access access) { PTXAddressValue storeAddress = asAddress(address); Variable input = load(inputVal); - append(new StoreOp(kind, storeAddress, input, deopting != null ? state(deopting) : null)); + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } + append(new StoreOp(kind, storeAddress, input, state)); } @Override diff -r 492c9907b9bf -r 01fd11e44f73 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Wed Dec 11 14:02:23 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Wed Dec 11 14:23:58 2013 +0100 @@ -59,6 +59,7 @@ import com.oracle.graal.lir.amd64.AMD64Move.StoreOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; @@ -446,15 +447,18 @@ /** * Returns whether or not the input access is a (de)compression candidate. */ - private static boolean isCompressCandidate(DeoptimizingNode access) { - return access != null && ((HeapAccess) access).isCompressible(); + private static boolean isCompressCandidate(Access access) { + return access != null && access.isCompressible(); } @Override - public Variable emitLoad(Kind kind, Value address, DeoptimizingNode access) { + public Variable emitLoad(Kind kind, Value address, Access access) { AMD64AddressValue loadAddress = asAddressValue(address); Variable result = newVariable(kind); - assert access == null || access instanceof HeapAccess; + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } /** * Currently, the (de)compression of pointers applies conditionally to some objects (oops, * kind==Object) and some addresses (klass pointers, kind==Long). Initially, the input @@ -467,24 +471,27 @@ */ if (isCompressCandidate(access)) { if (config.useCompressedOops && kind == Kind.Object) { - append(new LoadCompressedPointer(kind, result, getProviders().getRegisters().getHeapBaseRegister().asValue(), loadAddress, access != null ? state(access) : null, getNarrowKlassBase(), - getNarrowOopBase(), getNarrowOopShift(), getLogMinObjectAlignment())); + append(new LoadCompressedPointer(kind, result, getProviders().getRegisters().getHeapBaseRegister().asValue(), loadAddress, state, getNarrowKlassBase(), getNarrowOopBase(), + getNarrowOopShift(), getLogMinObjectAlignment())); } else if (config.useCompressedClassPointers && kind == Kind.Long) { - append(new LoadCompressedPointer(kind, result, getProviders().getRegisters().getHeapBaseRegister().asValue(), loadAddress, access != null ? state(access) : null, getNarrowKlassBase(), - getNarrowOopBase(), getNarrowKlassShift(), getLogKlassAlignment())); + append(new LoadCompressedPointer(kind, result, getProviders().getRegisters().getHeapBaseRegister().asValue(), loadAddress, state, getNarrowKlassBase(), getNarrowOopBase(), + getNarrowKlassShift(), getLogKlassAlignment())); } else { - append(new LoadOp(kind, result, loadAddress, access != null ? state(access) : null)); + append(new LoadOp(kind, result, loadAddress, state)); } } else { - append(new LoadOp(kind, result, loadAddress, access != null ? state(access) : null)); + append(new LoadOp(kind, result, loadAddress, state)); } return result; } @Override - public void emitStore(Kind kind, Value address, Value inputVal, DeoptimizingNode access) { + public void emitStore(Kind kind, Value address, Value inputVal, Access access) { AMD64AddressValue storeAddress = asAddressValue(address); - LIRFrameState state = access != null ? state(access) : null; + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } if (isConstant(inputVal)) { Constant c = asConstant(inputVal); if (canStoreConstant(c)) { diff -r 492c9907b9bf -r 01fd11e44f73 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Wed Dec 11 14:02:23 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Wed Dec 11 14:23:58 2013 +0100 @@ -35,6 +35,7 @@ import com.oracle.graal.lir.hsail.HSAILMove.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.phases.util.*; @@ -74,8 +75,8 @@ return config.narrowKlassBase; } - private static boolean isCompressCandidate(DeoptimizingNode access) { - return access != null && ((HeapAccess) access).isCompressible(); + private static boolean isCompressCandidate(Access access) { + return access != null && access.isCompressible(); } /** @@ -114,11 +115,13 @@ } @Override - public Variable emitLoad(Kind kind, Value address, DeoptimizingNode access) { + public Variable emitLoad(Kind kind, Value address, Access access) { HSAILAddressValue loadAddress = asAddressValue(address); Variable result = newVariable(kind); - LIRFrameState state = access != null ? state(access) : null; - assert access == null || access instanceof HeapAccess; + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } if (isCompressCandidate(access) && config.useCompressedOops && kind == Kind.Object) { Variable scratch = newVariable(Kind.Long); append(new LoadCompressedPointer(kind, result, scratch, loadAddress, state, getNarrowOopBase(), getNarrowOopShift(), getLogMinObjectAlignment())); @@ -132,9 +135,12 @@ } @Override - public void emitStore(Kind kind, Value address, Value inputVal, DeoptimizingNode access) { + public void emitStore(Kind kind, Value address, Value inputVal, Access access) { HSAILAddressValue storeAddress = asAddressValue(address); - LIRFrameState state = access != null ? state(access) : null; + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } Variable input = load(inputVal); if (isCompressCandidate(access) && config.useCompressedOops && kind == Kind.Object) { Variable scratch = newVariable(Kind.Long); diff -r 492c9907b9bf -r 01fd11e44f73 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Wed Dec 11 14:02:23 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Wed Dec 11 14:23:58 2013 +0100 @@ -45,6 +45,7 @@ import com.oracle.graal.lir.sparc.SPARCMove.StoreConstantOp; import com.oracle.graal.lir.sparc.SPARCMove.StoreOp; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; public class SPARCHotSpotLIRGenerator extends SPARCLIRGenerator implements HotSpotLIRGenerator { @@ -231,15 +232,18 @@ append(op); } - private static boolean isCompressCandidate(DeoptimizingNode access) { - return access != null && ((HeapAccess) access).isCompressible(); + private static boolean isCompressCandidate(Access access) { + return access != null && access.isCompressible(); } @Override - public Variable emitLoad(Kind kind, Value address, DeoptimizingNode access) { + public Variable emitLoad(Kind kind, Value address, Access access) { SPARCAddressValue loadAddress = asAddressValue(address); Variable result = newVariable(kind); - assert access == null || access instanceof HeapAccess; + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } if (isCompressCandidate(access)) { if (config.useCompressedOops && kind == Kind.Object) { // append(new LoadCompressedPointer(kind, result, loadAddress, access != null ? @@ -254,18 +258,21 @@ // config.logKlassAlignment)); throw GraalInternalError.unimplemented(); } else { - append(new LoadOp(kind, result, loadAddress, access != null ? state(access) : null)); + append(new LoadOp(kind, result, loadAddress, state)); } } else { - append(new LoadOp(kind, result, loadAddress, access != null ? state(access) : null)); + append(new LoadOp(kind, result, loadAddress, state)); } return result; } @Override - public void emitStore(Kind kind, Value address, Value inputVal, DeoptimizingNode access) { + public void emitStore(Kind kind, Value address, Value inputVal, Access access) { SPARCAddressValue storeAddress = asAddressValue(address); - LIRFrameState state = access != null ? state(access) : null; + LIRFrameState state = null; + if (access instanceof DeoptimizingNode) { + state = state((DeoptimizingNode) access); + } if (isConstant(inputVal)) { Constant c = asConstant(inputVal); if (canStoreConstant(c)) { diff -r 492c9907b9bf -r 01fd11e44f73 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/Access.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/Access.java Wed Dec 11 14:02:23 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/Access.java Wed Dec 11 14:23:58 2013 +0100 @@ -24,7 +24,7 @@ import com.oracle.graal.nodes.*; -public interface Access extends DeoptimizingNode, GuardedNode, HeapAccess { +public interface Access extends GuardedNode, HeapAccess { ValueNode object(); diff -r 492c9907b9bf -r 01fd11e44f73 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingAccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingAccessNode.java Wed Dec 11 14:02:23 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingAccessNode.java Wed Dec 11 14:23:58 2013 +0100 @@ -30,7 +30,6 @@ @Input private ValueNode object; @Input private LocationNode location; - @Input private FrameState deoptState; private BarrierType barrierType; private boolean compressible; @@ -65,30 +64,10 @@ } @Override - public boolean canDeoptimize() { - return false; - } - - @Override - public FrameState getDeoptimizationState() { - return deoptState; - } - - @Override - public void setDeoptimizationState(FrameState f) { - updateUsages(deoptState, f); - deoptState = f; - } - - @Override public BarrierType getBarrierType() { return barrierType; } - public FrameState getState() { - return deoptState; - } - @Override public boolean isCompressible() { return compressible; diff -r 492c9907b9bf -r 01fd11e44f73 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Wed Dec 11 14:02:23 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Wed Dec 11 14:23:58 2013 +0100 @@ -61,9 +61,9 @@ Value emitAddress(StackSlot slot); - Value emitLoad(Kind kind, Value address, DeoptimizingNode deopting); + Value emitLoad(Kind kind, Value address, Access access); - void emitStore(Kind kind, Value address, Value input, DeoptimizingNode deopting); + void emitStore(Kind kind, Value address, Value input, Access access); void emitMembar(int barriers);