# HG changeset patch # User Thomas Wuerthinger # Date 1362507605 -3600 # Node ID c6c72de0537e29c3edff1994d676bcd8a15c2515 # Parent 0799a7efbe7bbf9a2776639fa52cf9b95dfdcd3d Remove setDeoptInfo functionality. Start getting rid of scratch register usages. diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64DeoptimizationStub.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64DeoptimizationStub.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64DeoptimizationStub.java Tue Mar 05 19:20:05 2013 +0100 @@ -22,8 +22,6 @@ */ package com.oracle.graal.compiler.amd64; -import java.util.*; - import com.oracle.graal.api.code.*; import com.oracle.graal.api.code.RuntimeCallTarget.*; import com.oracle.graal.api.meta.*; @@ -32,40 +30,26 @@ import com.oracle.graal.lir.*; import com.oracle.graal.lir.amd64.*; import com.oracle.graal.lir.asm.*; -import com.oracle.graal.phases.*; public class AMD64DeoptimizationStub extends AMD64Code { public static final Descriptor DEOPTIMIZE = new Descriptor("deoptimize", true, void.class); - public static final Descriptor SET_DEOPT_INFO = new Descriptor("setDeoptInfo", true, void.class, Object.class); public final Label label = new Label(); public final LIRFrameState info; public final DeoptimizationAction action; public final DeoptimizationReason reason; - public final Object deoptInfo; - public AMD64DeoptimizationStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info, Object deoptInfo) { + public AMD64DeoptimizationStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info) { this.action = action; this.reason = reason; this.info = info; - this.deoptInfo = deoptInfo; } - private static ArrayList keepAlive = new ArrayList<>(); - @Override public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) { Register scratch = tasm.frameMap.registerConfig.getScratchRegister(); - masm.bind(label); - if (GraalOptions.CreateDeoptInfo && deoptInfo != null) { - masm.nop(); - keepAlive.add(deoptInfo.toString()); - AMD64Move.move(tasm, masm, scratch.asValue(), Constant.forObject(deoptInfo)); - AMD64Call.directCall(tasm, masm, tasm.runtime.lookupRuntimeCall(SET_DEOPT_INFO), info); - } - masm.movl(scratch, tasm.runtime.encodeDeoptActionAndReason(action, reason)); AMD64Call.directCall(tasm, masm, tasm.runtime.lookupRuntimeCall(DEOPTIMIZE), info); AMD64Call.shouldNotReachHere(tasm, masm); diff -r 0799a7efbe7b -r c6c72de0537e 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 Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Mar 05 19:20:05 2013 +0100 @@ -756,16 +756,16 @@ } @Override - public void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo) { + public void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason) { LIRFrameState info = state(); - LabelRef stubEntry = createDeoptStub(action, reason, info, deoptInfo); + LabelRef stubEntry = createDeoptStub(action, reason, info); append(new BranchOp(ConditionFlag.Overflow, stubEntry, info)); } @Override - public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo) { + public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason) { LIRFrameState info = state(); - LabelRef stubEntry = createDeoptStub(action, reason, info, deoptInfo); + LabelRef stubEntry = createDeoptStub(action, reason, info); append(new JumpOp(stubEntry, info)); } @@ -889,9 +889,9 @@ } @Override - protected LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info, Object deoptInfo) { + protected LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info) { assert info.topFrame.getBCI() >= 0 : "invalid bci for deopt framestate"; - AMD64DeoptimizationStub stub = new AMD64DeoptimizationStub(action, reason, info, deoptInfo); + AMD64DeoptimizationStub stub = new AMD64DeoptimizationStub(action, reason, info); lir.stubs.add(stub); return LabelRef.forLabel(stub.label); } diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXDeoptimizationStub.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXDeoptimizationStub.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXDeoptimizationStub.java Tue Mar 05 19:20:05 2013 +0100 @@ -40,13 +40,11 @@ public final LIRFrameState info; public final DeoptimizationAction action; public final DeoptimizationReason reason; - public final Object deoptInfo; - public PTXDeoptimizationStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info, Object deoptInfo) { + public PTXDeoptimizationStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info) { this.action = action; this.reason = reason; this.info = info; - this.deoptInfo = deoptInfo; } @Override diff -r 0799a7efbe7b -r c6c72de0537e 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 Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Tue Mar 05 19:20:05 2013 +0100 @@ -336,12 +336,12 @@ } @Override - public void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo) { + public void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason) { throw new InternalError("NYI"); } @Override - public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo) { + public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason) { throw new InternalError("NYI"); } @@ -440,9 +440,9 @@ } @Override - protected LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info, Object deoptInfo) { + protected LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info) { assert info.topFrame.getBCI() >= 0 : "invalid bci for deopt framestate"; - PTXDeoptimizationStub stub = new PTXDeoptimizationStub(action, reason, info, deoptInfo); + PTXDeoptimizationStub stub = new PTXDeoptimizationStub(action, reason, info); lir.stubs.add(stub); return LabelRef.forLabel(stub.label); } diff -r 0799a7efbe7b -r c6c72de0537e 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 Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Mar 05 19:20:05 2013 +0100 @@ -112,7 +112,7 @@ } @Override - protected LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info, Object deoptInfo) { + protected LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info) { // SPARC: Auto-generated method stub return null; } @@ -334,13 +334,13 @@ } @Override - public void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo) { + public void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason) { // SPARC: Auto-generated method stub } @Override - public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo) { + public void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason) { // SPARC: Auto-generated method stub } diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Tue Mar 05 19:20:05 2013 +0100 @@ -596,7 +596,7 @@ } else { // Fall back to a normal branch. LIRFrameState info = state(); - LabelRef stubEntry = createDeoptStub(action, deoptReason, info, comp); + LabelRef stubEntry = createDeoptStub(action, deoptReason, info); if (negated) { emitBranch(comp, stubEntry, null, info); } else { @@ -759,7 +759,7 @@ return result; } - protected abstract LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info, Object deoptInfo); + protected abstract LabelRef createDeoptStub(DeoptimizationAction action, DeoptimizationReason reason, LIRFrameState info); @Override public Variable emitCall(RuntimeCallTarget callTarget, CallingConvention cc, boolean canTrap, Value... args) { diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Tue Mar 05 19:20:05 2013 +0100 @@ -209,8 +209,7 @@ String res = String.format( "Allocatable: " + Arrays.toString(getAllocatableRegisters()) + "%n" + "CallerSave: " + Arrays.toString(getCallerSaveRegisters()) + "%n" + - "CalleeSave: " + getCalleeSaveLayout() + "%n" + - "Scratch: " + getScratchRegister() + "%n"); + "CalleeSave: " + getCalleeSaveLayout() + "%n"); return res; } } diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Tue Mar 05 19:20:05 2013 +0100 @@ -60,11 +60,6 @@ /* temps */ null, /* ret */ ret(Kind.Void)); - addRuntimeCall(SET_DEOPT_INFO, config.setDeoptInfoStub, - /* temps */ null, - /* ret */ ret(Kind.Void), - /* arg0: info */ scratch(Kind.Object)); - addRuntimeCall(DEBUG, config.debugStub, /* temps */ null, /* ret */ ret(Kind.Void)); diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Tue Mar 05 19:20:05 2013 +0100 @@ -320,7 +320,6 @@ public long unwindExceptionStub; public long osrMigrationEndStub; public long registerFinalizerStub; - public long setDeoptInfoStub; public long createNullPointerExceptionStub; public long createOutOfBoundsExceptionStub; public long javaTimeMillisStub; diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Tue Mar 05 19:20:05 2013 +0100 @@ -196,10 +196,6 @@ return result; } - protected Value scratch(Kind kind) { - return globalStubRegConfig.getScratchRegister().asValue(kind); - } - public HotSpotRuntime(HotSpotVMConfig config, HotSpotGraalRuntime graalRuntime) { this.config = config; this.graalRuntime = graalRuntime; diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Mar 05 19:20:05 2013 +0100 @@ -1026,7 +1026,6 @@ Kind resultType = targetMethod.getSignature().getReturnKind(); if (GraalOptions.DeoptALot) { DeoptimizeNode deoptimize = currentGraph.add(new DeoptimizeNode(DeoptimizationAction.None, DeoptimizationReason.RuntimeConstraint)); - deoptimize.setMessage(targetMethod.getName()); append(deoptimize); frameState.pushReturn(resultType, ConstantNode.defaultForKind(resultType, currentGraph)); return; diff -r 0799a7efbe7b -r c6c72de0537e 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 Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Tue Mar 05 19:20:05 2013 +0100 @@ -31,7 +31,6 @@ @NodeInfo(shortName = "Deopt", nameTemplate = "Deopt {p#reason/s}") public class DeoptimizeNode extends FixedNode implements Node.IterableNodeType, LIRLowerable { - private String message; private final DeoptimizationAction action; private final DeoptimizationReason reason; @@ -41,14 +40,6 @@ this.reason = reason; } - public void setMessage(String message) { - this.message = message; - } - - public String message() { - return message; - } - public DeoptimizationAction action() { return action; } @@ -59,7 +50,7 @@ @Override public void generate(LIRGeneratorTool gen) { - gen.emitDeoptimize(action, reason, message); + gen.emitDeoptimize(action, reason); } @NodeIntrinsic diff -r 0799a7efbe7b -r c6c72de0537e 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 Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Tue Mar 05 19:20:05 2013 +0100 @@ -97,9 +97,9 @@ public abstract void emitMembar(int barriers); - public abstract void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo); + public abstract void emitDeoptimizeOnOverflow(DeoptimizationAction action, DeoptimizationReason reason); - public abstract void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason, Object deoptInfo); + public abstract void emitDeoptimize(DeoptimizationAction action, DeoptimizationReason reason); public abstract Value emitCall(RuntimeCallTarget callTarget, CallingConvention cc, boolean canTrap, Value... args); diff -r 0799a7efbe7b -r c6c72de0537e graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Tue Mar 05 19:00:23 2013 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java Tue Mar 05 19:20:05 2013 +0100 @@ -109,7 +109,6 @@ public static boolean ZapStackOnMethodEntry = ____; public static boolean DeoptALot = ____; public static boolean VerifyPhases = true; - public static boolean CreateDeoptInfo = ____; public static String PrintFilter = null; diff -r 0799a7efbe7b -r c6c72de0537e src/cpu/x86/vm/graalRuntime_x86.cpp --- a/src/cpu/x86/vm/graalRuntime_x86.cpp Tue Mar 05 19:00:23 2013 +0100 +++ b/src/cpu/x86/vm/graalRuntime_x86.cpp Tue Mar 05 19:20:05 2013 +0100 @@ -1029,12 +1029,6 @@ break; } - case set_deopt_info_id: { - __ movptr(Address(r15_thread, JavaThread::graal_deopt_info_offset()), rscratch1); - __ ret(0); - break; - } - case create_null_pointer_exception_id: { __ enter(); oop_maps = new OopMapSet(); diff -r 0799a7efbe7b -r c6c72de0537e src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Tue Mar 05 19:00:23 2013 +0100 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Tue Mar 05 19:20:05 2013 +0100 @@ -724,7 +724,6 @@ set_stub("unwindExceptionStub", GraalRuntime::entry_for(GraalRuntime::unwind_exception_call_id)); set_stub("osrMigrationEndStub", GraalRuntime::entry_for(GraalRuntime::OSR_migration_end_id)); set_stub("registerFinalizerStub", GraalRuntime::entry_for(GraalRuntime::register_finalizer_id)); - set_stub("setDeoptInfoStub", GraalRuntime::entry_for(GraalRuntime::set_deopt_info_id)); set_stub("createNullPointerExceptionStub", GraalRuntime::entry_for(GraalRuntime::create_null_pointer_exception_id)); set_stub("createOutOfBoundsExceptionStub", GraalRuntime::entry_for(GraalRuntime::create_out_of_bounds_exception_id)); set_stub("javaTimeMillisStub", CAST_FROM_FN_PTR(address, os::javaTimeMillis)); diff -r 0799a7efbe7b -r c6c72de0537e src/share/vm/graal/graalRuntime.cpp --- a/src/share/vm/graal/graalRuntime.cpp Tue Mar 05 19:00:23 2013 +0100 +++ b/src/share/vm/graal/graalRuntime.cpp Tue Mar 05 19:20:05 2013 +0100 @@ -136,7 +136,6 @@ case OSR_migration_end_id: case arithmetic_frem_id: case arithmetic_drem_id: - case set_deopt_info_id: break; // All other stubs should have oopmaps diff -r 0799a7efbe7b -r c6c72de0537e src/share/vm/runtime/deoptimization.cpp --- a/src/share/vm/runtime/deoptimization.cpp Tue Mar 05 19:00:23 2013 +0100 +++ b/src/share/vm/runtime/deoptimization.cpp Tue Mar 05 19:20:05 2013 +0100 @@ -1312,20 +1312,6 @@ if (TraceDeoptimization) { tty->print_cr(" bci=%d pc=%d, relative_pc=%d, method=%s", trap_scope->bci(), fr.pc(), fr.pc() - nm->code_begin(), trap_scope->method()->name()->as_C_string()); -#ifdef GRAAL - if (thread->graal_deopt_info() != NULL) { - oop deopt_info = thread->graal_deopt_info(); - if (java_lang_String::is_instance(deopt_info)) { - char buf[O_BUFLEN]; - java_lang_String::as_utf8_string(deopt_info, buf, O_BUFLEN); - tty->print_cr("deopt info: %s", buf); - } else { - tty->print_cr("deopt info:"); - deopt_info->print(); - } - thread->set_graal_deopt_info(NULL); - } -#endif } methodHandle trap_method = trap_scope->method(); diff -r 0799a7efbe7b -r c6c72de0537e src/share/vm/runtime/thread.cpp --- a/src/share/vm/runtime/thread.cpp Tue Mar 05 19:00:23 2013 +0100 +++ b/src/share/vm/runtime/thread.cpp Tue Mar 05 19:20:05 2013 +0100 @@ -1439,7 +1439,6 @@ _doing_unsafe_access = false; _stack_guard_state = stack_guard_unused; #ifdef GRAAL - _graal_deopt_info = NULL; _graal_alternate_call_target = NULL; _debug_scope = NULL; #endif @@ -2776,9 +2775,6 @@ // around using this function f->do_oop((oop*) &_threadObj); f->do_oop((oop*) &_vm_result); -#ifdef GRAAL - f->do_oop((oop*) &_graal_deopt_info); -#endif f->do_oop((oop*) &_exception_oop); f->do_oop((oop*) &_pending_async_exception); diff -r 0799a7efbe7b -r c6c72de0537e src/share/vm/runtime/thread.hpp --- a/src/share/vm/runtime/thread.hpp Tue Mar 05 19:00:23 2013 +0100 +++ b/src/share/vm/runtime/thread.hpp Tue Mar 05 19:20:05 2013 +0100 @@ -903,7 +903,6 @@ private: #ifdef GRAAL - volatile oop _graal_deopt_info; address _graal_alternate_call_target; DebugScopedValue* _debug_scope; #endif @@ -1282,9 +1281,6 @@ void set_deferred_card_mark(MemRegion mr) { _deferred_card_mark = mr; } #ifdef GRAAL - oop graal_deopt_info() const { return _graal_deopt_info; } - void set_graal_deopt_info(oop o) { _graal_deopt_info = o; } - void set_graal_alternate_call_target(address a) { _graal_alternate_call_target = a; } DebugScopedValue* debug_scope() const { return _debug_scope; } @@ -1375,7 +1371,6 @@ static ByteSize saved_exception_pc_offset() { return byte_offset_of(JavaThread, _saved_exception_pc ); } static ByteSize osthread_offset() { return byte_offset_of(JavaThread, _osthread ); } #ifdef GRAAL - static ByteSize graal_deopt_info_offset() { return byte_offset_of(JavaThread, _graal_deopt_info ); } static ByteSize graal_alternate_call_target_offset() { return byte_offset_of(JavaThread, _graal_alternate_call_target); } #endif #ifdef HIGH_LEVEL_INTERPRETER