# HG changeset patch # User Josef Eisl # Date 1398184860 -7200 # Node ID 468b2428c4033e59ccc8947339d074bee435a27b # Parent e4ca8e6f6663f1df8183e6ad18737b2e1081fb46 Change DeoptimizingNode and Access to LIRFrameState in *LIRGenerator*. diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -38,7 +38,6 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.amd64.*; @@ -71,7 +70,6 @@ import com.oracle.graal.lir.amd64.AMD64Move.StackLeaOp; import com.oracle.graal.lir.amd64.AMD64Move.ZeroExtendLoadOp; import com.oracle.graal.lir.gen.*; -import com.oracle.graal.nodes.*; import com.oracle.graal.phases.util.*; /** @@ -590,8 +588,7 @@ append(new DivRemOp(op, rax, asAllocatable(b), state)); } - public Value[] emitIntegerDivRem(Value a, Value b, DeoptimizingNode deopting) { - LIRFrameState state = state(deopting); + public Value[] emitIntegerDivRem(Value a, Value b, LIRFrameState state) { switch (a.getKind().getStackKind()) { case Int: emitDivRem(IDIVREM, a, b, state); @@ -605,13 +602,13 @@ } @Override - public Value emitDiv(Value a, Value b, DeoptimizingNode deopting) { + public Value emitDiv(Value a, Value b, LIRFrameState state) { switch (a.getKind().getStackKind()) { case Int: - emitDivRem(IDIV, a, b, state(deopting)); + emitDivRem(IDIV, a, b, state); return emitMove(RAX_I); case Long: - emitDivRem(LDIV, a, b, state(deopting)); + emitDivRem(LDIV, a, b, state); return emitMove(RAX_L); case Float: { Variable result = newVariable(a.getPlatformKind()); @@ -629,13 +626,13 @@ } @Override - public Value emitRem(Value a, Value b, DeoptimizingNode deopting) { + public Value emitRem(Value a, Value b, LIRFrameState state) { switch (a.getKind().getStackKind()) { case Int: - emitDivRem(IREM, a, b, state(deopting)); + emitDivRem(IREM, a, b, state); return emitMove(RDX_I); case Long: - emitDivRem(LREM, a, b, state(deopting)); + emitDivRem(LREM, a, b, state); return emitMove(RDX_L); case Float: { Variable result = newVariable(a.getPlatformKind()); @@ -653,8 +650,7 @@ } @Override - public Variable emitUDiv(Value a, Value b, DeoptimizingNode deopting) { - LIRFrameState state = state(deopting); + public Variable emitUDiv(Value a, Value b, LIRFrameState state) { switch (a.getKind().getStackKind()) { case Int: emitDivRem(IUDIV, a, b, state); @@ -668,8 +664,7 @@ } @Override - public Variable emitURem(Value a, Value b, DeoptimizingNode deopting) { - LIRFrameState state = state(deopting); + public Variable emitURem(Value a, Value b, LIRFrameState state) { switch (a.getKind().getStackKind()) { case Int: emitDivRem(IUREM, a, b, state); diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Tue Apr 22 18:41:00 2014 +0200 @@ -74,7 +74,7 @@ if (((fixedWithNextNode instanceof IntegerDivNode) || (fixedWithNextNode instanceof IntegerRemNode)) && fixedWithNextNode.getClass() != divRem.getClass()) { FixedBinaryNode otherDivRem = (FixedBinaryNode) fixedWithNextNode; if (otherDivRem.x() == divRem.x() && otherDivRem.y() == divRem.y() && !hasOperand(otherDivRem)) { - Value[] results = ((AMD64LIRGenerator) gen).emitIntegerDivRem(operand(divRem.x()), operand(divRem.y()), (DeoptimizingNode) valueNode); + Value[] results = ((AMD64LIRGenerator) gen).emitIntegerDivRem(operand(divRem.x()), operand(divRem.y()), state((DeoptimizingNode) valueNode)); if (divRem instanceof IntegerDivNode) { setResult(divRem, results[0]); setResult(otherDivRem, results[1]); diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java --- a/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -51,7 +51,6 @@ import com.oracle.graal.lir.hsail.HSAILMove.MembarOp; import com.oracle.graal.lir.hsail.HSAILMove.MoveFromRegOp; import com.oracle.graal.lir.hsail.HSAILMove.MoveToRegOp; -import com.oracle.graal.nodes.*; import com.oracle.graal.phases.util.*; /** @@ -415,7 +414,7 @@ } @Override - public Value emitDiv(Value a, Value b, DeoptimizingNode deopting) { + public Value emitDiv(Value a, Value b, LIRFrameState state) { Variable result = newVariable(a.getKind()); switch (a.getKind()) { case Int: @@ -438,7 +437,7 @@ } @Override - public Value emitRem(Value a, Value b, DeoptimizingNode deopting) { + public Value emitRem(Value a, Value b, LIRFrameState state) { Variable result = newVariable(a.getKind()); switch (a.getKind()) { case Int: @@ -460,12 +459,12 @@ } @Override - public Variable emitUDiv(Value a, Value b, DeoptimizingNode deopting) { + public Variable emitUDiv(Value a, Value b, LIRFrameState state) { throw GraalInternalError.unimplemented(); } @Override - public Variable emitURem(Value a, Value b, DeoptimizingNode deopting) { + public Variable emitURem(Value a, Value b, LIRFrameState state) { throw GraalInternalError.unimplemented(); } @@ -683,7 +682,7 @@ } @Override - public void emitDeoptimize(Value actionAndReason, Value speculation, DeoptimizingNode deopting) { + public void emitDeoptimize(Value actionAndReason, Value speculation, LIRFrameState state) { append(new ReturnOp(Value.ILLEGAL)); } diff -r e4ca8e6f6663 -r 468b2428c403 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 Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -35,7 +35,6 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.gen.*; @@ -60,8 +59,6 @@ import com.oracle.graal.lir.ptx.PTXMemOp.StoreReturnValOp; import com.oracle.graal.lir.ptx.PTXMove.MoveFromRegOp; import com.oracle.graal.lir.ptx.PTXMove.MoveToRegOp; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; import com.oracle.graal.phases.util.*; /** @@ -232,25 +229,17 @@ } @Override - public Variable emitLoad(PlatformKind kind, Value address, Access access) { + public Variable emitLoad(PlatformKind kind, Value address, LIRFrameState state) { PTXAddressValue loadAddress = asAddress(address); Variable result = newVariable(kind); - LIRFrameState state = null; - if (access instanceof DeoptimizingNode) { - state = state((DeoptimizingNode) access); - } append(new LoadOp((Kind) kind, result, loadAddress, state)); return result; } @Override - public void emitStore(PlatformKind kind, Value address, Value inputVal, Access access) { + public void emitStore(PlatformKind kind, Value address, Value inputVal, LIRFrameState state) { PTXAddressValue storeAddress = asAddress(address); Variable input = load(inputVal); - LIRFrameState state = null; - if (access instanceof DeoptimizingNode) { - state = state((DeoptimizingNode) access); - } append(new StoreOp((Kind) kind, storeAddress, input, state)); } @@ -496,7 +485,7 @@ } @Override - public Value emitDiv(Value a, Value b, DeoptimizingNode deopting) { + public Value emitDiv(Value a, Value b, LIRFrameState state) { Variable result = newVariable(a.getKind()); switch (a.getKind()) { case Int: @@ -518,7 +507,7 @@ } @Override - public Value emitRem(Value a, Value b, DeoptimizingNode deopting) { + public Value emitRem(Value a, Value b, LIRFrameState state) { Variable result = newVariable(a.getKind()); switch (a.getKind()) { case Int: @@ -534,12 +523,12 @@ } @Override - public Variable emitUDiv(Value a, Value b, DeoptimizingNode deopting) { + public Variable emitUDiv(Value a, Value b, LIRFrameState state) { throw GraalInternalError.unimplemented("PTXLIRGenerator.emitUDiv()"); } @Override - public Variable emitURem(Value a, Value b, DeoptimizingNode deopting) { + public Variable emitURem(Value a, Value b, LIRFrameState state) { throw GraalInternalError.unimplemented("PTXLIRGenerator.emitURem()"); } @@ -751,7 +740,7 @@ } @Override - public void emitDeoptimize(Value actionAndReason, Value speculation, DeoptimizingNode deopting) { + public void emitDeoptimize(Value actionAndReason, Value speculation, LIRFrameState state) { append(new ReturnOp(Value.ILLEGAL)); } @@ -860,16 +849,16 @@ throw GraalInternalError.unimplemented("PTXLIRGenerator.emitUnwind()"); } - public Variable emitLoadParam(Kind kind, Value address, DeoptimizingNode deopting) { + public Variable emitLoadParam(Kind kind, Value address, LIRFrameState state) { PTXAddressValue loadAddress = asAddress(address); Variable result = newVariable(kind); - append(new LoadParamOp(kind, result, loadAddress, deopting != null ? state(deopting) : null)); + append(new LoadParamOp(kind, result, loadAddress, state)); return result; } - public Variable emitLoadReturnAddress(Kind kind, Value address, DeoptimizingNode deopting) { + public Variable emitLoadReturnAddress(Kind kind, Value address, LIRFrameState state) { PTXAddressValue loadAddress = asAddress(address); Variable result; switch (kind) { @@ -882,15 +871,15 @@ default: result = newVariable(kind); } - append(new LoadReturnAddrOp(kind, result, loadAddress, deopting != null ? state(deopting) : null)); + append(new LoadReturnAddrOp(kind, result, loadAddress, state)); return result; } - public void emitStoreReturnValue(Kind kind, Value address, Value inputVal, DeoptimizingNode deopting) { + public void emitStoreReturnValue(Kind kind, Value address, Value inputVal, LIRFrameState state) { PTXAddressValue storeAddress = asAddress(address); Variable input = load(inputVal); - append(new StoreReturnValOp(kind, storeAddress, input, deopting != null ? state(deopting) : null)); + append(new StoreReturnValOp(kind, storeAddress, input, state)); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -36,7 +36,6 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.gen.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.gen.*; @@ -60,7 +59,6 @@ import com.oracle.graal.lir.sparc.SPARCMove.MoveFromRegOp; import com.oracle.graal.lir.sparc.SPARCMove.MoveToRegOp; import com.oracle.graal.lir.sparc.SPARCMove.StackLoadAddressOp; -import com.oracle.graal.nodes.*; import com.oracle.graal.phases.util.*; /** @@ -593,7 +591,7 @@ } @Override - public Value emitDiv(Value a, Value b, DeoptimizingNode deopting) { + public Value emitDiv(Value a, Value b, LIRFrameState state) { Variable result = newVariable(a.getKind()); switch (a.getKind().getStackKind()) { case Int: @@ -615,8 +613,7 @@ } @Override - public Value emitRem(Value a, Value b, DeoptimizingNode deopting) { - LIRFrameState state = state(deopting); + public Value emitRem(Value a, Value b, LIRFrameState state) { Variable result = newVariable(a.getKind()); switch (a.getKind().getStackKind()) { case Int: @@ -632,7 +629,7 @@ } @Override - public Value emitUDiv(Value a, Value b, DeoptimizingNode deopting) { + public Value emitUDiv(Value a, Value b, LIRFrameState state) { // LIRFrameState state = state(deopting); switch (a.getKind().getStackKind()) { case Int: @@ -647,7 +644,7 @@ } @Override - public Value emitURem(Value a, Value b, DeoptimizingNode deopting) { + public Value emitURem(Value a, Value b, LIRFrameState state) { // LIRFrameState state = state(deopting); switch (a.getKind().getStackKind()) { case Int: @@ -917,7 +914,7 @@ } @Override - public void emitDeoptimize(Value actionAndReason, Value speculation, DeoptimizingNode deopting) { + public void emitDeoptimize(Value actionAndReason, Value speculation, LIRFrameState state) { append(new ReturnOp(Value.ILLEGAL)); } diff -r e4ca8e6f6663 -r 468b2428c403 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 Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -44,7 +44,8 @@ import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.stubs.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.*; +import com.oracle.graal.lir.StandardOp.NoOp; +import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.amd64.*; import com.oracle.graal.lir.amd64.AMD64ControlFlow.CondMoveOp; import com.oracle.graal.lir.amd64.AMD64Move.CompareAndSwapOp; @@ -55,7 +56,6 @@ import com.oracle.graal.lir.amd64.AMD64Move.StoreConstantOp; import com.oracle.graal.lir.amd64.AMD64Move.StoreOp; import com.oracle.graal.lir.gen.*; -import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; /** @@ -256,7 +256,7 @@ } @Override - public Variable emitForeignCall(ForeignCallLinkage linkage, DeoptimizingNode info, Value... args) { + public Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args) { HotSpotForeignCallLinkage hotspotLinkage = (HotSpotForeignCallLinkage) linkage; boolean destroysRegisters = hotspotLinkage.destroysRegisters(); @@ -271,9 +271,10 @@ } Variable result; - DeoptimizingNode deoptInfo = null; + // TODO (je) check if we can remove this + LIRFrameState deoptInfo = null; if (hotspotLinkage.canDeoptimize()) { - deoptInfo = info; + deoptInfo = state; assert deoptInfo != null || getStub() != null; assert hotspotLinkage.needsJavaFrameAnchor(); } @@ -382,9 +383,9 @@ } @Override - public void emitDeoptimize(Value actionAndReason, Value speculation, DeoptimizingNode deopting) { + public void emitDeoptimize(Value actionAndReason, Value speculation, LIRFrameState state) { moveDeoptValuesToThread(actionAndReason, speculation); - append(new AMD64DeoptimizeOp(state(deopting))); + append(new AMD64DeoptimizeOp(state)); } @Override @@ -455,13 +456,9 @@ } @Override - public Variable emitLoad(PlatformKind kind, Value address, Access access) { + public Variable emitLoad(PlatformKind kind, Value address, LIRFrameState state) { AMD64AddressValue loadAddress = asAddressValue(address); Variable result = newVariable(toStackKind(kind)); - 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 @@ -469,14 +466,14 @@ * candidate. Consequently, depending on the appropriate kind, the specific (de)compression * functions are being called. */ - if (isCompressedOperation(kind, access)) { + if (isCompressedOperation(kind, null)) { if (kind == Kind.Object) { append(new LoadCompressedPointer(Kind.Object, result, getProviders().getRegisters().getHeapBaseRegister().asValue(), loadAddress, state, config.getOopEncoding())); } else if (kind == Kind.Long) { Variable scratch = config.getKlassEncoding().base != 0 ? newVariable(Kind.Long) : null; append(new LoadCompressedPointer(Kind.Long, result, scratch, loadAddress, state, config.getKlassEncoding())); } else { - throw GraalInternalError.shouldNotReachHere("can't handle: " + access); + throw GraalInternalError.shouldNotReachHere("can't handle"); } } else { append(new LoadOp(getMemoryKind(kind), result, loadAddress, state)); @@ -485,13 +482,9 @@ } @Override - public void emitStore(PlatformKind kind, Value address, Value inputVal, Access access) { + public void emitStore(PlatformKind kind, Value address, Value inputVal, LIRFrameState state) { AMD64AddressValue storeAddress = asAddressValue(address); - LIRFrameState state = null; - if (access instanceof DeoptimizingNode) { - state = state((DeoptimizingNode) access); - } - boolean isCompressed = isCompressedOperation(kind, access); + boolean isCompressed = isCompressedOperation(kind, null); if (isConstant(inputVal)) { Constant c = asConstant(inputVal); if (canStoreConstant(c, isCompressed)) { @@ -504,7 +497,7 @@ Constant value = compress(c, config.getKlassEncoding()); append(new StoreCompressedConstantOp(Kind.Long, storeAddress, value, state)); } else { - throw GraalInternalError.shouldNotReachHere("can't handle: " + access); + throw GraalInternalError.shouldNotReachHere("can't handle"); } return; } else { diff -r e4ca8e6f6663 -r 468b2428c403 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 Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -24,8 +24,6 @@ package com.oracle.graal.hotspot.hsail; import static com.oracle.graal.api.code.ValueUtil.*; -import static com.oracle.graal.lir.hsail.HSAILControlFlow.*; -import static com.oracle.graal.lir.hsail.HSAILMove.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; @@ -40,7 +38,19 @@ import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.hsail.*; -import com.oracle.graal.nodes.*; +import com.oracle.graal.lir.hsail.HSAILControlFlow.CondMoveOp; +import com.oracle.graal.lir.hsail.HSAILControlFlow.DeoptimizeOp; +import com.oracle.graal.lir.hsail.HSAILControlFlow.ForeignCall1ArgOp; +import com.oracle.graal.lir.hsail.HSAILControlFlow.ForeignCall2ArgOp; +import com.oracle.graal.lir.hsail.HSAILControlFlow.ForeignCallNoArgOp; +import com.oracle.graal.lir.hsail.HSAILMove.CompareAndSwapOp; +import com.oracle.graal.lir.hsail.HSAILMove.LoadCompressedPointer; +import com.oracle.graal.lir.hsail.HSAILMove.LoadOp; +import com.oracle.graal.lir.hsail.HSAILMove.MoveFromRegOp; +import com.oracle.graal.lir.hsail.HSAILMove.MoveToRegOp; +import com.oracle.graal.lir.hsail.HSAILMove.StoreCompressedPointer; +import com.oracle.graal.lir.hsail.HSAILMove.StoreConstantOp; +import com.oracle.graal.lir.hsail.HSAILMove.StoreOp; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.phases.util.*; @@ -110,17 +120,13 @@ } @Override - public Variable emitLoad(PlatformKind kind, Value address, Access access) { + public Variable emitLoad(PlatformKind kind, Value address, LIRFrameState state) { HSAILAddressValue loadAddress = asAddressValue(address); Variable result = newVariable(kind); - LIRFrameState state = null; - if (access instanceof DeoptimizingNode) { - state = state((DeoptimizingNode) access); - } - if (isCompressCandidate(access) && config.useCompressedOops && kind == Kind.Object) { + if (isCompressCandidate(null) && config.useCompressedOops && kind == Kind.Object) { Variable scratch = newVariable(Kind.Long); append(new LoadCompressedPointer(Kind.Object, result, scratch, loadAddress, state, getNarrowOopBase(), getNarrowOopShift(), getLogMinObjectAlignment())); - } else if (isCompressCandidate(access) && config.useCompressedClassPointers && kind == Kind.Long) { + } else if (isCompressCandidate(null) && config.useCompressedClassPointers && kind == Kind.Long) { Variable scratch = newVariable(Kind.Long); append(new LoadCompressedPointer(Kind.Object, result, scratch, loadAddress, state, getNarrowKlassBase(), getNarrowKlassShift(), getLogKlassAlignment())); } else if (kind == NarrowOopStamp.NarrowOop) { @@ -132,13 +138,9 @@ } @Override - public void emitStore(PlatformKind kind, Value address, Value inputVal, Access access) { + public void emitStore(PlatformKind kind, Value address, Value inputVal, LIRFrameState state) { HSAILAddressValue storeAddress = asAddressValue(address); - LIRFrameState state = null; - if (access instanceof DeoptimizingNode) { - state = state((DeoptimizingNode) access); - } - boolean isCompressed = isCompressedOperation(kind, access); + boolean isCompressed = isCompressedOperation(kind, null); if (isConstant(inputVal)) { Constant c = asConstant(inputVal); if (canStoreConstant(c, isCompressed)) { @@ -152,7 +154,7 @@ Constant value = compress(c, config.getKlassEncoding()); append(new StoreConstantOp(Kind.Int, storeAddress, value, state)); } else { - throw GraalInternalError.shouldNotReachHere("can't handle: " + access); + throw GraalInternalError.shouldNotReachHere("can't handle"); } return; } else { @@ -162,10 +164,10 @@ } } Variable input = load(inputVal); - if (isCompressCandidate(access) && config.useCompressedOops && kind == Kind.Object) { + if (isCompressCandidate(null) && config.useCompressedOops && kind == Kind.Object) { Variable scratch = newVariable(Kind.Long); append(new StoreCompressedPointer(Kind.Object, storeAddress, input, scratch, state, getNarrowOopBase(), getNarrowOopShift(), getLogMinObjectAlignment())); - } else if (isCompressCandidate(access) && config.useCompressedClassPointers && kind == Kind.Long) { + } else if (isCompressCandidate(null) && config.useCompressedClassPointers && kind == Kind.Long) { Variable scratch = newVariable(Kind.Long); append(new StoreCompressedPointer(Kind.Object, storeAddress, input, scratch, state, getNarrowKlassBase(), getNarrowKlassShift(), getLogKlassAlignment())); } else if (kind == NarrowOopStamp.NarrowOop) { @@ -201,8 +203,8 @@ } @Override - public void emitDeoptimize(Value actionAndReason, Value failedSpeculation, DeoptimizingNode deopting) { - emitDeoptimizeInner(actionAndReason, state(deopting), "emitDeoptimize"); + public void emitDeoptimize(Value actionAndReason, Value failedSpeculation, LIRFrameState state) { + emitDeoptimizeInner(actionAndReason, state, "emitDeoptimize"); } /*** @@ -220,7 +222,7 @@ * emitting a comment as to what Foreign call they would have made. */ @Override - public Variable emitForeignCall(ForeignCallLinkage linkage, DeoptimizingNode info, Value... args) { + public Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args) { Variable result = newVariable(Kind.Object); // linkage.getDescriptor().getResultType()); // to make the LIRVerifier happy, we move any constants into registers diff -r e4ca8e6f6663 -r 468b2428c403 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 Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -40,7 +40,6 @@ import com.oracle.graal.lir.sparc.SPARCMove.LoadOp; 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.*; public class SPARCHotSpotLIRGenerator extends SPARCLIRGenerator implements HotSpotLIRGenerator { @@ -91,12 +90,13 @@ } @Override - public Variable emitForeignCall(ForeignCallLinkage linkage, DeoptimizingNode info, Value... args) { + public Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args) { HotSpotForeignCallLinkage hotspotLinkage = (HotSpotForeignCallLinkage) linkage; Variable result; - DeoptimizingNode deoptInfo = null; + // TODO (je) check if this can be removed + LIRFrameState deoptInfo = null; if (hotspotLinkage.canDeoptimize()) { - deoptInfo = info; + deoptInfo = state; assert deoptInfo != null || getStub() != null; } @@ -153,9 +153,9 @@ } @Override - public void emitDeoptimize(Value actionAndReason, Value speculation, DeoptimizingNode deopting) { + public void emitDeoptimize(Value actionAndReason, Value speculation, LIRFrameState state) { moveDeoptValuesToThread(actionAndReason, speculation); - append(new SPARCDeoptimizeOp(state(deopting))); + append(new SPARCDeoptimizeOp(state)); } @Override @@ -169,14 +169,10 @@ } @Override - public Variable emitLoad(PlatformKind kind, Value address, Access access) { + public Variable emitLoad(PlatformKind kind, Value address, LIRFrameState state) { SPARCAddressValue loadAddress = asAddressValue(address); Variable result = newVariable(kind); - LIRFrameState state = null; - if (access instanceof DeoptimizingNode) { - state = state((DeoptimizingNode) access); - } - if (isCompressCandidate(access)) { + if (isCompressCandidate(null)) { if (config.useCompressedOops && kind == Kind.Object) { // append(new LoadCompressedPointer(kind, result, loadAddress, access != null ? // state(access) : @@ -199,19 +195,15 @@ } @Override - public void emitStore(PlatformKind kind, Value address, Value inputVal, Access access) { + public void emitStore(PlatformKind kind, Value address, Value inputVal, LIRFrameState state) { SPARCAddressValue storeAddress = asAddressValue(address); - LIRFrameState state = null; - if (access instanceof DeoptimizingNode) { - state = state((DeoptimizingNode) access); - } if (isConstant(inputVal)) { Constant c = asConstant(inputVal); - if (canStoreConstant(c, isCompressCandidate(access))) { + if (canStoreConstant(c, isCompressCandidate(null))) { if (inputVal.getKind() == Kind.Object) { - append(new StoreConstantOp((Kind) kind, storeAddress, c, state, config.useCompressedOops && isCompressCandidate(access))); + append(new StoreConstantOp((Kind) kind, storeAddress, c, state, config.useCompressedOops && isCompressCandidate(null))); } else if (inputVal.getKind() == Kind.Long) { - append(new StoreConstantOp((Kind) kind, storeAddress, c, state, config.useCompressedClassPointers && isCompressCandidate(access))); + append(new StoreConstantOp((Kind) kind, storeAddress, c, state, config.useCompressedClassPointers && isCompressCandidate(null))); } else { append(new StoreConstantOp((Kind) kind, storeAddress, c, state, false)); } @@ -219,7 +211,7 @@ } } Variable input = load(inputVal); - if (isCompressCandidate(access)) { + if (isCompressCandidate(null)) { if (config.useCompressedOops && kind == Kind.Object) { // if (input.getKind() == Kind.Object) { // Variable scratch = newVariable(Kind.Long); diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Tue Apr 22 18:41:00 2014 +0200 @@ -63,7 +63,7 @@ @Override public void generate(NodeLIRBuilder gen) { ForeignCallLinkage linkage = gen.getLIRGeneratorTool().getForeignCalls().lookupForeignCall(NEW_ARRAY); - Variable result = gen.getLIRGenerator().emitForeignCall(linkage, this, gen.operand(hub), gen.operand(length)); + Variable result = gen.getLIRGenerator().emitForeignCall(linkage, gen.state(this), gen.operand(hub), gen.operand(length)); gen.setResult(this, result); } diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Tue Apr 22 18:41:00 2014 +0200 @@ -59,7 +59,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { ForeignCallLinkage linkage = gen.getLIRGeneratorTool().getForeignCalls().lookupForeignCall(NEW_INSTANCE); - Value result = gen.getLIRGeneratorTool().emitForeignCall(linkage, this, gen.operand(hub)); + Value result = gen.getLIRGeneratorTool().emitForeignCall(linkage, gen.state(this), gen.operand(hub)); gen.setResult(this, result); } diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LabelRef.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LabelRef.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LabelRef.java Tue Apr 22 18:41:00 2014 +0200 @@ -26,12 +26,11 @@ import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.lir.StandardOp.BranchOp; import com.oracle.graal.lir.StandardOp.JumpOp; -import com.oracle.graal.nodes.cfg.*; /** * LIR instructions such as {@link JumpOp} and {@link BranchOp} need to reference their target - * {@link Block}. However, direct references are not possible since the control flow graph (and - * therefore successors lists) can be changed by optimizations - and fixing the instructions is + * {@link AbstractBlock}. However, direct references are not possible since the control flow graph + * (and therefore successors lists) can be changed by optimizations - and fixing the instructions is * error prone. Therefore, we represent an edge to block B from block A via the tuple {@code (A, * successor-index-of-B)}. That is, indirectly by storing the index into the successor list of A. * Note therefore that the successor list cannot be re-ordered. diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/ArithmeticLIRGenerator.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/ArithmeticLIRGenerator.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/ArithmeticLIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -25,15 +25,13 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.nodes.*; +import com.oracle.graal.lir.*; /** * This interface can be used to generate LIR for arithmetic operations. */ public interface ArithmeticLIRGenerator { - /** - * TODO remove reference to {@link Stamp}. - */ + PlatformKind getPlatformKind(Stamp stamp); Value emitNegate(Value input); @@ -44,25 +42,13 @@ Value emitMul(Value a, Value b); - /** - * TODO remove {@link DeoptimizeNode}. - */ - Value emitDiv(Value a, Value b, DeoptimizingNode deopting); + Value emitDiv(Value a, Value b, LIRFrameState state); - /** - * TODO remove {@link DeoptimizeNode}. - */ - Value emitRem(Value a, Value b, DeoptimizingNode deopting); + Value emitRem(Value a, Value b, LIRFrameState state); - /** - * TODO remove {@link DeoptimizeNode}. - */ - Value emitUDiv(Value a, Value b, DeoptimizingNode deopting); + Value emitUDiv(Value a, Value b, LIRFrameState state); - /** - * TODO remove {@link DeoptimizeNode}. - */ - Value emitURem(Value a, Value b, DeoptimizingNode deopting); + Value emitURem(Value a, Value b, LIRFrameState state); Value emitNot(Value input); diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Tue Apr 22 18:41:00 2014 +0200 @@ -43,8 +43,6 @@ import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.StandardOp.LabelOp; import com.oracle.graal.lir.StandardOp.NoOp; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.spi.*; import com.oracle.graal.options.*; /** @@ -356,11 +354,11 @@ } @Override - public Variable emitForeignCall(ForeignCallLinkage linkage, DeoptimizingNode info, Value... args) { + public Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState frameState, Value... args) { LIRFrameState state = null; if (linkage.canDeoptimize()) { - if (info != null) { - state = stateFor(getFrameState(info)); + if (frameState != null) { + state = frameState; } else { assert needOnlyOopMaps(); state = new LIRFrameState(null, null, null); diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Tue Apr 22 18:41:00 2014 +0200 @@ -25,8 +25,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.lir.*; public interface LIRGeneratorTool extends ArithmeticLIRGenerator { @@ -38,9 +37,9 @@ ForeignCallsProvider getForeignCalls(); - Value emitLoad(PlatformKind kind, Value address, Access access); + Value emitLoad(PlatformKind kind, Value address, LIRFrameState state); - void emitStore(PlatformKind kind, Value address, Value input, Access access); + void emitStore(PlatformKind kind, Value address, Value input, LIRFrameState state); Value emitCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue); @@ -64,9 +63,9 @@ throw GraalInternalError.unimplemented(); } - void emitDeoptimize(Value actionAndReason, Value failedSpeculation, DeoptimizingNode deopting); + void emitDeoptimize(Value actionAndReason, Value failedSpeculation, LIRFrameState state); - Value emitForeignCall(ForeignCallLinkage linkage, DeoptimizingNode info, Value... args); + Value emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args); /** * Checks whether the supplied constant can be used without loading it into a register for most diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -63,7 +63,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.getLIRGeneratorTool().emitDeoptimize(gen.getLIRGeneratorTool().getMetaAccess().encodeDeoptActionAndReason(action, reason, debugId), speculation, this); + gen.getLIRGeneratorTool().emitDeoptimize(gen.getLIRGeneratorTool().getMetaAccess().encodeDeoptActionAndReason(action, reason, debugId), speculation, gen.state(this)); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -55,7 +55,7 @@ } public void generate(NodeLIRBuilderTool generator) { - generator.getLIRGeneratorTool().emitDeoptimize(generator.operand(actionAndReason), generator.operand(speculation), this); + generator.getLIRGeneratorTool().emitDeoptimize(generator.operand(actionAndReason), generator.operand(speculation), generator.state(this)); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -108,7 +108,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitDiv(gen.operand(x()), gen.operand(y()), this)); + gen.setResult(this, gen.getLIRGeneratorTool().emitDiv(gen.operand(x()), gen.operand(y()), gen.state(this))); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -62,7 +62,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitRem(gen.operand(x()), gen.operand(y()), this)); + gen.setResult(this, gen.getLIRGeneratorTool().emitRem(gen.operand(x()), gen.operand(y()), gen.state(this))); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -72,7 +72,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitUDiv(gen.operand(x()), gen.operand(y()), this)); + gen.setResult(this, gen.getLIRGeneratorTool().emitUDiv(gen.operand(x()), gen.operand(y()), gen.state(this))); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -71,7 +71,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitURem(gen.operand(x()), gen.operand(y()), this)); + gen.setResult(this, gen.getLIRGeneratorTool().emitURem(gen.operand(x()), gen.operand(y()), gen.state(this))); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -63,7 +63,7 @@ public void generate(NodeLIRBuilderTool gen) { Value address = location().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object())); PlatformKind readKind = gen.getLIRGeneratorTool().getPlatformKind(stamp()); - gen.setResult(this, gen.getLIRGeneratorTool().emitLoad(readKind, address, this)); + gen.setResult(this, gen.getLIRGeneratorTool().emitLoad(readKind, address, null)); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -94,7 +94,7 @@ public void generate(NodeLIRBuilderTool gen) { ForeignCallLinkage linkage = gen.getLIRGeneratorTool().getForeignCalls().lookupForeignCall(descriptor); Value[] operands = operands(gen); - Value result = gen.getLIRGeneratorTool().emitForeignCall(linkage, this, operands); + Value result = gen.getLIRGeneratorTool().emitForeignCall(linkage, gen.state(this), operands); if (result != null) { gen.setResult(this, result); } diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -57,7 +57,7 @@ public void generate(NodeLIRBuilderTool gen) { Value address = location().generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object())); PlatformKind readKind = gen.getLIRGeneratorTool().getPlatformKind(stamp()); - gen.setResult(this, gen.getLIRGeneratorTool().emitLoad(readKind, address, this)); + gen.setResult(this, gen.getLIRGeneratorTool().emitLoad(readKind, address, gen.state(this))); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -54,7 +54,7 @@ v = gen.operand(value()); } PlatformKind writeKind = gen.getLIRGeneratorTool().getPlatformKind(value().stamp()); - gen.getLIRGeneratorTool().emitStore(writeKind, address, v, this); + gen.getLIRGeneratorTool().emitStore(writeKind, address, v, gen.state(this)); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Tue Apr 22 18:41:00 2014 +0200 @@ -53,7 +53,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { ForeignCallLinkage linkage = gen.getLIRGeneratorTool().getForeignCalls().lookupForeignCall(REGISTER_FINALIZER); - gen.getLIRGeneratorTool().emitForeignCall(linkage, this, gen.operand(object())); + gen.getLIRGeneratorTool().emitForeignCall(linkage, gen.state(this), gen.operand(object())); } @Override diff -r e4ca8e6f6663 -r 468b2428c403 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Tue Apr 22 16:45:47 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Tue Apr 22 18:41:00 2014 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.lir.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; @@ -33,6 +34,9 @@ public interface NodeLIRBuilderTool extends NodeMappableLIRBuilder { + // TODO (je) remove and move into the Node + LIRFrameState state(DeoptimizingNode deopt); + void emitNullCheck(ValueNode v, DeoptimizingNode deopting); void emitIf(IfNode i);