# HG changeset patch # User Thomas Wuerthinger # Date 1397667434 -7200 # Node ID 78530cbd8940255a2478ba8e96e5c474ba999cfd # Parent 258e3e0b5e2edc3ebf8fd0492cc42d2e6221e9eb Truffle: Make OptimizedCallTarget itself an InstalledCode object. diff -r 258e3e0b5e2e -r 78530cbd8940 graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64OptimizedCallTargetInstrumentationFactory.java --- a/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64OptimizedCallTargetInstrumentationFactory.java Wed Apr 16 18:51:54 2014 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64OptimizedCallTargetInstrumentationFactory.java Wed Apr 16 18:57:14 2014 +0200 @@ -31,7 +31,6 @@ import com.oracle.graal.asm.amd64.*; import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.amd64.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.asm.*; @@ -50,22 +49,9 @@ AMD64MacroAssembler asm = (AMD64MacroAssembler) this.asm; Register thisRegister = codeCache.getRegisterConfig().getCallingConventionRegisters(Type.JavaCall, Kind.Object)[0]; Register spillRegister = AMD64.r10; // TODO(mg): fix me - AMD64Address nMethodAddress = new AMD64Address(thisRegister, getFieldOffset("installedCode", OptimizedCallTarget.class)); - int verifiedEntryPoint = asm.position(); - if (config.useCompressedOops) { - asm.movl(spillRegister, nMethodAddress); - asm.nop(AMD64HotSpotBackend.PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE - (asm.position() - verifiedEntryPoint)); - AMD64HotSpotMove.decodePointer(asm, spillRegister, registers.getHeapBaseRegister(), config.getOopEncoding()); - } else { - asm.movq(spillRegister, nMethodAddress); - asm.nop(AMD64HotSpotBackend.PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE - (asm.position() - verifiedEntryPoint)); - } Label doProlog = new Label(); - asm.cmpq(spillRegister, 0); - asm.jcc(ConditionFlag.Equal, doProlog); - - AMD64Address codeBlobAddress = new AMD64Address(spillRegister, getFieldOffset("address", InstalledCode.class)); + AMD64Address codeBlobAddress = new AMD64Address(thisRegister, getFieldOffset("address", InstalledCode.class)); asm.movq(spillRegister, codeBlobAddress); asm.cmpq(spillRegister, 0); asm.jcc(ConditionFlag.Equal, doProlog); diff -r 258e3e0b5e2e -r 78530cbd8940 graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotOptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotOptimizedCallTarget.java Wed Apr 16 18:51:54 2014 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotOptimizedCallTarget.java Wed Apr 16 18:57:14 2014 +0200 @@ -53,7 +53,7 @@ } public boolean isOptimized() { - return installedCode.isValid() || installedCodeTask != null; + return isValid() || installedCodeTask != null; } @Override @@ -72,8 +72,7 @@ } private Object compiledCallFallback(Object[] args) { - InstalledCode currentInstalledCode = installedCode; - if (currentInstalledCode.isValid()) { + if (isValid()) { reinstallCallMethodShortcut(); } return interpreterCall(args); @@ -88,10 +87,9 @@ @Override protected void invalidate(Node oldNode, Node newNode, CharSequence reason) { - InstalledCode m = this.installedCode; - if (m.isValid()) { + if (isValid()) { CompilerAsserts.neverPartOfCompilation(); - m.invalidate(); + invalidate(); compilationProfile.reportInvalidated(); logOptimizedInvalidated(this, oldNode, newNode, reason); } @@ -117,9 +115,9 @@ if (compilationEnabled && compilationPolicy.shouldCompile(compilationProfile)) { compile(); - if (installedCode.isValid()) { + if (isValid()) { try { - return installedCode.executeVarargs(new Object[]{this, args}); + return executeVarargs(new Object[]{this, args}); } catch (InvalidInstalledCodeException ex) { } } diff -r 258e3e0b5e2e -r 78530cbd8940 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Wed Apr 16 18:51:54 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Wed Apr 16 18:57:14 2014 +0200 @@ -42,7 +42,6 @@ protected static final PrintStream OUT = TTY.out().out(); - protected InstalledCode installedCode; protected boolean compilationEnabled; protected int callCount; protected boolean inliningPerformed; @@ -61,7 +60,6 @@ this.rootNode = rootNode; this.rootNode.adoptChildren(); this.rootNode.setCallTarget(this); - this.installedCode = new InstalledCode(); this.compilationEnabled = compilationEnabled; this.compilationPolicy = compilationPolicy; this.compilationProfile = new CompilationProfile(compilationThreshold, invokeCounter, rootNode.toString()); @@ -102,7 +100,7 @@ @Override public String toString() { String superString = rootNode.toString(); - if (installedCode.isValid()) { + if (isValid()) { superString += " "; } if (splitSource != null) { diff -r 258e3e0b5e2e -r 78530cbd8940 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Wed Apr 16 18:51:54 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Wed Apr 16 18:57:14 2014 +0200 @@ -266,7 +266,7 @@ } int nodeCount = OptimizedCallUtils.countNonTrivialNodes(callTarget, true); - String comment = callTarget.installedCode.isValid() ? "" : " int"; + String comment = callTarget.isValid() ? "" : " int"; comment += callTarget.compilationEnabled ? "" : " fail"; OUT.printf("%-50s | %10d | %15d | %10d | %3d%s\n", callTarget.getRootNode(), callTarget.callCount, nodeCount, nodeCount, callTarget.getCompilationProfile().getInvalidationCount(), comment); diff -r 258e3e0b5e2e -r 78530cbd8940 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java Wed Apr 16 18:51:54 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerImpl.java Wed Apr 16 18:57:14 2014 +0200 @@ -151,7 +151,7 @@ long timePartialEvaluationFinished = System.nanoTime(); int nodeCountPartialEval = graph.getNodeCount(); - InstalledCode compiledMethod = compileMethodHelper(graph, assumptions, compilable.toString(), compilable.getSpeculationLog(), compilable.installedCode); + InstalledCode compiledMethod = compileMethodHelper(graph, assumptions, compilable.toString(), compilable.getSpeculationLog(), compilable); long timeCompilationFinished = System.nanoTime(); int nodeCountLowered = graph.getNodeCount();