Mercurial > hg > graal-compiler
changeset 22637:4dab2545d435
removed HotSpotGraalRuntime singleton - it's now owned by a HotSpotGraalCompiler instance (GRAAL-1235)
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/CompressedNullCheckTest.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/CompressedNullCheckTest.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,23 +22,25 @@ */ package com.oracle.graal.hotspot.amd64.test; -import jdk.internal.jvmci.meta.*; -import jdk.internal.jvmci.options.*; -import jdk.internal.jvmci.options.OptionValue.*; - -import org.junit.*; +import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.internal.jvmci.options.OptionValue; +import jdk.internal.jvmci.options.OptionValue.OverrideScope; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.test.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.calc.*; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Test; + +import com.oracle.graal.compiler.common.GraalOptions; +import com.oracle.graal.hotspot.nodes.CompressionNode; +import com.oracle.graal.hotspot.test.HotSpotGraalCompilerTest; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.calc.IsNullNode; /** * Ensures that frame omission works in cases where it is expected to. */ -public class CompressedNullCheckTest extends GraalCompilerTest { +public class CompressedNullCheckTest extends HotSpotGraalCompilerTest { private static final class Container { Integer i; @@ -50,7 +52,7 @@ @SuppressWarnings("try") private void testImplicit(Integer i) { - Assume.assumeTrue(HotSpotGraalRuntime.runtime().getConfig().useCompressedOops); + Assume.assumeTrue(runtime().getConfig().useCompressedOops); Container c = new Container(); c.i = i; @@ -69,7 +71,7 @@ @SuppressWarnings("try") private void testExplicit(Integer i) { - Assume.assumeTrue(HotSpotGraalRuntime.runtime().getConfig().useCompressedOops); + Assume.assumeTrue(runtime().getConfig().useCompressedOops); Container c = new Container(); c.i = i;
--- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java Wed Sep 16 00:48:33 2015 +0200 @@ -23,28 +23,36 @@ package com.oracle.graal.hotspot.amd64.test; -import jdk.internal.jvmci.amd64.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; -import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; -import static jdk.internal.jvmci.code.ValueUtil.*; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.config; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; +import static jdk.internal.jvmci.code.ValueUtil.asRegister; +import jdk.internal.jvmci.amd64.AMD64; +import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.internal.jvmci.meta.Constant; -import org.junit.*; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; -import com.oracle.graal.api.replacements.*; -import com.oracle.graal.asm.amd64.*; -import com.oracle.graal.graph.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.api.replacements.ClassSubstitution; +import com.oracle.graal.api.replacements.MethodSubstitution; +import com.oracle.graal.asm.amd64.AMD64Address; +import com.oracle.graal.asm.amd64.AMD64MacroAssembler; +import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.hotspot.nodes.CompressionNode; import com.oracle.graal.hotspot.nodes.CompressionNode.CompressionOp; -import com.oracle.graal.hotspot.nodes.type.*; -import com.oracle.graal.hotspot.test.*; -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.asm.*; -import com.oracle.graal.lir.gen.*; -import com.oracle.graal.nodeinfo.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.hotspot.nodes.type.NarrowOopStamp; +import com.oracle.graal.hotspot.test.HotSpotGraalCompilerTest; +import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.asm.CompilationResultBuilder; +import com.oracle.graal.lir.gen.LIRGeneratorTool; +import com.oracle.graal.nodeinfo.NodeInfo; +import com.oracle.graal.nodes.FixedWithNextNode; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; public class DataPatchInConstantsTest extends HotSpotGraalCompilerTest { @@ -102,7 +110,7 @@ @Test public void narrowOopTest() { - Assume.assumeTrue("skipping narrow oop data patch test", config.useCompressedOops); + Assume.assumeTrue("skipping narrow oop data patch test", runtime().getConfig().useCompressedOops); test("narrowOopSnippet"); } @@ -123,11 +131,10 @@ @Test public void compareTest() { - Assume.assumeTrue("skipping narrow oop data patch test", config.useCompressedOops); + Assume.assumeTrue("skipping narrow oop data patch test", runtime().getConfig().useCompressedOops); test("compareSnippet"); } - private static final HotSpotVMConfig config = HotSpotGraalRuntime.runtime().getConfig(); private static boolean initReplacements = false; @Before @@ -148,9 +155,9 @@ @MethodSubstitution public static Object loadThroughCompressedPatch(Object obj) { - Object compressed = CompressionNode.compression(CompressionOp.Compress, obj, config.getOopEncoding()); + Object compressed = CompressionNode.compression(CompressionOp.Compress, obj, config().getOopEncoding()); Object patch = LoadThroughPatchNode.load(compressed); - return CompressionNode.compression(CompressionOp.Uncompress, patch, config.getOopEncoding()); + return CompressionNode.compression(CompressionOp.Uncompress, patch, config().getOopEncoding()); } }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Wed Sep 16 00:48:33 2015 +0200 @@ -77,8 +77,8 @@ */ public class AMD64HotSpotBackend extends HotSpotHostBackend { - public AMD64HotSpotBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { - super(runtime, providers); + public AMD64HotSpotBackend(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { + super(config, runtime, providers); } @Override
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Wed Sep 16 00:48:33 2015 +0200 @@ -55,14 +55,16 @@ @Override @SuppressWarnings("try") - public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, JVMCIBackend jvmci, HotSpotBackend host) { + public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider graalRuntime, CompilerConfiguration compilerConfiguration, HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotBackend host) { assert host == null; + JVMCIBackend jvmci = jvmciRuntime.getHostJVMCIBackend(); + HotSpotVMConfig config = jvmciRuntime.getConfig(); HotSpotProviders providers; HotSpotRegistersProvider registers; HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) jvmci.getCodeCache(); TargetDescription target = codeCache.getTarget(); - HotSpotConstantReflectionProvider constantReflection = new HotSpotGraalConstantReflectionProvider(runtime.getJVMCIRuntime()); + HotSpotConstantReflectionProvider constantReflection = new HotSpotGraalConstantReflectionProvider(jvmciRuntime); HotSpotHostForeignCallsProvider foreignCalls; Value[] nativeABICallerSaveRegisters; HotSpotMetaAccessProvider metaAccess = (HotSpotMetaAccessProvider) jvmci.getMetaAccess(); @@ -77,68 +79,68 @@ registers = createRegisters(); } try (InitTimer rt = timer("create NativeABICallerSaveRegisters")) { - nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); + nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(config, codeCache.getRegisterConfig()); } try (InitTimer rt = timer("create ForeignCalls provider")) { - foreignCalls = createForeignCalls(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); + foreignCalls = createForeignCalls(jvmciRuntime, graalRuntime, metaAccess, codeCache, nativeABICallerSaveRegisters); } try (InitTimer rt = timer("create Lowerer provider")) { - lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); + lowerer = createLowerer(graalRuntime, metaAccess, foreignCalls, registers, target); } HotSpotStampProvider stampProvider = new HotSpotStampProvider(); Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, stampProvider); try (InitTimer rt = timer("create SnippetReflection provider")) { - snippetReflection = createSnippetReflection(runtime); + snippetReflection = createSnippetReflection(graalRuntime); } try (InitTimer rt = timer("create Replacements provider")) { - replacements = createReplacements(runtime, p, snippetReflection); + replacements = createReplacements(config, p, snippetReflection); } try (InitTimer rt = timer("create WordTypes")) { wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); } try (InitTimer rt = timer("create GraphBuilderPhase plugins")) { - plugins = createGraphBuilderPlugins(runtime, target, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes, stampProvider); + plugins = createGraphBuilderPlugins(config, target, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes, stampProvider); replacements.setGraphBuilderPlugins(plugins); } try (InitTimer rt = timer("create Suites provider")) { - suites = createSuites(runtime, compilerConfiguration, plugins, codeCache, registers); + suites = createSuites(config, graalRuntime, compilerConfiguration, plugins, codeCache, registers); } providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, suites, registers, snippetReflection, wordTypes, plugins); } try (InitTimer rt = timer("instantiate backend")) { - return createBackend(runtime, providers); + return createBackend(config, graalRuntime, providers); } } - protected Plugins createGraphBuilderPlugins(HotSpotGraalRuntimeProvider runtime, TargetDescription target, HotSpotConstantReflectionProvider constantReflection, - HotSpotHostForeignCallsProvider foreignCalls, HotSpotMetaAccessProvider metaAccess, HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, - HotSpotWordTypes wordTypes, HotSpotStampProvider stampProvider) { - Plugins plugins = HotSpotGraphBuilderPlugins.create(runtime.getConfig(), wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, stampProvider, replacements); + protected Plugins createGraphBuilderPlugins(HotSpotVMConfig config, TargetDescription target, HotSpotConstantReflectionProvider constantReflection, HotSpotHostForeignCallsProvider foreignCalls, + HotSpotMetaAccessProvider metaAccess, HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, HotSpotWordTypes wordTypes, + HotSpotStampProvider stampProvider) { + Plugins plugins = HotSpotGraphBuilderPlugins.create(config, wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, stampProvider, replacements); AMD64GraphBuilderPlugins.register(plugins, foreignCalls, (AMD64) target.arch); return plugins; } - protected AMD64HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { - return new AMD64HotSpotBackend(runtime, providers); + protected AMD64HotSpotBackend createBackend(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { + return new AMD64HotSpotBackend(config, runtime, providers); } protected HotSpotRegistersProvider createRegisters() { return new HotSpotRegisters(AMD64.r15, AMD64.r12, AMD64.rsp); } - protected HotSpotReplacementsImpl createReplacements(HotSpotGraalRuntimeProvider runtime, Providers p, SnippetReflectionProvider snippetReflection) { - return new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), p.getCodeCache().getTarget()); + protected HotSpotReplacementsImpl createReplacements(HotSpotVMConfig config, Providers p, SnippetReflectionProvider snippetReflection) { + return new HotSpotReplacementsImpl(p, snippetReflection, config, p.getCodeCache().getTarget()); } - protected AMD64HotSpotForeignCallsProvider createForeignCalls(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, - Value[] nativeABICallerSaveRegisters) { - return new AMD64HotSpotForeignCallsProvider(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); + protected AMD64HotSpotForeignCallsProvider createForeignCalls(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, + HotSpotCodeCacheProvider codeCache, Value[] nativeABICallerSaveRegisters) { + return new AMD64HotSpotForeignCallsProvider(jvmciRuntime, runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); } - protected HotSpotSuitesProvider createSuites(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, Plugins plugins, CodeCacheProvider codeCache, - HotSpotRegistersProvider registers) { - return new HotSpotSuitesProvider(new AMD64SuitesProvider(compilerConfiguration, plugins), runtime, new AMD64HotSpotAddressLowering(codeCache, runtime.getConfig().getOopEncoding().base, + protected HotSpotSuitesProvider createSuites(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, Plugins plugins, + CodeCacheProvider codeCache, HotSpotRegistersProvider registers) { + return new HotSpotSuitesProvider(new AMD64SuitesProvider(compilerConfiguration, plugins), config, runtime, new AMD64HotSpotAddressLowering(codeCache, config.getOopEncoding().base, registers.getHeapBaseRegister())); } @@ -177,15 +179,15 @@ } else { /* * System V Application Binary Interface, AMD64 Architecture Processor Supplement - * + * * Draft Version 0.96 - * + * * http://www.uclibc.org/docs/psABI-x86_64.pdf - * + * * 3.2.1 - * + * * ... - * + * * This subsection discusses usage of each register. Registers %rbp, %rbx and %r12 * through %r15 "belong" to the calling function and the called function is required to * preserve their values. In other words, a called function must preserve these
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableAddressOp.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableAddressOp.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,15 +22,17 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.code.ValueUtil; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.internal.jvmci.meta.JavaConstant; +import jdk.internal.jvmci.meta.JavaKind; -import com.oracle.graal.asm.amd64.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.amd64.*; -import com.oracle.graal.lir.asm.*; +import com.oracle.graal.asm.amd64.AMD64Address; +import com.oracle.graal.asm.amd64.AMD64MacroAssembler; +import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.amd64.AMD64LIRInstruction; +import com.oracle.graal.lir.asm.CompilationResultBuilder; public final class AMD64HotSpotCardTableAddressOp extends AMD64LIRInstruction { public static final LIRInstructionClass<AMD64HotSpotCardTableAddressOp> TYPE = LIRInstructionClass.create(AMD64HotSpotCardTableAddressOp.class); @@ -39,17 +41,19 @@ private final HotSpotVMConfig config; - public AMD64HotSpotCardTableAddressOp(AllocatableValue result, HotSpotVMConfig config) { + private final JavaKind wordKind; + + public AMD64HotSpotCardTableAddressOp(AllocatableValue result, HotSpotVMConfig config, JavaKind wordKind) { super(TYPE); this.result = result; this.config = config; + this.wordKind = wordKind; } @Override public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler asm) { - JavaKind hostWordKind = HotSpotGraalRuntime.getHostWordKind(); - int alignment = hostWordKind.getBitCount() / Byte.SIZE; - JavaConstant address = JavaConstant.forIntegerKind(hostWordKind, 0); + int alignment = wordKind.getBitCount() / Byte.SIZE; + JavaConstant address = JavaConstant.forIntegerKind(wordKind, 0); // recordDataReferenceInCode forces the mov to be rip-relative asm.movq(ValueUtil.asRegister(result), (AMD64Address) crb.recordDataReferenceInCode(address, alignment)); crb.recordMark(config.MARKID_CARD_TABLE_ADDRESS);
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableShiftOp.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableShiftOp.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,15 +22,17 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.code.ValueUtil; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.internal.jvmci.meta.JavaConstant; +import jdk.internal.jvmci.meta.JavaKind; -import com.oracle.graal.asm.amd64.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.lir.*; -import com.oracle.graal.lir.amd64.*; -import com.oracle.graal.lir.asm.*; +import com.oracle.graal.asm.amd64.AMD64Address; +import com.oracle.graal.asm.amd64.AMD64MacroAssembler; +import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.amd64.AMD64LIRInstruction; +import com.oracle.graal.lir.asm.CompilationResultBuilder; public final class AMD64HotSpotCardTableShiftOp extends AMD64LIRInstruction { public static final LIRInstructionClass<AMD64HotSpotCardTableShiftOp> TYPE = LIRInstructionClass.create(AMD64HotSpotCardTableShiftOp.class); @@ -39,17 +41,19 @@ private final HotSpotVMConfig config; - public AMD64HotSpotCardTableShiftOp(AllocatableValue result, HotSpotVMConfig config) { + private final JavaKind wordKind; + + public AMD64HotSpotCardTableShiftOp(AllocatableValue result, HotSpotVMConfig config, JavaKind wordKind) { super(TYPE); this.result = result; this.config = config; + this.wordKind = wordKind; } @Override public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler asm) { - JavaKind hostWordKind = HotSpotGraalRuntime.getHostWordKind(); int alignment = JavaKind.Int.getBitCount() / Byte.SIZE; - JavaConstant shift = JavaConstant.forIntegerKind(hostWordKind, 0); + JavaConstant shift = JavaConstant.forIntegerKind(wordKind, 0); // recordDataReferenceInCode forces the mov to be rip-relative asm.movq(ValueUtil.asRegister(result), (AMD64Address) crb.recordDataReferenceInCode(shift, alignment)); crb.recordMark(config.MARKID_CARD_TABLE_SHIFT);
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotForeignCallsProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotForeignCallsProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,35 +22,51 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; -import static com.oracle.graal.hotspot.HotSpotBackend.*; -import static com.oracle.graal.hotspot.HotSpotBackend.Options.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.*; -import static com.oracle.graal.hotspot.HotSpotHostBackend.*; -import static com.oracle.graal.hotspot.replacements.CRC32Substitutions.*; -import static jdk.internal.jvmci.amd64.AMD64.*; -import static jdk.internal.jvmci.code.CallingConvention.Type.*; -import static jdk.internal.jvmci.meta.LocationIdentity.*; -import static jdk.internal.jvmci.meta.Value.*; +import static com.oracle.graal.hotspot.HotSpotBackend.EXCEPTION_HANDLER; +import static com.oracle.graal.hotspot.HotSpotBackend.EXCEPTION_HANDLER_IN_CALLER; +import static com.oracle.graal.hotspot.HotSpotBackend.Options.PreferGraalStubs; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.JUMP_ADDRESS; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.PRESERVES_REGISTERS; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.LEAF; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.LEAF_NOFP; +import static com.oracle.graal.hotspot.HotSpotHostBackend.DEOPTIMIZATION_HANDLER; +import static com.oracle.graal.hotspot.HotSpotHostBackend.UNCOMMON_TRAP_HANDLER; +import static com.oracle.graal.hotspot.replacements.CRC32Substitutions.UPDATE_BYTES_CRC32; +import static jdk.internal.jvmci.amd64.AMD64.rax; +import static jdk.internal.jvmci.amd64.AMD64.rdx; +import static jdk.internal.jvmci.code.CallingConvention.Type.NativeCall; +import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.internal.jvmci.meta.Value.ILLEGAL; +import jdk.internal.jvmci.code.CallingConvention; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.code.RegisterValue; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.hotspot.CompilerToVM; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.LIRKind; +import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.internal.jvmci.meta.Value; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkageImpl; +import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; +import com.oracle.graal.hotspot.meta.HotSpotHostForeignCallsProvider; +import com.oracle.graal.hotspot.meta.HotSpotProviders; public class AMD64HotSpotForeignCallsProvider extends HotSpotHostForeignCallsProvider { private final Value[] nativeABICallerSaveRegisters; - public AMD64HotSpotForeignCallsProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache, Value[] nativeABICallerSaveRegisters) { - super(runtime, metaAccess, codeCache); + public AMD64HotSpotForeignCallsProvider(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache, + Value[] nativeABICallerSaveRegisters) { + super(jvmciRuntime, runtime, metaAccess, codeCache); this.nativeABICallerSaveRegisters = nativeABICallerSaveRegisters; } @Override - public void initialize(HotSpotProviders providers, HotSpotVMConfig config) { + public void initialize(HotSpotProviders providers) { + HotSpotVMConfig config = jvmciRuntime.getConfig(); TargetDescription target = providers.getCodeCache().getTarget(); JavaKind word = target.wordKind; @@ -60,8 +76,9 @@ RegisterValue exception = rax.asValue(LIRKind.reference(word)); RegisterValue exceptionPc = rdx.asValue(LIRKind.value(word)); CallingConvention exceptionCc = new CallingConvention(0, ILLEGAL, exception, exceptionPc); - register(new HotSpotForeignCallLinkageImpl(EXCEPTION_HANDLER, 0L, PRESERVES_REGISTERS, LEAF_NOFP, null, exceptionCc, NOT_REEXECUTABLE, any())); - register(new HotSpotForeignCallLinkageImpl(EXCEPTION_HANDLER_IN_CALLER, JUMP_ADDRESS, PRESERVES_REGISTERS, LEAF_NOFP, exceptionCc, null, NOT_REEXECUTABLE, any())); + CompilerToVM vm = jvmciRuntime.getCompilerToVM(); + register(new HotSpotForeignCallLinkageImpl(vm, EXCEPTION_HANDLER, 0L, PRESERVES_REGISTERS, LEAF_NOFP, null, exceptionCc, NOT_REEXECUTABLE, any())); + register(new HotSpotForeignCallLinkageImpl(vm, EXCEPTION_HANDLER_IN_CALLER, JUMP_ADDRESS, PRESERVES_REGISTERS, LEAF_NOFP, exceptionCc, null, NOT_REEXECUTABLE, any())); if (PreferGraalStubs.getValue()) { link(new AMD64DeoptimizationStub(providers, target, config, registerStubCall(DEOPTIMIZATION_HANDLER, REEXECUTABLE, LEAF, NO_LOCATIONS))); @@ -73,7 +90,7 @@ registerForeignCall(UPDATE_BYTES_CRC32, config.updateBytesCRC32Stub, NativeCall, PRESERVES_REGISTERS, LEAF_NOFP, NOT_REEXECUTABLE, any()); } - super.initialize(providers, config); + super.initialize(providers); } @Override
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Wed Sep 16 00:48:33 2015 +0200 @@ -313,14 +313,14 @@ @Override public Value emitCardTableShift() { Variable result = newVariable(LIRKind.value(JavaKind.Long)); - append(new AMD64HotSpotCardTableShiftOp(result, config)); + append(new AMD64HotSpotCardTableShiftOp(result, config, target().wordKind)); return result; } @Override public Value emitCardTableAddress() { Variable result = newVariable(LIRKind.value(JavaKind.Long)); - append(new AMD64HotSpotCardTableAddressOp(result, config)); + append(new AMD64HotSpotCardTableAddressOp(result, config, target().wordKind)); return result; } @@ -505,7 +505,7 @@ } private void moveValueToThread(Value v, int offset) { - LIRKind wordKind = LIRKind.value(getProviders().getCodeCache().getTarget().wordKind); + LIRKind wordKind = LIRKind.value(target().wordKind); RegisterValue thread = getProviders().getRegisters().getThreadRegister().asValue(wordKind); AMD64AddressValue address = new AMD64AddressValue(wordKind, thread, offset); emitStore(v.getLIRKind(), address, v, null); @@ -622,7 +622,7 @@ } else if (src instanceof HotSpotObjectConstant) { return new AMD64HotSpotMove.HotSpotLoadObjectConstantOp(dst, (HotSpotObjectConstant) src); } else if (src instanceof HotSpotMetaspaceConstant) { - return new AMD64HotSpotMove.HotSpotLoadMetaspaceConstantOp(dst, (HotSpotMetaspaceConstant) src); + return new AMD64HotSpotMove.HotSpotLoadMetaspaceConstantOp(dst, (HotSpotMetaspaceConstant) src, target().wordKind); } else { return super.createMoveConstant(dst, src); }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,24 +22,37 @@ */ package com.oracle.graal.hotspot.amd64; -import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; -import static jdk.internal.jvmci.code.ValueUtil.*; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.hotspot.*; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.HINT; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.ILLEGAL; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; +import static jdk.internal.jvmci.code.ValueUtil.asRegister; +import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import jdk.internal.jvmci.code.Register; +import jdk.internal.jvmci.code.StackSlotValue; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; +import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.internal.jvmci.meta.Constant; +import jdk.internal.jvmci.meta.JavaConstant; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.Value; -import com.oracle.graal.asm.*; -import com.oracle.graal.asm.amd64.*; +import com.oracle.graal.asm.Label; +import com.oracle.graal.asm.NumUtil; +import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.lir.*; +import com.oracle.graal.asm.amd64.AMD64MacroAssembler; +import com.oracle.graal.compiler.common.GraalOptions; +import com.oracle.graal.lir.LIRInstructionClass; import com.oracle.graal.lir.StandardOp.LoadConstantOp; import com.oracle.graal.lir.StandardOp.StackStoreOp; -import com.oracle.graal.lir.amd64.*; -import com.oracle.graal.lir.asm.*; +import com.oracle.graal.lir.amd64.AMD64LIRInstruction; +import com.oracle.graal.lir.amd64.AMD64Move; +import com.oracle.graal.lir.asm.CompilationResultBuilder; public class AMD64HotSpotMove { @@ -102,11 +115,13 @@ @Def({REG, STACK}) private AllocatableValue result; private final HotSpotMetaspaceConstant input; + private final JavaKind wordKind; - public HotSpotLoadMetaspaceConstantOp(AllocatableValue result, HotSpotMetaspaceConstant input) { + public HotSpotLoadMetaspaceConstantOp(AllocatableValue result, HotSpotMetaspaceConstant input, JavaKind wordKind) { super(TYPE); this.result = result; this.input = input; + this.wordKind = wordKind; } @Override @@ -118,8 +133,7 @@ if (isRegister(result)) { if (compressed) { if (isImmutable && generatePIC) { - JavaKind hostWordKind = HotSpotGraalRuntime.getHostWordKind(); - int alignment = hostWordKind.getBitCount() / Byte.SIZE; + int alignment = wordKind.getBitCount() / Byte.SIZE; // recordDataReferenceInCode forces the mov to be rip-relative masm.movl(asRegister(result), (AMD64Address) crb.recordDataReferenceInCode(JavaConstant.INT_0, alignment)); } else { @@ -128,8 +142,7 @@ } } else { if (isImmutable && generatePIC) { - JavaKind hostWordKind = HotSpotGraalRuntime.getHostWordKind(); - int alignment = hostWordKind.getBitCount() / Byte.SIZE; + int alignment = wordKind.getBitCount() / Byte.SIZE; // recordDataReferenceInCode forces the mov to be rip-relative masm.movq(asRegister(result), (AMD64Address) crb.recordDataReferenceInCode(JavaConstant.INT_0, alignment)); } else {
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Wed Sep 16 00:48:33 2015 +0200 @@ -100,8 +100,8 @@ private static final SizeEstimateStatistics CONSTANT_ESTIMATED_STATS = new SizeEstimateStatistics("ESTIMATE"); private static final SizeEstimateStatistics CONSTANT_ACTUAL_STATS = new SizeEstimateStatistics("ACTUAL"); - public SPARCHotSpotBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { - super(runtime, providers); + public SPARCHotSpotBackend(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { + super(config, runtime, providers); } private static class SizeEstimateStatistics {
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Wed Sep 16 00:48:33 2015 +0200 @@ -52,44 +52,46 @@ } @Override - public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, JVMCIBackend jvmci, HotSpotBackend host) { + public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotBackend host) { assert host == null; + HotSpotVMConfig config = jvmciRuntime.getConfig(); + JVMCIBackend jvmci = jvmciRuntime.getHostJVMCIBackend(); HotSpotRegistersProvider registers = createRegisters(); HotSpotMetaAccessProvider metaAccess = (HotSpotMetaAccessProvider) jvmci.getMetaAccess(); HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) jvmci.getCodeCache(); TargetDescription target = codeCache.getTarget(); - HotSpotConstantReflectionProvider constantReflection = new HotSpotGraalConstantReflectionProvider(runtime.getJVMCIRuntime()); - Value[] nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(runtime.getConfig(), codeCache.getRegisterConfig()); - HotSpotForeignCallsProvider foreignCalls = new SPARCHotSpotForeignCallsProvider(runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); + HotSpotConstantReflectionProvider constantReflection = new HotSpotGraalConstantReflectionProvider(jvmciRuntime); + Value[] nativeABICallerSaveRegisters = createNativeABICallerSaveRegisters(config, codeCache.getRegisterConfig()); + HotSpotForeignCallsProvider foreignCalls = new SPARCHotSpotForeignCallsProvider(jvmciRuntime, runtime, metaAccess, codeCache, nativeABICallerSaveRegisters); LoweringProvider lowerer = createLowerer(runtime, metaAccess, foreignCalls, registers, target); HotSpotStampProvider stampProvider = new HotSpotStampProvider(); Providers p = new Providers(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, null, stampProvider); HotSpotSnippetReflectionProvider snippetReflection = new HotSpotSnippetReflectionProvider(runtime); - HotSpotReplacementsImpl replacements = new HotSpotReplacementsImpl(p, snippetReflection, runtime.getConfig(), target); + HotSpotReplacementsImpl replacements = new HotSpotReplacementsImpl(p, snippetReflection, config, target); HotSpotWordTypes wordTypes = new HotSpotWordTypes(metaAccess, target.wordKind); - Plugins plugins = createGraphBuilderPlugins(runtime, metaAccess, constantReflection, foreignCalls, stampProvider, snippetReflection, replacements, wordTypes); + Plugins plugins = createGraphBuilderPlugins(config, metaAccess, constantReflection, foreignCalls, stampProvider, snippetReflection, replacements, wordTypes); replacements.setGraphBuilderPlugins(plugins); - HotSpotSuitesProvider suites = createSuites(runtime, compilerConfiguration, plugins, codeCache); + HotSpotSuitesProvider suites = createSuites(config, runtime, compilerConfiguration, plugins, codeCache); HotSpotProviders providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, foreignCalls, lowerer, replacements, suites, registers, snippetReflection, wordTypes, plugins); - return createBackend(runtime, providers); + return createBackend(config, runtime, providers); } - protected Plugins createGraphBuilderPlugins(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotConstantReflectionProvider constantReflection, + protected Plugins createGraphBuilderPlugins(HotSpotVMConfig config, HotSpotMetaAccessProvider metaAccess, HotSpotConstantReflectionProvider constantReflection, HotSpotForeignCallsProvider foreignCalls, HotSpotStampProvider stampProvider, HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, HotSpotWordTypes wordTypes) { - Plugins plugins = HotSpotGraphBuilderPlugins.create(runtime.getConfig(), wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, stampProvider, replacements); + Plugins plugins = HotSpotGraphBuilderPlugins.create(config, wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, stampProvider, replacements); SPARCGraphBuilderPlugins.register(plugins, foreignCalls); return plugins; } - protected HotSpotSuitesProvider createSuites(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, Plugins plugins, CodeCacheProvider codeCache) { - return new HotSpotSuitesProvider(new DefaultSuitesProvider(compilerConfiguration, plugins), runtime, new SPARCAddressLowering(codeCache)); + protected HotSpotSuitesProvider createSuites(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, Plugins plugins, CodeCacheProvider codeCache) { + return new HotSpotSuitesProvider(new DefaultSuitesProvider(compilerConfiguration, plugins), config, runtime, new SPARCAddressLowering(codeCache)); } - protected SPARCHotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { - return new SPARCHotSpotBackend(runtime, providers); + protected SPARCHotSpotBackend createBackend(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { + return new SPARCHotSpotBackend(config, runtime, providers); } protected HotSpotLoweringProvider createLowerer(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotForeignCallsProvider foreignCalls,
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotForeignCallsProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotForeignCallsProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,33 +22,49 @@ */ package com.oracle.graal.hotspot.sparc; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; -import static com.oracle.graal.hotspot.HotSpotBackend.*; -import static com.oracle.graal.hotspot.HotSpotBackend.Options.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.*; -import static com.oracle.graal.hotspot.HotSpotHostBackend.*; -import static jdk.internal.jvmci.meta.LocationIdentity.*; -import static jdk.internal.jvmci.meta.Value.*; -import static jdk.internal.jvmci.sparc.SPARC.*; +import static com.oracle.graal.hotspot.HotSpotBackend.EXCEPTION_HANDLER; +import static com.oracle.graal.hotspot.HotSpotBackend.EXCEPTION_HANDLER_IN_CALLER; +import static com.oracle.graal.hotspot.HotSpotBackend.Options.PreferGraalStubs; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.JUMP_ADDRESS; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.PRESERVES_REGISTERS; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.LEAF; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.LEAF_NOFP; +import static com.oracle.graal.hotspot.HotSpotHostBackend.DEOPTIMIZATION_HANDLER; +import static com.oracle.graal.hotspot.HotSpotHostBackend.UNCOMMON_TRAP_HANDLER; +import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.internal.jvmci.meta.Value.ILLEGAL; +import static jdk.internal.jvmci.sparc.SPARC.i0; +import static jdk.internal.jvmci.sparc.SPARC.i1; +import static jdk.internal.jvmci.sparc.SPARC.o0; +import static jdk.internal.jvmci.sparc.SPARC.o1; +import jdk.internal.jvmci.code.CallingConvention; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.code.RegisterValue; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.hotspot.CompilerToVM; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.LIRKind; +import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.internal.jvmci.meta.Value; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkageImpl; +import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; +import com.oracle.graal.hotspot.meta.HotSpotHostForeignCallsProvider; +import com.oracle.graal.hotspot.meta.HotSpotProviders; public class SPARCHotSpotForeignCallsProvider extends HotSpotHostForeignCallsProvider { private final Value[] nativeABICallerSaveRegisters; - public SPARCHotSpotForeignCallsProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache, Value[] nativeABICallerSaveRegisters) { - super(runtime, metaAccess, codeCache); + public SPARCHotSpotForeignCallsProvider(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache, + Value[] nativeABICallerSaveRegisters) { + super(jvmciRuntime, runtime, metaAccess, codeCache); this.nativeABICallerSaveRegisters = nativeABICallerSaveRegisters; } @Override - public void initialize(HotSpotProviders providers, HotSpotVMConfig config) { + public void initialize(HotSpotProviders providers) { TargetDescription target = providers.getCodeCache().getTarget(); JavaKind word = target.wordKind; @@ -61,15 +77,16 @@ RegisterValue incomingExceptionPc = i1.asValue(LIRKind.value(word)); CallingConvention outgoingExceptionCc = new CallingConvention(0, ILLEGAL, outgoingException, outgoingExceptionPc); CallingConvention incomingExceptionCc = new CallingConvention(0, ILLEGAL, incomingException, incomingExceptionPc); - register(new HotSpotForeignCallLinkageImpl(EXCEPTION_HANDLER, 0L, PRESERVES_REGISTERS, LEAF_NOFP, outgoingExceptionCc, incomingExceptionCc, NOT_REEXECUTABLE, any())); - register(new HotSpotForeignCallLinkageImpl(EXCEPTION_HANDLER_IN_CALLER, JUMP_ADDRESS, PRESERVES_REGISTERS, LEAF_NOFP, outgoingExceptionCc, incomingExceptionCc, NOT_REEXECUTABLE, any())); + CompilerToVM vm = jvmciRuntime.getCompilerToVM(); + register(new HotSpotForeignCallLinkageImpl(vm, EXCEPTION_HANDLER, 0L, PRESERVES_REGISTERS, LEAF_NOFP, outgoingExceptionCc, incomingExceptionCc, NOT_REEXECUTABLE, any())); + register(new HotSpotForeignCallLinkageImpl(vm, EXCEPTION_HANDLER_IN_CALLER, JUMP_ADDRESS, PRESERVES_REGISTERS, LEAF_NOFP, outgoingExceptionCc, incomingExceptionCc, NOT_REEXECUTABLE, any())); if (PreferGraalStubs.getValue()) { link(new SPARCDeoptimizationStub(providers, target, registerStubCall(DEOPTIMIZATION_HANDLER, REEXECUTABLE, LEAF, NO_LOCATIONS))); link(new SPARCUncommonTrapStub(providers, target, registerStubCall(UNCOMMON_TRAP_HANDLER, REEXECUTABLE, LEAF, NO_LOCATIONS))); } - super.initialize(providers, config); + super.initialize(providers); } @Override
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Wed Sep 16 00:48:33 2015 +0200 @@ -24,8 +24,6 @@ import static com.oracle.graal.hotspot.HotSpotBackend.FETCH_UNROLL_INFO; import static com.oracle.graal.hotspot.HotSpotBackend.UNCOMMON_TRAP; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.getHostWordKind; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.runtime; import static com.oracle.graal.lir.LIRValueUtil.asConstant; import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; @@ -232,7 +230,7 @@ operand = resultOperandFor(javaKind, input.getLIRKind()); emitMove(operand, input); } - append(new SPARCHotSpotReturnOp(operand, getStub() != null, runtime().getConfig(), getSafepointAddressValue())); + append(new SPARCHotSpotReturnOp(operand, getStub() != null, config, getSafepointAddressValue())); } @Override @@ -256,7 +254,7 @@ } private void moveValueToThread(Value v, int offset) { - LIRKind wordKind = LIRKind.value(getProviders().getCodeCache().getTarget().wordKind); + LIRKind wordKind = LIRKind.value(target().wordKind); RegisterValue thread = getProviders().getRegisters().getThreadRegister().asValue(wordKind); SPARCAddressValue pendingDeoptAddress = new SPARCImmediateAddressValue(wordKind, thread, offset); append(new StoreOp(v.getPlatformKind(), pendingDeoptAddress, load(v), null)); @@ -471,7 +469,7 @@ Register thread = getProviders().getRegisters().getThreadRegister(); Variable framePcVariable = load(framePc); Variable senderSpVariable = load(senderSp); - Variable scratchVariable = newVariable(LIRKind.value(getHostWordKind())); + Variable scratchVariable = newVariable(LIRKind.value(target().wordKind)); append(new SPARCHotSpotEnterUnpackFramesStackFrameOp(thread, config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), framePcVariable, senderSpVariable, scratchVariable, target().wordKind)); }
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Wed Sep 16 00:48:33 2015 +0200 @@ -42,7 +42,7 @@ boolean originalSetting = ExitVMOnException.getValue(); // Compile a couple classes in rt.jar String file = System.getProperty("java.home") + "/lib/rt.jar"; - HotSpotJVMCIRuntime runtime = HotSpotJVMCIRuntime.runtime(); + HotSpotJVMCIRuntimeProvider runtime = HotSpotJVMCIRuntime.runtime(); new CompileTheWorld(runtime, (HotSpotGraalCompiler) runtime.getCompiler(), file, new Config(null), 1, 5, null, null, false).compile(); assert ExitVMOnException.getValue() == originalSetting; }
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Wed Sep 16 00:48:33 2015 +0200 @@ -133,7 +133,7 @@ long graalEnv = 0L; try (MemoryUsageCloseable c = label == null ? null : new MemoryUsageCloseable(label)) { - HotSpotJVMCIRuntime runtime = HotSpotJVMCIRuntime.runtime(); + HotSpotJVMCIRuntimeProvider runtime = HotSpotJVMCIRuntime.runtime(); CompilationTask task = new CompilationTask(runtime, (HotSpotGraalCompiler) runtime.getCompiler(), method, jdk.internal.jvmci.compiler.Compiler.INVOCATION_ENTRY_BCI, graalEnv, id, false); task.runCompilation(); } @@ -150,7 +150,7 @@ int id = method.allocateCompileId(jdk.internal.jvmci.compiler.Compiler.INVOCATION_ENTRY_BCI); long graalEnv = 0L; try (AllocSpy as = AllocSpy.open(methodName)) { - HotSpotJVMCIRuntime runtime = HotSpotJVMCIRuntime.runtime(); + HotSpotJVMCIRuntimeProvider runtime = HotSpotJVMCIRuntime.runtime(); CompilationTask task = new CompilationTask(runtime, (HotSpotGraalCompiler) runtime.getCompiler(), method, jdk.internal.jvmci.compiler.Compiler.INVOCATION_ENTRY_BCI, graalEnv, id, false); task.runCompilation(); @@ -177,7 +177,7 @@ compileAndTime("simple"); compileAndTime("complex"); if (CompileTheWorld.Options.CompileTheWorldClasspath.getValue() != CompileTheWorld.SUN_BOOT_CLASS_PATH) { - HotSpotJVMCIRuntime runtime = HotSpotJVMCIRuntime.runtime(); + HotSpotJVMCIRuntimeProvider runtime = HotSpotJVMCIRuntime.runtime(); CompileTheWorld ctw = new CompileTheWorld(runtime, (HotSpotGraalCompiler) runtime.getCompiler()); try { ctw.compile();
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,34 +22,43 @@ */ package com.oracle.graal.hotspot.test; -import java.lang.ref.*; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.config; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.referentOffset; + +import java.lang.ref.WeakReference; -import com.oracle.graal.debug.*; -import com.oracle.graal.debug.Debug.*; - -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.hotspot.HotSpotInstalledCode; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.JavaConstant; +import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import org.junit.*; +import org.junit.Assert; +import org.junit.Test; -import sun.misc.*; +import sun.misc.Unsafe; -import com.oracle.graal.compiler.test.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.phases.*; -import com.oracle.graal.hotspot.replacements.*; -import com.oracle.graal.nodes.*; +import com.oracle.graal.debug.Debug; +import com.oracle.graal.debug.Debug.Scope; +import com.oracle.graal.hotspot.nodes.G1PostWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PreWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1ReferentFieldReadBarrier; +import com.oracle.graal.hotspot.nodes.SerialWriteBarrier; +import com.oracle.graal.hotspot.phases.WriteBarrierAdditionPhase; +import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; import com.oracle.graal.nodes.memory.HeapAccess.BarrierType; -import com.oracle.graal.nodes.memory.*; -import com.oracle.graal.nodes.memory.address.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.phases.*; -import com.oracle.graal.phases.common.*; -import com.oracle.graal.phases.common.inlining.*; -import com.oracle.graal.phases.common.inlining.policy.*; -import com.oracle.graal.phases.tiers.*; +import com.oracle.graal.nodes.memory.ReadNode; +import com.oracle.graal.nodes.memory.WriteNode; +import com.oracle.graal.nodes.memory.address.OffsetAddressNode; +import com.oracle.graal.nodes.spi.LoweringTool; +import com.oracle.graal.phases.OptimisticOptimizations; +import com.oracle.graal.phases.common.CanonicalizerPhase; +import com.oracle.graal.phases.common.GuardLoweringPhase; +import com.oracle.graal.phases.common.LoweringPhase; +import com.oracle.graal.phases.common.inlining.InliningPhase; +import com.oracle.graal.phases.common.inlining.policy.InlineEverythingPolicy; +import com.oracle.graal.phases.tiers.HighTierContext; +import com.oracle.graal.phases.tiers.MidTierContext; /** * The following unit tests assert the presence of write barriers for both Serial and G1 GCs. @@ -60,10 +69,10 @@ * offsets) passed as input parameters can be checked against printed output from the G1 write * barrier snippets. The runtime checks have been validated offline. */ -public class WriteBarrierAdditionTest extends GraalCompilerTest { +public class WriteBarrierAdditionTest extends HotSpotGraalCompilerTest { - private static final HotSpotVMConfig config = HotSpotGraalRuntime.runtime().getConfig(); - private static final long referentOffset = HotSpotReplacementsUtil.referentOffset(); + private final HotSpotVMConfig config = runtime().getConfig(); + private static final long referentOffset = referentOffset(); public static class Container { @@ -160,7 +169,7 @@ } public static Object test5Snippet() throws Exception { - return UNSAFE.getObject(wr, config.useCompressedOops ? 12L : 16L); + return UNSAFE.getObject(wr, config().useCompressedOops ? 12L : 16L); } /**
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierVerificationTest.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierVerificationTest.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,32 +22,50 @@ */ package com.oracle.graal.hotspot.test; -import java.util.*; +import java.util.List; +import java.util.Map; -import com.oracle.graal.debug.*; -import com.oracle.graal.debug.Debug.*; -import com.oracle.graal.debug.internal.*; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; - -import org.junit.*; +import org.junit.Assert; +import org.junit.Test; -import com.oracle.graal.compiler.test.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.phases.*; -import com.oracle.graal.hotspot.replacements.arraycopy.*; -import com.oracle.graal.nodes.*; +import com.oracle.graal.debug.Debug; +import com.oracle.graal.debug.Debug.Scope; +import com.oracle.graal.debug.DebugConfig; +import com.oracle.graal.debug.DebugConfigScope; +import com.oracle.graal.debug.DebugDumpScope; +import com.oracle.graal.debug.internal.DebugScope; +import com.oracle.graal.hotspot.nodes.G1ArrayRangePostWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1ArrayRangePreWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PostWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PreWriteBarrier; +import com.oracle.graal.hotspot.nodes.SerialArrayRangeWriteBarrier; +import com.oracle.graal.hotspot.nodes.SerialWriteBarrier; +import com.oracle.graal.hotspot.phases.WriteBarrierAdditionPhase; +import com.oracle.graal.hotspot.phases.WriteBarrierVerificationPhase; +import com.oracle.graal.hotspot.replacements.arraycopy.UnsafeArrayCopyNode; +import com.oracle.graal.nodes.AbstractBeginNode; +import com.oracle.graal.nodes.AbstractMergeNode; +import com.oracle.graal.nodes.FixedNode; +import com.oracle.graal.nodes.FixedWithNextNode; +import com.oracle.graal.nodes.LoopBeginNode; +import com.oracle.graal.nodes.LoopExitNode; +import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; -import com.oracle.graal.nodes.memory.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.phases.*; -import com.oracle.graal.phases.common.*; -import com.oracle.graal.phases.common.inlining.*; -import com.oracle.graal.phases.graph.*; +import com.oracle.graal.nodes.memory.WriteNode; +import com.oracle.graal.nodes.spi.LoweringTool; +import com.oracle.graal.phases.OptimisticOptimizations; +import com.oracle.graal.phases.common.CanonicalizerPhase; +import com.oracle.graal.phases.common.GuardLoweringPhase; +import com.oracle.graal.phases.common.LoopSafepointInsertionPhase; +import com.oracle.graal.phases.common.LoweringPhase; +import com.oracle.graal.phases.common.inlining.InliningPhase; +import com.oracle.graal.phases.graph.ReentrantNodeIterator; import com.oracle.graal.phases.graph.ReentrantNodeIterator.NodeIteratorClosure; -import com.oracle.graal.phases.tiers.*; +import com.oracle.graal.phases.tiers.HighTierContext; +import com.oracle.graal.phases.tiers.MidTierContext; /** * The following tests validate the write barrier verification phase. For every tested snippet, an @@ -56,11 +74,11 @@ * runs after the write barrier removal and depending on the result an assertion might be generated. * The tests anticipate the presence or not of an assertion generated by the verification phase. */ -public class WriteBarrierVerificationTest extends GraalCompilerTest { +public class WriteBarrierVerificationTest extends HotSpotGraalCompilerTest { public static int barrierIndex; - private final HotSpotVMConfig config = HotSpotGraalRuntime.runtime().getConfig(); + private final HotSpotVMConfig config = runtime().getConfig(); public static class Container { @@ -709,7 +727,7 @@ DebugConfig fixedConfig = debugConfig == null ? null : Debug.fixedConfig(0, 0, false, false, false, false, debugConfig.dumpHandlers(), debugConfig.verifyHandlers(), debugConfig.output()); try (DebugConfigScope s = Debug.setConfig(fixedConfig)) { ReentrantNodeIterator.apply(closure, graph.start(), false); - new WriteBarrierVerificationPhase().apply(graph); + new WriteBarrierVerificationPhase(config).apply(graph); } catch (AssertionError error) { /* * Catch assertion, test for expected one and re-throw in order to validate unit
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Wed Sep 16 00:48:33 2015 +0200 @@ -157,8 +157,10 @@ /** * Performs any remaining initialization that was deferred until the {@linkplain #getRuntime() * runtime} object was initialized and this backend was registered with it. + * + * @param jvmciRuntime */ - public void completeInitialization() { + public void completeInitialization(HotSpotJVMCIRuntime jvmciRuntime) { } /**
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackendFactory.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackendFactory.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,14 +22,14 @@ */ package com.oracle.graal.hotspot; -import com.oracle.graal.phases.tiers.*; +import jdk.internal.jvmci.code.Architecture; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.runtime.*; +import com.oracle.graal.phases.tiers.CompilerConfiguration; public interface HotSpotBackendFactory { Architecture initializeArchitecture(Architecture arch); - HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, JVMCIBackend jvmciBackend, HotSpotBackend host); + HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotBackend host); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotForeignCallLinkageImpl.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotForeignCallLinkageImpl.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,21 +22,31 @@ */ package com.oracle.graal.hotspot; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.*; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.DESTROYS_REGISTERS; -import java.util.*; +import java.util.Set; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.code.CallingConvention.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.code.CallingConvention; +import jdk.internal.jvmci.code.CallingConvention.Type; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.code.InstalledCode; +import jdk.internal.jvmci.code.Register; +import jdk.internal.jvmci.code.RegisterConfig; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.hotspot.CompilerToVM; +import jdk.internal.jvmci.hotspot.HotSpotForeignCallTarget; +import jdk.internal.jvmci.hotspot.HotSpotProxified; +import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.internal.jvmci.meta.JavaType; +import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.internal.jvmci.meta.Value; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.target.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.stubs.*; -import com.oracle.graal.word.*; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; +import com.oracle.graal.compiler.target.Backend; +import com.oracle.graal.hotspot.meta.HotSpotForeignCallsProvider; +import com.oracle.graal.hotspot.stubs.Stub; +import com.oracle.graal.word.WordBase; /** * The details required to link a HotSpot runtime or stub call. @@ -80,6 +90,8 @@ private final boolean reexecutable; + private final CompilerToVM vm; + /** * Creates a {@link HotSpotForeignCallLinkage}. * @@ -95,11 +107,12 @@ * re-executed. * @param killedLocations the memory locations killed by the call */ - public static HotSpotForeignCallLinkage create(MetaAccessProvider metaAccess, CodeCacheProvider codeCache, HotSpotForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, - long address, RegisterEffect effect, Type outgoingCcType, Type incomingCcType, Transition transition, boolean reexecutable, LocationIdentity... killedLocations) { + public static HotSpotForeignCallLinkage create(MetaAccessProvider metaAccess, CodeCacheProvider codeCache, HotSpotForeignCallsProvider foreignCalls, CompilerToVM vm, + ForeignCallDescriptor descriptor, long address, RegisterEffect effect, Type outgoingCcType, Type incomingCcType, Transition transition, boolean reexecutable, + LocationIdentity... killedLocations) { CallingConvention outgoingCc = createCallingConvention(metaAccess, codeCache, descriptor, outgoingCcType); CallingConvention incomingCc = incomingCcType == null ? null : createCallingConvention(metaAccess, codeCache, descriptor, incomingCcType); - HotSpotForeignCallLinkageImpl linkage = new HotSpotForeignCallLinkageImpl(descriptor, address, effect, transition, outgoingCc, incomingCc, reexecutable, killedLocations); + HotSpotForeignCallLinkageImpl linkage = new HotSpotForeignCallLinkageImpl(vm, descriptor, address, effect, transition, outgoingCc, incomingCc, reexecutable, killedLocations); if (outgoingCcType == Type.NativeCall) { linkage.temporaries = foreignCalls.getNativeABICallerSaveRegisters(); } @@ -130,9 +143,10 @@ } } - public HotSpotForeignCallLinkageImpl(ForeignCallDescriptor descriptor, long address, RegisterEffect effect, Transition transition, CallingConvention outgoingCallingConvention, + public HotSpotForeignCallLinkageImpl(CompilerToVM vm, ForeignCallDescriptor descriptor, long address, RegisterEffect effect, Transition transition, CallingConvention outgoingCallingConvention, CallingConvention incomingCallingConvention, boolean reexecutable, LocationIdentity... killedLocations) { super(address); + this.vm = vm; this.descriptor = descriptor; this.address = address; this.effect = effect; @@ -182,7 +196,7 @@ } public long getMaxCallTargetOffset() { - return runtime().getCompilerToVM().getMaxCallTargetOffset(address); + return vm.getMaxCallTargetOffset(address); } public ForeignCallDescriptor getDescriptor() {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompiler.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompiler.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,40 +22,59 @@ */ package com.oracle.graal.hotspot; -import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.graphbuilderconf.IntrinsicContext.CompilationContext.*; -import static jdk.internal.jvmci.code.CallingConvention.Type.*; -import static jdk.internal.jvmci.code.CodeUtil.*; +import static com.oracle.graal.compiler.common.GraalOptions.OptAssumptions; +import static com.oracle.graal.graphbuilderconf.IntrinsicContext.CompilationContext.ROOT_COMPILATION; +import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCallee; +import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention; +import jdk.internal.jvmci.code.CallingConvention; +import jdk.internal.jvmci.code.CallingConvention.Type; +import jdk.internal.jvmci.code.CompilationResult; +import jdk.internal.jvmci.compiler.Compiler; +import jdk.internal.jvmci.hotspot.CompilerToVM; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; +import jdk.internal.jvmci.meta.JavaType; +import jdk.internal.jvmci.meta.ProfilingInfo; +import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.internal.jvmci.meta.SpeculationLog; -import com.oracle.graal.compiler.*; -import com.oracle.graal.debug.*; -import com.oracle.graal.debug.internal.*; -import com.oracle.graal.graphbuilderconf.*; -import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.phases.*; -import com.oracle.graal.java.*; -import com.oracle.graal.lir.asm.*; -import com.oracle.graal.lir.phases.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.StructuredGraph.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.phases.*; -import com.oracle.graal.phases.OptimisticOptimizations.*; -import com.oracle.graal.phases.tiers.*; - -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.code.CallingConvention.*; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import com.oracle.graal.compiler.GraalCompiler; +import com.oracle.graal.debug.Debug; +import com.oracle.graal.debug.DebugConfigScope; +import com.oracle.graal.debug.DebugEnvironment; +import com.oracle.graal.debug.TTY; +import com.oracle.graal.debug.TopLevelDebugConfig; +import com.oracle.graal.debug.internal.DebugScope; +import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration; +import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; +import com.oracle.graal.graphbuilderconf.IntrinsicContext; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.meta.HotSpotSuitesProvider; +import com.oracle.graal.hotspot.phases.OnStackReplacementPhase; +import com.oracle.graal.java.GraphBuilderPhase; +import com.oracle.graal.lir.asm.CompilationResultBuilderFactory; +import com.oracle.graal.lir.phases.LIRSuites; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; +import com.oracle.graal.nodes.spi.Replacements; +import com.oracle.graal.phases.OptimisticOptimizations; +import com.oracle.graal.phases.OptimisticOptimizations.Optimization; +import com.oracle.graal.phases.PhaseSuite; +import com.oracle.graal.phases.tiers.HighTierContext; +import com.oracle.graal.phases.tiers.Suites; public class HotSpotGraalCompiler implements Compiler { private final HotSpotJVMCIRuntimeProvider jvmciRuntime; + private final HotSpotGraalRuntimeProvider graalRuntime; - HotSpotGraalCompiler(HotSpotJVMCIRuntimeProvider jvmciRuntime) { + HotSpotGraalCompiler(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalRuntimeProvider graalRuntime) { this.jvmciRuntime = jvmciRuntime; + this.graalRuntime = graalRuntime; + } + + HotSpotGraalRuntimeProvider getGraalRuntime() { + return graalRuntime; } @Override @@ -85,8 +104,8 @@ } public CompilationResult compile(ResolvedJavaMethod method, int entryBCI, boolean mustRecordMethodInlining) { - HotSpotBackend backend = HotSpotGraalRuntime.runtime().getHostBackend(); - HotSpotProviders providers = HotSpotGraalRuntime.runtime().getHostProviders(); + HotSpotBackend backend = graalRuntime.getHostBackend(); + HotSpotProviders providers = backend.getProviders(); final boolean isOSR = entryBCI != Compiler.INVOCATION_ENTRY_BCI; StructuredGraph graph = method.isNative() || isOSR ? null : getIntrinsicGraph(method, providers); @@ -167,7 +186,7 @@ } protected PhaseSuite<HighTierContext> getGraphBuilderSuite(HotSpotProviders providers, boolean isOSR) { - PhaseSuite<HighTierContext> suite = HotSpotSuitesProvider.withSimpleDebugInfoIfRequested(providers.getSuites().getDefaultGraphBuilderSuite()); + PhaseSuite<HighTierContext> suite = HotSpotSuitesProvider.withSimpleDebugInfoIfRequested(providers.getSuites().getDefaultGraphBuilderSuite(), graalRuntime); if (isOSR) { suite = suite.copy(); suite.appendPhase(new OnStackReplacementPhase());
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompilerFactory.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompilerFactory.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,14 +22,16 @@ */ package com.oracle.graal.hotspot; -import com.oracle.graal.phases.tiers.*; +import static jdk.internal.jvmci.inittimer.InitTimer.timer; +import jdk.internal.jvmci.code.Architecture; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.compiler.Compiler; +import jdk.internal.jvmci.compiler.CompilerFactory; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; +import jdk.internal.jvmci.inittimer.InitTimer; +import jdk.internal.jvmci.runtime.JVMCIRuntime; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.compiler.*; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.runtime.*; +import com.oracle.graal.phases.tiers.CompilerConfiguration; public abstract class HotSpotGraalCompilerFactory implements CompilerFactory { @@ -46,10 +48,13 @@ return backend.initializeArchitecture(arch); } + @SuppressWarnings("try") @Override public Compiler createCompiler(JVMCIRuntime runtime) { HotSpotJVMCIRuntime jvmciRuntime = (HotSpotJVMCIRuntime) runtime; - HotSpotGraalRuntime.initialize(jvmciRuntime, this); - return new HotSpotGraalCompiler(jvmciRuntime); + try (InitTimer t = timer("HotSpotGraalRuntime.<init>")) { + HotSpotGraalRuntime graalRuntime = new HotSpotGraalRuntime(jvmciRuntime, this); + return new HotSpotGraalCompiler(jvmciRuntime, graalRuntime); + } } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Wed Sep 16 00:48:33 2015 +0200 @@ -42,7 +42,6 @@ import jdk.internal.jvmci.common.JVMCIError; import jdk.internal.jvmci.hotspot.CompilerToVM; import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; import jdk.internal.jvmci.hotspot.HotSpotProxified; import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethodImpl; import jdk.internal.jvmci.hotspot.HotSpotStackFrameReference; @@ -50,7 +49,6 @@ import jdk.internal.jvmci.inittimer.InitTimer; import jdk.internal.jvmci.meta.JavaKind; import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.runtime.JVMCI; import jdk.internal.jvmci.runtime.JVMCIBackend; import com.oracle.graal.api.collections.CollectionsProvider; @@ -75,53 +73,6 @@ */ public final class HotSpotGraalRuntime implements HotSpotGraalRuntimeProvider, HotSpotProxified { - @SuppressWarnings("try") - private static class Instance { - private static final HotSpotGraalRuntime instance; - - static { - try (InitTimer t0 = timer("HotSpotGraalRuntime.<clinit>")) { - // initJvmciRuntime and initCompilerFactory are set by the JVMCI initialization code - JVMCI.initialize(); - assert initJvmciRuntime != null && initCompilerFactory != null; - - try (InitTimer t = timer("HotSpotGraalRuntime.<init>")) { - instance = new HotSpotGraalRuntime(initJvmciRuntime, initCompilerFactory); - } - - try (InitTimer t = timer("HotSpotGraalRuntime.completeInitialization")) { - // Why deferred initialization? See comment in completeInitialization(). - instance.completeInitialization(); - } - } - } - - private static void forceStaticInitializer() { - } - } - - private static HotSpotJVMCIRuntime initJvmciRuntime; - private static HotSpotGraalCompilerFactory initCompilerFactory; - - public static void initialize(HotSpotJVMCIRuntime runtime, HotSpotGraalCompilerFactory factory) { - initJvmciRuntime = runtime; - initCompilerFactory = factory; - Instance.forceStaticInitializer(); - } - - /** - * Gets the singleton {@link HotSpotGraalRuntime} object. - */ - public static HotSpotGraalRuntime runtime() { - assert Instance.instance != null; - return Instance.instance; - } - - @Override - public HotSpotJVMCIRuntimeProvider getJVMCIRuntime() { - return jvmciRuntime; - } - private static boolean checkArrayIndexScaleInvariants() { assert getArrayIndexScale(JavaKind.Byte) == 1; assert getArrayIndexScale(JavaKind.Boolean) == 1; @@ -134,26 +85,15 @@ return true; } - /** - * Gets the kind of a word value on the {@linkplain #getHostBackend() host} backend. - */ - public static JavaKind getHostWordKind() { - return runtime().getHostBackend().getTarget().wordKind; - } - private final HotSpotBackend hostBackend; private DebugValuesPrinter debugValuesPrinter; private final Map<Class<? extends Architecture>, HotSpotBackend> backends = new HashMap<>(); - private final HotSpotJVMCIRuntime jvmciRuntime; + @SuppressWarnings("try") + HotSpotGraalRuntime(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalCompilerFactory compilerFactory) { - @SuppressWarnings("try") - private HotSpotGraalRuntime(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalCompilerFactory compilerFactory) { - - this.jvmciRuntime = jvmciRuntime; - - HotSpotVMConfig config = getConfig(); + HotSpotVMConfig config = jvmciRuntime.getConfig(); CompileTheWorld.Options.overrideWithNativeOptions(config); // Only set HotSpotPrintInlining if it still has its default value (false). @@ -170,10 +110,10 @@ if (factory == null) { throw new JVMCIError("No backend available for host architecture \"%s\"", hostArchitecture); } - hostBackend = registerBackend(factory.createBackend(this, compilerConfiguration, jvmciRuntime.getHostJVMCIBackend(), null)); + hostBackend = registerBackend(factory.createBackend(this, compilerConfiguration, jvmciRuntime, null)); } - for (JVMCIBackend jvmciBackend : jvmciRuntime.getBackends().values()) { + for (JVMCIBackend jvmciBackend : jvmciRuntime.getJVMCIBackends().values()) { if (jvmciBackend == hostJvmciBackend) { continue; } @@ -187,13 +127,6 @@ registerBackend(factory.createBackend(this, compilerConfiguration, null, hostBackend)); } } - } - - /** - * Do deferred initialization. - */ - @SuppressWarnings("try") - private void completeInitialization() { if (Log.getValue() == null && !areScopedMetricsOrTimersEnabled() && Dump.getValue() == null && Verify.getValue() == null) { if (MethodFilter.getValue() != null) { @@ -226,12 +159,12 @@ // Complete initialization of backends try (InitTimer st = timer(hostBackend.getTarget().arch.getName(), ".completeInitialization")) { - hostBackend.completeInitialization(); + hostBackend.completeInitialization(jvmciRuntime); } for (HotSpotBackend backend : backends.values()) { if (backend != hostBackend) { try (InitTimer st = timer(backend.getTarget().arch.getName(), ".completeInitialization")) { - backend.completeInitialization(); + backend.completeInitialization(jvmciRuntime); } } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeAccess.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeAccess.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,17 +22,20 @@ */ package com.oracle.graal.hotspot; -import jdk.internal.jvmci.runtime.*; -import jdk.internal.jvmci.service.*; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.service.ServiceProvider; -import com.oracle.graal.api.runtime.*; +import com.oracle.graal.api.runtime.GraalRuntime; +import com.oracle.graal.api.runtime.GraalRuntimeAccess; @ServiceProvider(GraalRuntimeAccess.class) public class HotSpotGraalRuntimeAccess implements GraalRuntimeAccess { @Override public GraalRuntime getRuntime() { - JVMCI.initialize(); - return HotSpotGraalRuntime.runtime(); + HotSpotJVMCIRuntimeProvider jvmciRuntime = HotSpotJVMCIRuntime.runtime(); + HotSpotGraalCompiler compiler = (HotSpotGraalCompiler) jvmciRuntime.getCompiler(); + return compiler.getGraalRuntime(); } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,14 +22,19 @@ */ package com.oracle.graal.hotspot; -import com.oracle.graal.api.runtime.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.runtime.*; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.code.stack.StackIntrospection; +import jdk.internal.jvmci.hotspot.CompilerToVM; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.JavaType; +import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.code.stack.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import com.oracle.graal.api.runtime.GraalRuntime; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.runtime.RuntimeProvider; //JaCoCo Exclude @@ -38,7 +43,9 @@ */ public interface HotSpotGraalRuntimeProvider extends GraalRuntime, RuntimeProvider, StackIntrospection { - HotSpotJVMCIRuntimeProvider getJVMCIRuntime(); + default HotSpotJVMCIRuntimeProvider getJVMCIRuntime() { + return HotSpotJVMCIRuntime.runtime(); + } default HotSpotVMConfig getConfig() { return getJVMCIRuntime().getConfig();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalVMEventListener.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalVMEventListener.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,30 +22,23 @@ */ package com.oracle.graal.hotspot; -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.Map; -import java.util.TreeMap; - import jdk.internal.jvmci.code.CompilationResult; import jdk.internal.jvmci.code.InstalledCode; import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; import jdk.internal.jvmci.hotspot.HotSpotVMEventListener; import jdk.internal.jvmci.service.ServiceProvider; import com.oracle.graal.debug.Debug; -import com.oracle.graal.debug.TTY; @ServiceProvider(HotSpotVMEventListener.class) public class HotSpotGraalVMEventListener implements HotSpotVMEventListener { @Override public void notifyShutdown() { - HotSpotGraalRuntime.runtime().shutdown(); + HotSpotGraalCompiler compiler = (HotSpotGraalCompiler) HotSpotJVMCIRuntime.runtime().getCompiler(); + HotSpotGraalRuntime graalRuntime = (HotSpotGraalRuntime) compiler.getGraalRuntime(); + graalRuntime.shutdown(); } @Override @@ -57,75 +50,4 @@ Debug.log("%s", codeCache.disassemble(installedCode)); } } - - @Override - public void completeInitialization(HotSpotJVMCIRuntime runtime) { - if (Boolean.valueOf(System.getProperty("jvmci.printconfig")) || Boolean.valueOf(System.getProperty("graal.printconfig"))) { - printConfig(runtime.getConfig()); - } - } - - private static void printConfig(HotSpotVMConfig config) { - Field[] fields = config.getClass().getDeclaredFields(); - Map<String, Field> sortedFields = new TreeMap<>(); - for (Field f : fields) { - if (!f.isSynthetic() && !Modifier.isStatic(f.getModifiers())) { - f.setAccessible(true); - sortedFields.put(f.getName(), f); - } - } - for (Field f : sortedFields.values()) { - try { - TTY.print("%9s %-40s = %s%n", f.getType().getSimpleName(), f.getName(), pretty(f.get(config))); - } catch (Exception e) { - } - } - } - - private static String pretty(Object value) { - if (value == null) { - return "null"; - } - - Class<?> klass = value.getClass(); - if (value instanceof String) { - return "\"" + value + "\""; - } else if (value instanceof Method) { - return "method \"" + ((Method) value).getName() + "\""; - } else if (value instanceof Class<?>) { - return "class \"" + ((Class<?>) value).getSimpleName() + "\""; - } else if (value instanceof Integer) { - if ((Integer) value < 10) { - return value.toString(); - } - return value + " (0x" + Integer.toHexString((Integer) value) + ")"; - } else if (value instanceof Long) { - if ((Long) value < 10 && (Long) value > -10) { - return value + "l"; - } - return value + "l (0x" + Long.toHexString((Long) value) + "l)"; - } else if (klass.isArray()) { - StringBuilder str = new StringBuilder(); - int dimensions = 0; - while (klass.isArray()) { - dimensions++; - klass = klass.getComponentType(); - } - int length = Array.getLength(value); - str.append(klass.getSimpleName()).append('[').append(length).append(']'); - for (int i = 1; i < dimensions; i++) { - str.append("[]"); - } - str.append(" {"); - for (int i = 0; i < length; i++) { - str.append(pretty(Array.get(value, i))); - if (i < length - 1) { - str.append(", "); - } - } - str.append('}'); - return str.toString(); - } - return value.toString(); - } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Wed Sep 16 00:48:33 2015 +0200 @@ -60,25 +60,24 @@ */ protected final int pagesToBang; - public HotSpotHostBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { + public HotSpotHostBackend(HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { super(runtime, providers); - this.pagesToBang = runtime.getConfig().useStackBanging ? runtime.getConfig().stackShadowPages : 0; + this.pagesToBang = config.useStackBanging ? config.stackShadowPages : 0; } @Override @SuppressWarnings("try") - public void completeInitialization() { + public void completeInitialization(HotSpotJVMCIRuntime jvmciRuntime) { final HotSpotProviders providers = getProviders(); - HotSpotVMConfig config = getRuntime().getConfig(); HotSpotHostForeignCallsProvider foreignCalls = (HotSpotHostForeignCallsProvider) providers.getForeignCalls(); final HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer(); HotSpotReplacementsImpl replacements = (HotSpotReplacementsImpl) providers.getReplacements(); try (InitTimer st = timer("foreignCalls.initialize")) { - foreignCalls.initialize(providers, config); + foreignCalls.initialize(providers); } try (InitTimer st = timer("lowerer.initialize")) { - lowerer.initialize(providers, config); + lowerer.initialize(providers, jvmciRuntime.getConfig()); } // Install intrinsics.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,15 +22,25 @@ */ package com.oracle.graal.hotspot; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.code.StackSlotValue; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.internal.jvmci.meta.DeoptimizationAction; +import jdk.internal.jvmci.meta.DeoptimizationReason; +import jdk.internal.jvmci.meta.Value; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.nodes.DeoptimizationFetchUnrollInfoCallNode; +import com.oracle.graal.hotspot.nodes.EnterUnpackFramesStackFrameNode; +import com.oracle.graal.hotspot.nodes.LeaveCurrentStackFrameNode; +import com.oracle.graal.hotspot.nodes.LeaveDeoptimizedStackFrameNode; +import com.oracle.graal.hotspot.nodes.LeaveUnpackFramesStackFrameNode; +import com.oracle.graal.hotspot.nodes.PushInterpreterFrameNode; +import com.oracle.graal.hotspot.nodes.SaveAllRegistersNode; +import com.oracle.graal.hotspot.nodes.UncommonTrapCallNode; import com.oracle.graal.lir.StandardOp.SaveRegistersOp; -import com.oracle.graal.lir.gen.*; +import com.oracle.graal.lir.gen.LIRGenerator; +import com.oracle.graal.lir.gen.LIRGeneratorTool; /** * This interface defines the contract a HotSpot backend LIR generator needs to fulfill in addition
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,40 +22,129 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.*; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; -import static com.oracle.graal.hotspot.replacements.NewObjectSnippets.*; +import static com.oracle.graal.compiler.common.GraalOptions.AlwaysInlineVTableStubs; +import static com.oracle.graal.compiler.common.GraalOptions.InlineVTableStubs; +import static com.oracle.graal.compiler.common.GraalOptions.OmitHotExceptionStacktrace; +import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.OSR_MIGRATION_END; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.CLASS_KLASS_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.CLASS_MIRROR_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.HUB_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.HUB_WRITE_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.KLASS_LAYOUT_HELPER_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.OBJ_ARRAY_KLASS_ELEMENT_KLASS_LOCATION; +import static com.oracle.graal.hotspot.replacements.NewObjectSnippets.INIT_LOCATION; import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; -import static jdk.internal.jvmci.meta.LocationIdentity.*; +import static jdk.internal.jvmci.meta.LocationIdentity.any; -import java.lang.ref.*; +import java.lang.ref.Reference; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.code.CallingConvention; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotObjectConstantImpl; +import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaField; +import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.JavaConstant; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.JavaType; +import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.internal.jvmci.meta.ResolvedJavaField; +import jdk.internal.jvmci.meta.ResolvedJavaType; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.graph.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.nodes.type.*; -import com.oracle.graal.hotspot.replacements.*; -import com.oracle.graal.hotspot.replacements.arraycopy.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.debug.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.memory.*; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; +import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; +import com.oracle.graal.compiler.common.type.ObjectStamp; +import com.oracle.graal.compiler.common.type.Stamp; +import com.oracle.graal.compiler.common.type.StampFactory; +import com.oracle.graal.graph.Node; +import com.oracle.graal.graph.NodeInputList; +import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; +import com.oracle.graal.hotspot.nodes.CompressionNode; +import com.oracle.graal.hotspot.nodes.ComputeObjectAddressNode; +import com.oracle.graal.hotspot.nodes.G1ArrayRangePostWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1ArrayRangePreWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PostWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PreWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1ReferentFieldReadBarrier; +import com.oracle.graal.hotspot.nodes.GetObjectAddressNode; +import com.oracle.graal.hotspot.nodes.HotSpotDirectCallTargetNode; +import com.oracle.graal.hotspot.nodes.HotSpotIndirectCallTargetNode; +import com.oracle.graal.hotspot.nodes.SerialArrayRangeWriteBarrier; +import com.oracle.graal.hotspot.nodes.SerialWriteBarrier; +import com.oracle.graal.hotspot.nodes.type.KlassPointerStamp; +import com.oracle.graal.hotspot.nodes.type.MethodPointerStamp; +import com.oracle.graal.hotspot.nodes.type.NarrowOopStamp; +import com.oracle.graal.hotspot.replacements.AssertionSnippets; +import com.oracle.graal.hotspot.replacements.CheckCastDynamicSnippets; +import com.oracle.graal.hotspot.replacements.ClassGetHubNode; +import com.oracle.graal.hotspot.replacements.HubGetClassNode; +import com.oracle.graal.hotspot.replacements.InstanceOfSnippets; +import com.oracle.graal.hotspot.replacements.KlassLayoutHelperNode; +import com.oracle.graal.hotspot.replacements.LoadExceptionObjectSnippets; +import com.oracle.graal.hotspot.replacements.MonitorSnippets; +import com.oracle.graal.hotspot.replacements.NewObjectSnippets; +import com.oracle.graal.hotspot.replacements.UnsafeLoadSnippets; +import com.oracle.graal.hotspot.replacements.WriteBarrierSnippets; +import com.oracle.graal.hotspot.replacements.arraycopy.ArrayCopyNode; +import com.oracle.graal.hotspot.replacements.arraycopy.ArrayCopySlowPathNode; +import com.oracle.graal.hotspot.replacements.arraycopy.ArrayCopySnippets; +import com.oracle.graal.hotspot.replacements.arraycopy.ArrayCopyUnrollNode; +import com.oracle.graal.hotspot.replacements.arraycopy.UnsafeArrayCopySnippets; +import com.oracle.graal.nodes.AbstractBeginNode; +import com.oracle.graal.nodes.AbstractDeoptimizeNode; +import com.oracle.graal.nodes.ConstantNode; +import com.oracle.graal.nodes.FixedNode; +import com.oracle.graal.nodes.Invoke; +import com.oracle.graal.nodes.LoweredCallTargetNode; +import com.oracle.graal.nodes.ParameterNode; +import com.oracle.graal.nodes.StartNode; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.UnwindNode; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.calc.AddNode; +import com.oracle.graal.nodes.calc.FloatingNode; +import com.oracle.graal.nodes.calc.IntegerDivNode; +import com.oracle.graal.nodes.calc.IntegerRemNode; +import com.oracle.graal.nodes.calc.RemNode; +import com.oracle.graal.nodes.calc.UnsignedDivNode; +import com.oracle.graal.nodes.calc.UnsignedRemNode; +import com.oracle.graal.nodes.debug.VerifyHeapNode; +import com.oracle.graal.nodes.extended.BytecodeExceptionNode; +import com.oracle.graal.nodes.extended.ForeignCallNode; +import com.oracle.graal.nodes.extended.GetClassNode; +import com.oracle.graal.nodes.extended.GuardingNode; +import com.oracle.graal.nodes.extended.LoadHubNode; +import com.oracle.graal.nodes.extended.LoadMethodNode; +import com.oracle.graal.nodes.extended.OSRLocalNode; +import com.oracle.graal.nodes.extended.OSRStartNode; +import com.oracle.graal.nodes.extended.StoreHubNode; +import com.oracle.graal.nodes.extended.UnsafeLoadNode; +import com.oracle.graal.nodes.java.CheckCastDynamicNode; +import com.oracle.graal.nodes.java.ClassIsAssignableFromNode; +import com.oracle.graal.nodes.java.DynamicNewArrayNode; +import com.oracle.graal.nodes.java.DynamicNewInstanceNode; +import com.oracle.graal.nodes.java.InstanceOfDynamicNode; +import com.oracle.graal.nodes.java.InstanceOfNode; +import com.oracle.graal.nodes.java.LoadExceptionObjectNode; +import com.oracle.graal.nodes.java.MethodCallTargetNode; +import com.oracle.graal.nodes.java.MonitorExitNode; +import com.oracle.graal.nodes.java.NewArrayNode; +import com.oracle.graal.nodes.java.NewInstanceNode; +import com.oracle.graal.nodes.java.NewMultiArrayNode; +import com.oracle.graal.nodes.java.RawMonitorEnterNode; +import com.oracle.graal.nodes.memory.FloatingReadNode; import com.oracle.graal.nodes.memory.HeapAccess.BarrierType; -import com.oracle.graal.nodes.memory.address.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; -import com.oracle.graal.replacements.*; -import com.oracle.graal.replacements.nodes.*; +import com.oracle.graal.nodes.memory.ReadNode; +import com.oracle.graal.nodes.memory.WriteNode; +import com.oracle.graal.nodes.memory.address.AddressNode; +import com.oracle.graal.nodes.spi.LoweringProvider; +import com.oracle.graal.nodes.spi.LoweringTool; +import com.oracle.graal.nodes.spi.StampProvider; +import com.oracle.graal.nodes.type.StampTool; +import com.oracle.graal.replacements.DefaultJavaLoweringProvider; +import com.oracle.graal.replacements.nodes.AssertionNode; /** * HotSpot implementation of {@link LoweringProvider}.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,12 +22,13 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.service.*; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.code.CompilationResult; +import jdk.internal.jvmci.code.InstalledCode; +import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; +import jdk.internal.jvmci.service.ServiceProvider; -import com.oracle.graal.code.*; +import com.oracle.graal.code.DisassemblerProvider; /** * HotSpot implementation of {@link DisassemblerProvider}. @@ -41,11 +42,7 @@ @Override public String disassembleInstalledCode(CodeCacheProvider codeCache, CompilationResult compResult, InstalledCode code) { - if (code.isValid()) { - long codeBlob = ((HotSpotInstalledCode) code).getAddress(); - return runtime().getCompilerToVM().disassembleCodeBlob(codeBlob); - } - return null; + return ((HotSpotCodeCacheProvider) codeCache).disassemble(code); } public String getName() {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,21 +22,30 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.*; -import static jdk.internal.jvmci.code.CallingConvention.Type.*; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.PRESERVES_REGISTERS; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition.NOT_LEAF; +import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCall; +import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCallee; -import java.util.*; +import java.util.HashMap; +import java.util.Map; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.code.CallingConvention; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.hotspot.CompilerToVM; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.internal.jvmci.meta.MetaAccessProvider; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.hotspot.*; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition; -import com.oracle.graal.hotspot.stubs.*; -import com.oracle.graal.word.*; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkageImpl; +import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; +import com.oracle.graal.hotspot.stubs.ForeignCallStub; +import com.oracle.graal.hotspot.stubs.Stub; +import com.oracle.graal.word.Word; /** * HotSpot implementation of {@link HotSpotForeignCallsProvider}. @@ -50,13 +59,15 @@ public static final ForeignCallDescriptor TEST_DEOPTIMIZE_CALL_INT = new ForeignCallDescriptor("test_deoptimize_call_int", int.class, int.class); + protected final HotSpotJVMCIRuntimeProvider jvmciRuntime; protected final HotSpotGraalRuntimeProvider runtime; protected final Map<ForeignCallDescriptor, HotSpotForeignCallLinkage> foreignCalls = new HashMap<>(); protected final MetaAccessProvider metaAccess; protected final CodeCacheProvider codeCache; - public HotSpotForeignCallsProviderImpl(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache) { + public HotSpotForeignCallsProviderImpl(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache) { + this.jvmciRuntime = jvmciRuntime; this.runtime = runtime; this.metaAccess = metaAccess; this.codeCache = codeCache; @@ -82,7 +93,8 @@ * @param killedLocations the memory locations killed by the stub call */ public HotSpotForeignCallLinkage registerStubCall(ForeignCallDescriptor descriptor, boolean reexecutable, Transition transition, LocationIdentity... killedLocations) { - return register(HotSpotForeignCallLinkageImpl.create(metaAccess, codeCache, this, descriptor, 0L, PRESERVES_REGISTERS, JavaCall, JavaCallee, transition, reexecutable, killedLocations)); + CompilerToVM vm = jvmciRuntime.getCompilerToVM(); + return register(HotSpotForeignCallLinkageImpl.create(metaAccess, codeCache, this, vm, descriptor, 0L, PRESERVES_REGISTERS, JavaCall, JavaCallee, transition, reexecutable, killedLocations)); } /** @@ -104,7 +116,8 @@ Class<?> resultType = descriptor.getResultType(); assert address != 0; assert transition != NOT_LEAF || resultType.isPrimitive() || Word.class.isAssignableFrom(resultType) : "non-leaf foreign calls must return objects in thread local storage: " + descriptor; - return register(HotSpotForeignCallLinkageImpl.create(metaAccess, codeCache, this, descriptor, address, effect, outgoingCcType, null, transition, reexecutable, killedLocations)); + CompilerToVM vm = jvmciRuntime.getCompilerToVM(); + return register(HotSpotForeignCallLinkageImpl.create(metaAccess, codeCache, this, vm, descriptor, address, effect, outgoingCcType, null, transition, reexecutable, killedLocations)); } /** @@ -122,7 +135,7 @@ */ public void linkForeignCall(HotSpotProviders providers, ForeignCallDescriptor descriptor, long address, boolean prependThread, Transition transition, boolean reexecutable, LocationIdentity... killedLocations) { - ForeignCallStub stub = new ForeignCallStub(runtime, providers, address, descriptor, prependThread, transition, reexecutable, killedLocations); + ForeignCallStub stub = new ForeignCallStub(jvmciRuntime, providers, address, descriptor, prependThread, transition, reexecutable, killedLocations); HotSpotForeignCallLinkage linkage = stub.getLinkage(); HotSpotForeignCallLinkage targetLinkage = stub.getTargetLinkage(); linkage.setCompiledStub(stub);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraalConstantReflectionProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraalConstantReflectionProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,19 +22,29 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import static com.oracle.graal.hotspot.meta.HotSpotGraalConstantReflectionProvider.ImmutableCodeLazy.*; -import static com.oracle.graal.hotspot.stubs.SnippetStub.*; +import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; +import static com.oracle.graal.hotspot.meta.HotSpotGraalConstantReflectionProvider.ImmutableCodeLazy.isCalledForSnippets; +import static com.oracle.graal.hotspot.stubs.SnippetStub.SnippetGraphUnderConstruction; -import java.util.*; +import java.util.ArrayList; +import java.util.List; -import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaField; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.JavaConstant; +import jdk.internal.jvmci.meta.JavaField; +import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.internal.jvmci.meta.ResolvedJavaField; +import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.internal.jvmci.runtime.JVMCI; -import com.oracle.graal.graph.*; -import com.oracle.graal.replacements.*; +import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.replacements.ReplacementsImpl; +import com.oracle.graal.replacements.SnippetCounter; +import com.oracle.graal.replacements.SnippetTemplate; import com.oracle.graal.replacements.SnippetTemplate.Arguments; /** @@ -49,7 +59,8 @@ @Override public JavaConstant readConstantFieldValue(JavaField field, JavaConstant receiver) { - assert !ImmutableCode.getValue() || isCalledForSnippets() || SnippetGraphUnderConstruction.get() != null || FieldReadEnabledInImmutableCode.get() == Boolean.TRUE : receiver; + MetaAccessProvider metaAccess = runtime.getHostJVMCIBackend().getMetaAccess(); + assert !ImmutableCode.getValue() || isCalledForSnippets(metaAccess) || SnippetGraphUnderConstruction.get() != null || FieldReadEnabledInImmutableCode.get() == Boolean.TRUE : receiver; return super.readConstantFieldValue(field, receiver); } @@ -108,9 +119,8 @@ * {@link #readConstantFieldValue(JavaField, JavaConstant)} should be only called for * snippets or replacements. */ - static boolean isCalledForSnippets() { + static boolean isCalledForSnippets(MetaAccessProvider metaAccess) { assert ImmutableCode.getValue(); - MetaAccessProvider metaAccess = runtime().getHostProviders().getMetaAccess(); ResolvedJavaMethod makeGraphMethod = null; ResolvedJavaMethod initMethod = null; try { @@ -145,7 +155,7 @@ private static final List<ResolvedJavaField> embeddableFields = new ArrayList<>(); static { try { - MetaAccessProvider metaAccess = runtime().getHostProviders().getMetaAccess(); + MetaAccessProvider metaAccess = JVMCI.getRuntime().getHostJVMCIBackend().getMetaAccess(); embeddableFields.add(metaAccess.lookupJavaField(Boolean.class.getDeclaredField("TRUE"))); embeddableFields.add(metaAccess.lookupJavaField(Boolean.class.getDeclaredField("FALSE")));
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotHostForeignCallsProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotHostForeignCallsProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -64,8 +64,8 @@ */ public abstract class HotSpotHostForeignCallsProvider extends HotSpotForeignCallsProviderImpl { - public HotSpotHostForeignCallsProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache) { - super(runtime, metaAccess, codeCache); + public HotSpotHostForeignCallsProvider(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache) { + super(jvmciRuntime, runtime, metaAccess, codeCache); } protected static void link(Stub stub) { @@ -166,8 +166,8 @@ } } - public void initialize(HotSpotProviders providers, HotSpotVMConfig c) { - + public void initialize(HotSpotProviders providers) { + HotSpotVMConfig c = jvmciRuntime.getConfig(); if (!PreferGraalStubs.getValue()) { registerForeignCall(DEOPTIMIZATION_HANDLER, c.handleDeoptStub, NativeCall, PRESERVES_REGISTERS, LEAF_NOFP, REEXECUTABLE, NO_LOCATIONS); registerForeignCall(UNCOMMON_TRAP_HANDLER, c.uncommonTrapStub, NativeCall, PRESERVES_REGISTERS, LEAF_NOFP, REEXECUTABLE, NO_LOCATIONS);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,23 +22,37 @@ */ package com.oracle.graal.hotspot.meta; -import static com.oracle.graal.compiler.common.GraalOptions.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.options.*; -import jdk.internal.jvmci.options.DerivedOptionValue.*; +import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; +import static com.oracle.graal.compiler.common.GraalOptions.VerifyPhases; +import jdk.internal.jvmci.hotspot.CompilerToVM; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.options.DerivedOptionValue; +import jdk.internal.jvmci.options.DerivedOptionValue.OptionSupplier; -import com.oracle.graal.graphbuilderconf.*; +import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.DebugInfoMode; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.phases.*; -import com.oracle.graal.java.*; -import com.oracle.graal.lir.phases.*; -import com.oracle.graal.nodes.*; +import com.oracle.graal.hotspot.HotSpotBackend; +import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; +import com.oracle.graal.hotspot.HotSpotInstructionProfiling; +import com.oracle.graal.hotspot.phases.AheadOfTimeVerificationPhase; +import com.oracle.graal.hotspot.phases.LoadJavaMirrorWithKlassPhase; +import com.oracle.graal.hotspot.phases.WriteBarrierAdditionPhase; +import com.oracle.graal.hotspot.phases.WriteBarrierVerificationPhase; +import com.oracle.graal.java.GraphBuilderPhase; +import com.oracle.graal.lir.phases.LIRSuites; +import com.oracle.graal.nodes.EncodedGraph; +import com.oracle.graal.nodes.GraphEncoder; +import com.oracle.graal.nodes.SimplifyingGraphDecoder; +import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; -import com.oracle.graal.phases.*; -import com.oracle.graal.phases.common.*; +import com.oracle.graal.phases.BasePhase; +import com.oracle.graal.phases.PhaseSuite; +import com.oracle.graal.phases.common.AddressLoweringPhase; import com.oracle.graal.phases.common.AddressLoweringPhase.AddressLowering; -import com.oracle.graal.phases.tiers.*; +import com.oracle.graal.phases.common.ExpandLogicPhase; +import com.oracle.graal.phases.tiers.HighTierContext; +import com.oracle.graal.phases.tiers.Suites; +import com.oracle.graal.phases.tiers.SuitesProvider; /** * HotSpot implementation of {@link SuitesProvider}. @@ -48,6 +62,7 @@ protected final DerivedOptionValue<Suites> defaultSuites; protected final PhaseSuite<HighTierContext> defaultGraphBuilderSuite; private final DerivedOptionValue<LIRSuites> defaultLIRSuites; + protected final HotSpotVMConfig config; protected final HotSpotGraalRuntimeProvider runtime; private final AddressLowering addressLowering; @@ -73,7 +88,8 @@ } - public HotSpotSuitesProvider(SuitesProvider defaultSuitesProvider, HotSpotGraalRuntimeProvider runtime, AddressLowering addressLowering) { + public HotSpotSuitesProvider(SuitesProvider defaultSuitesProvider, HotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, AddressLowering addressLowering) { + this.config = config; this.runtime = runtime; this.addressLowering = addressLowering; this.defaultSuitesProvider = defaultSuitesProvider; @@ -95,15 +111,15 @@ if (ImmutableCode.getValue()) { // lowering introduces class constants, therefore it must be after lowering - ret.getHighTier().appendPhase(new LoadJavaMirrorWithKlassPhase(runtime.getConfig().classMirrorOffset, runtime.getConfig().useCompressedOops ? runtime.getConfig().getOopEncoding() : null)); + ret.getHighTier().appendPhase(new LoadJavaMirrorWithKlassPhase(config.classMirrorOffset, config.useCompressedOops ? config.getOopEncoding() : null)); if (VerifyPhases.getValue()) { ret.getHighTier().appendPhase(new AheadOfTimeVerificationPhase()); } } - ret.getMidTier().appendPhase(new WriteBarrierAdditionPhase(runtime.getConfig())); + ret.getMidTier().appendPhase(new WriteBarrierAdditionPhase(config)); if (VerifyPhases.getValue()) { - ret.getMidTier().appendPhase(new WriteBarrierVerificationPhase()); + ret.getMidTier().appendPhase(new WriteBarrierVerificationPhase(config)); } ret.getLowTier().findPhase(ExpandLogicPhase.class).add(new AddressLoweringPhase(addressLowering)); @@ -146,10 +162,11 @@ * {@linkplain CompilerToVM#shouldDebugNonSafepoints() requests} it. * * @param gbs the current graph builder suite + * @param graalRuntime * @return a possibly modified graph builder suite */ - public static PhaseSuite<HighTierContext> withSimpleDebugInfoIfRequested(PhaseSuite<HighTierContext> gbs) { - if (HotSpotGraalRuntime.runtime().getCompilerToVM().shouldDebugNonSafepoints()) { + public static PhaseSuite<HighTierContext> withSimpleDebugInfoIfRequested(PhaseSuite<HighTierContext> gbs, HotSpotGraalRuntimeProvider graalRuntime) { + if (graalRuntime.getCompilerToVM().shouldDebugNonSafepoints()) { PhaseSuite<HighTierContext> newGbs = gbs.copy(); GraphBuilderPhase graphBuilderPhase = (GraphBuilderPhase) newGbs.findPhase(GraphBuilderPhase.class).previous(); GraphBuilderConfiguration graphBuilderConfig = graphBuilderPhase.getGraphBuilderConfig();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java Wed Sep 16 00:48:33 2015 +0200 @@ -23,23 +23,33 @@ package com.oracle.graal.hotspot.phases; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; +import java.util.Iterator; -import java.util.*; - -import jdk.internal.jvmci.common.*; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import com.oracle.graal.graph.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.replacements.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.memory.*; +import com.oracle.graal.graph.Node; +import com.oracle.graal.graph.NodeFlood; +import com.oracle.graal.hotspot.nodes.ArrayRangeWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PostWriteBarrier; +import com.oracle.graal.hotspot.nodes.ObjectWriteBarrier; +import com.oracle.graal.hotspot.nodes.SerialWriteBarrier; +import com.oracle.graal.nodes.DeoptimizingNode; +import com.oracle.graal.nodes.FixedWithNextNode; +import com.oracle.graal.nodes.LoopBeginNode; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.extended.ArrayRangeWriteNode; +import com.oracle.graal.nodes.java.LoweredAtomicReadAndWriteNode; +import com.oracle.graal.nodes.java.LoweredCompareAndSwapNode; +import com.oracle.graal.nodes.memory.FixedAccessNode; +import com.oracle.graal.nodes.memory.HeapAccess; import com.oracle.graal.nodes.memory.HeapAccess.BarrierType; -import com.oracle.graal.nodes.memory.address.*; -import com.oracle.graal.nodes.type.*; -import com.oracle.graal.phases.*; +import com.oracle.graal.nodes.memory.ReadNode; +import com.oracle.graal.nodes.memory.WriteNode; +import com.oracle.graal.nodes.memory.address.OffsetAddressNode; +import com.oracle.graal.nodes.type.StampTool; +import com.oracle.graal.phases.Phase; /** * Verification phase that checks if, for every write, at least one write barrier is present at all @@ -50,12 +60,18 @@ */ public class WriteBarrierVerificationPhase extends Phase { + private final HotSpotVMConfig config; + + public WriteBarrierVerificationPhase(HotSpotVMConfig config) { + this.config = config; + } + @Override protected void run(StructuredGraph graph) { processWrites(graph); } - private static void processWrites(StructuredGraph graph) { + private void processWrites(StructuredGraph graph) { for (Node node : graph.getNodes()) { if (isObjectWrite(node) || isObjectArrayRangeWrite(node)) { validateWrite(node); @@ -63,7 +79,7 @@ } } - private static void validateWrite(Node write) { + private void validateWrite(Node write) { /* * The currently validated write is checked in order to discover if it has an appropriate * attached write barrier. @@ -92,10 +108,14 @@ } } - private static boolean hasAttachedBarrier(FixedWithNextNode node) { + private boolean useG1GC() { + return config.useG1GC; + } + + private boolean hasAttachedBarrier(FixedWithNextNode node) { final Node next = node.next(); final Node previous = node.predecessor(); - final boolean validatePreBarrier = HotSpotReplacementsUtil.useG1GC() && (isObjectWrite(node) || !((ArrayRangeWriteNode) node).isInitialization()); + final boolean validatePreBarrier = useG1GC() && (isObjectWrite(node) || !((ArrayRangeWriteNode) node).isInitialization()); if (isObjectWrite(node)) { return (isObjectBarrier(node, next) || StampTool.isPointerAlwaysNull(getValueWritten(node))) && (!validatePreBarrier || isObjectBarrier(node, previous)); } else if (isObjectArrayRangeWrite(node)) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AESCryptSubstitutions.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AESCryptSubstitutions.java Wed Sep 16 00:48:33 2015 +0200 @@ -24,9 +24,9 @@ import static com.oracle.graal.hotspot.HotSpotBackend.DECRYPT_BLOCK; import static com.oracle.graal.hotspot.HotSpotBackend.ENCRYPT_BLOCK; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayBaseOffset; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.VERY_SLOW_PATH_PROBABILITY; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; +import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; import java.lang.reflect.Field; @@ -86,9 +86,9 @@ checkArgs(in, inOffset, out, outOffset); Object realReceiver = PiNode.piCastNonNull(rcvr, AESCryptClass); Object kObject = UnsafeLoadNode.load(realReceiver, kOffset, JavaKind.Object, LocationIdentity.any()); - Pointer kAddr = Word.objectToTrackedPointer(kObject).add(arrayBaseOffset(JavaKind.Byte)); - Word inAddr = Word.unsigned(ComputeObjectAddressNode.get(in, arrayBaseOffset(JavaKind.Byte) + inOffset)); - Word outAddr = Word.unsigned(ComputeObjectAddressNode.get(out, arrayBaseOffset(JavaKind.Byte) + outOffset)); + Pointer kAddr = Word.objectToTrackedPointer(kObject).add(getArrayBaseOffset(JavaKind.Byte)); + Word inAddr = Word.unsigned(ComputeObjectAddressNode.get(in, getArrayBaseOffset(JavaKind.Byte) + inOffset)); + Word outAddr = Word.unsigned(ComputeObjectAddressNode.get(out, getArrayBaseOffset(JavaKind.Byte) + outOffset)); if (encrypt) { encryptBlockStub(ENCRYPT_BLOCK, inAddr, outAddr, kAddr); } else {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CRC32Substitutions.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CRC32Substitutions.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,20 +22,20 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayBaseOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.config; -import java.util.zip.*; +import java.util.zip.CRC32; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.meta.JavaKind; -import com.oracle.graal.api.replacements.*; -import com.oracle.graal.compiler.common.spi.*; +import com.oracle.graal.api.replacements.Fold; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.word.*; +import com.oracle.graal.hotspot.nodes.ComputeObjectAddressNode; +import com.oracle.graal.nodes.extended.ForeignCallNode; +import com.oracle.graal.word.Word; // JaCoCo Exclude @@ -49,7 +49,7 @@ */ @Fold private static long crcTableAddress() { - return runtime().getConfig().crcTableAddress; + return config().crcTableAddress; } static int update(int crc, int b) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CipherBlockChainingSubstitutions.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CipherBlockChainingSubstitutions.java Wed Sep 16 00:48:33 2015 +0200 @@ -24,8 +24,8 @@ import static com.oracle.graal.hotspot.HotSpotBackend.DECRYPT; import static com.oracle.graal.hotspot.HotSpotBackend.ENCRYPT; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayBaseOffset; import static com.oracle.graal.hotspot.replacements.UnsafeAccess.UNSAFE; +import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; import jdk.internal.jvmci.common.JVMCIError; import jdk.internal.jvmci.meta.JavaKind; import jdk.internal.jvmci.meta.LocationIdentity; @@ -103,10 +103,10 @@ Object realReceiver = PiNode.piCastNonNull(rcvr, cipherBlockChainingClass); Object kObject = UnsafeLoadNode.load(embeddedCipher, AESCryptSubstitutions.kOffset, JavaKind.Object, LocationIdentity.any()); Object rObject = UnsafeLoadNode.load(realReceiver, rOffset, JavaKind.Object, LocationIdentity.any()); - Pointer kAddr = Word.objectToTrackedPointer(kObject).add(arrayBaseOffset(JavaKind.Byte)); - Pointer rAddr = Word.objectToTrackedPointer(rObject).add(arrayBaseOffset(JavaKind.Byte)); - Word inAddr = Word.unsigned(ComputeObjectAddressNode.get(in, arrayBaseOffset(JavaKind.Byte) + inOffset)); - Word outAddr = Word.unsigned(ComputeObjectAddressNode.get(out, arrayBaseOffset(JavaKind.Byte) + outOffset)); + Pointer kAddr = Word.objectToTrackedPointer(kObject).add(getArrayBaseOffset(JavaKind.Byte)); + Pointer rAddr = Word.objectToTrackedPointer(rObject).add(getArrayBaseOffset(JavaKind.Byte)); + Word inAddr = Word.unsigned(ComputeObjectAddressNode.get(in, getArrayBaseOffset(JavaKind.Byte) + inOffset)); + Word outAddr = Word.unsigned(ComputeObjectAddressNode.get(out, getArrayBaseOffset(JavaKind.Byte) + outOffset)); if (encrypt) { encryptAESCryptStub(ENCRYPT, inAddr, outAddr, kAddr, rAddr, inLength); } else {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,7 +22,6 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.runtime; import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.IDENTITY_HASHCODE; import static com.oracle.graal.hotspot.meta.HotSpotForeignCallsProviderImpl.VERIFY_OOP; import static com.oracle.graal.hotspot.replacements.UnsafeAccess.UNSAFE; @@ -33,6 +32,8 @@ import jdk.internal.jvmci.code.CodeUtil; import jdk.internal.jvmci.code.Register; import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectTypeImpl; @@ -132,6 +133,10 @@ } } + public static HotSpotJVMCIRuntimeProvider runtime() { + return HotSpotJVMCIRuntime.runtime(); + } + @Fold public static HotSpotVMConfig config() { return runtime().getConfig(); @@ -337,12 +342,12 @@ @Fold public static JavaKind getWordKind() { - return runtime().getTarget().wordKind; + return runtime().getHostJVMCIBackend().getCodeCache().getTarget().wordKind; } @Fold public static int wordSize() { - return runtime().getTarget().wordSize; + return runtime().getHostJVMCIBackend().getCodeCache().getTarget().wordSize; } @Fold
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,35 +22,78 @@ */ package com.oracle.graal.hotspot.replacements; -import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; -import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; -import static com.oracle.graal.replacements.SnippetTemplate.*; -import static jdk.internal.jvmci.code.MemoryBarriers.*; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.*; -import jdk.internal.jvmci.meta.*; +import static com.oracle.graal.compiler.common.GraalOptions.SnippetCounters; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayBaseOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayIndexScale; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.cardTableShift; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.cardTableStart; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.dirtyCardValue; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.g1CardQueueBufferOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.g1CardQueueIndexOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.g1SATBQueueBufferOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.g1SATBQueueIndexOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.g1SATBQueueMarkingOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.g1YoungCardValue; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.generatePIC; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.isImmutableCode; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.logOfHeapRegionGrainBytes; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.registerAsWord; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.verifyOop; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.verifyOops; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.wordSize; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.FREQUENT_PROBABILITY; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.LIKELY_PROBABILITY; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.NOT_FREQUENT_PROBABILITY; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; +import static com.oracle.graal.replacements.SnippetTemplate.DEFAULT_REPLACER; +import static jdk.internal.jvmci.code.MemoryBarriers.STORE_LOAD; +import jdk.internal.jvmci.code.Register; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.LocationIdentity; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.compiler.common.spi.*; +import com.oracle.graal.compiler.common.GraalOptions; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.nodes.type.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.meta.HotSpotRegistersProvider; +import com.oracle.graal.hotspot.nodes.CompressionNode; +import com.oracle.graal.hotspot.nodes.G1ArrayRangePostWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1ArrayRangePreWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PostWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1PreWriteBarrier; +import com.oracle.graal.hotspot.nodes.G1ReferentFieldReadBarrier; +import com.oracle.graal.hotspot.nodes.GetObjectAddressNode; +import com.oracle.graal.hotspot.nodes.SerialArrayRangeWriteBarrier; +import com.oracle.graal.hotspot.nodes.SerialWriteBarrier; +import com.oracle.graal.hotspot.nodes.type.NarrowOopStamp; +import com.oracle.graal.nodes.NamedLocationIdentity; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.extended.FixedValueAnchorNode; +import com.oracle.graal.nodes.extended.ForeignCallNode; +import com.oracle.graal.nodes.extended.MembarNode; +import com.oracle.graal.nodes.extended.NullCheckNode; import com.oracle.graal.nodes.memory.HeapAccess.BarrierType; -import com.oracle.graal.nodes.memory.address.*; +import com.oracle.graal.nodes.memory.address.AddressNode; import com.oracle.graal.nodes.memory.address.AddressNode.Address; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.replacements.*; +import com.oracle.graal.nodes.memory.address.OffsetAddressNode; +import com.oracle.graal.nodes.spi.LoweringTool; +import com.oracle.graal.replacements.Log; +import com.oracle.graal.replacements.Snippet; import com.oracle.graal.replacements.Snippet.ConstantParameter; +import com.oracle.graal.replacements.SnippetCounter; import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates; import com.oracle.graal.replacements.SnippetTemplate.Arguments; import com.oracle.graal.replacements.SnippetTemplate.SnippetInfo; -import com.oracle.graal.replacements.nodes.*; -import com.oracle.graal.word.*; +import com.oracle.graal.replacements.Snippets; +import com.oracle.graal.replacements.nodes.DirectObjectStoreNode; +import com.oracle.graal.replacements.nodes.DirectStoreNode; +import com.oracle.graal.word.Pointer; +import com.oracle.graal.word.Unsigned; +import com.oracle.graal.word.Word; public class WriteBarrierSnippets implements Snippets {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,35 +22,62 @@ */ package com.oracle.graal.hotspot.replacements.arraycopy; -import static com.oracle.graal.compiler.common.GraalOptions.*; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; -import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; - -import java.lang.reflect.*; -import java.util.*; - -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import static com.oracle.graal.compiler.common.GraalOptions.SnippetCounters; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.KLASS_SUPER_CHECK_OFFSET_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.OBJ_ARRAY_KLASS_ELEMENT_KLASS_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayBaseOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayClassElementOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayIndexScale; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.layoutHelperElementTypePrimitiveInPlace; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.loadHub; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.readLayoutHelper; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.superCheckOffsetOffset; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.FAST_PATH_PROBABILITY; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.SLOW_PATH_PROBABILITY; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; +import java.lang.reflect.Method; +import java.util.EnumMap; +import java.util.Map; -import com.oracle.graal.api.directives.*; -import com.oracle.graal.api.replacements.*; -import com.oracle.graal.graph.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.type.*; -import com.oracle.graal.hotspot.word.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.java.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.nodes.type.*; -import com.oracle.graal.replacements.*; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; +import jdk.internal.jvmci.meta.DeoptimizationAction; +import jdk.internal.jvmci.meta.DeoptimizationReason; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.internal.jvmci.meta.ResolvedJavaType; + +import com.oracle.graal.api.directives.GraalDirectives; +import com.oracle.graal.api.replacements.Fold; +import com.oracle.graal.graph.Node; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.nodes.type.KlassPointerStamp; +import com.oracle.graal.hotspot.word.KlassPointer; +import com.oracle.graal.nodes.CallTargetNode; +import com.oracle.graal.nodes.ConstantNode; +import com.oracle.graal.nodes.DeoptimizeNode; +import com.oracle.graal.nodes.Invoke; +import com.oracle.graal.nodes.InvokeNode; +import com.oracle.graal.nodes.NamedLocationIdentity; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.extended.UnsafeLoadNode; +import com.oracle.graal.nodes.java.ArrayLengthNode; +import com.oracle.graal.nodes.spi.LoweringTool; +import com.oracle.graal.nodes.type.StampTool; +import com.oracle.graal.replacements.Snippet; import com.oracle.graal.replacements.Snippet.ConstantParameter; +import com.oracle.graal.replacements.SnippetCounter; +import com.oracle.graal.replacements.SnippetTemplate; import com.oracle.graal.replacements.SnippetTemplate.Arguments; import com.oracle.graal.replacements.SnippetTemplate.SnippetInfo; -import com.oracle.graal.replacements.nodes.*; -import com.oracle.graal.word.*; +import com.oracle.graal.replacements.Snippets; +import com.oracle.graal.replacements.nodes.BasicArrayCopyNode; +import com.oracle.graal.replacements.nodes.DirectObjectStoreNode; +import com.oracle.graal.replacements.nodes.ExplodeLoopNode; +import com.oracle.graal.word.Word; public class ArrayCopySnippets implements Snippets {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,36 +22,51 @@ */ package com.oracle.graal.hotspot.replacements.arraycopy; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; -import static com.oracle.graal.nodes.NamedLocationIdentity.*; -import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; -import static com.oracle.graal.replacements.SnippetTemplate.*; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.meta.*; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayBaseOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayIndexScale; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.layoutHelperHeaderSizeMask; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.layoutHelperHeaderSizeShift; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.layoutHelperLog2ElementSizeMask; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.layoutHelperLog2ElementSizeShift; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.runtime; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.wordSize; +import static com.oracle.graal.nodes.NamedLocationIdentity.any; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.NOT_FREQUENT_PROBABILITY; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; +import static com.oracle.graal.replacements.SnippetTemplate.DEFAULT_REPLACER; +import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; +import jdk.internal.jvmci.code.TargetDescription; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.LocationIdentity; -import com.oracle.graal.api.replacements.*; -import com.oracle.graal.asm.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.phases.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.replacements.*; +import com.oracle.graal.api.replacements.Fold; +import com.oracle.graal.asm.NumUtil; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.phases.WriteBarrierAdditionPhase; +import com.oracle.graal.nodes.NamedLocationIdentity; +import com.oracle.graal.nodes.extended.UnsafeCopyNode; +import com.oracle.graal.nodes.extended.UnsafeLoadNode; +import com.oracle.graal.nodes.spi.LoweringTool; +import com.oracle.graal.replacements.Snippet; +import com.oracle.graal.replacements.SnippetTemplate; import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates; import com.oracle.graal.replacements.SnippetTemplate.Arguments; import com.oracle.graal.replacements.SnippetTemplate.SnippetInfo; -import com.oracle.graal.replacements.nodes.*; -import com.oracle.graal.word.*; +import com.oracle.graal.replacements.Snippets; +import com.oracle.graal.replacements.nodes.DirectObjectStoreNode; +import com.oracle.graal.word.ObjectAccess; +import com.oracle.graal.word.Unsigned; +import com.oracle.graal.word.Word; /** * As opposed to {@link ArrayCopySnippets}, these Snippets do <b>not</b> perform store checks. */ public class UnsafeArrayCopySnippets implements Snippets { - private static final boolean supportsUnalignedMemoryAccess = runtime().getTarget().arch.supportsUnalignedMemoryAccess(); + + private static final boolean supportsUnalignedMemoryAccess = runtime().getHostJVMCIBackend().getTarget().arch.supportsUnalignedMemoryAccess(); private static final JavaKind VECTOR_KIND = JavaKind.Long; - private static final long VECTOR_SIZE = arrayIndexScale(VECTOR_KIND); + private static final long VECTOR_SIZE = getArrayIndexScale(VECTOR_KIND); private static void vectorizedCopy(Object src, int srcPos, Object dest, int destPos, int length, JavaKind baseKind, LocationIdentity locationIdentity) { int arrayBaseOffset = arrayBaseOffset(baseKind);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,25 +22,44 @@ */ package com.oracle.graal.hotspot.stubs; -import com.oracle.graal.debug.*; - -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; -import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.*; -import static jdk.internal.jvmci.code.CallingConvention.Type.*; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.DESTROYS_REGISTERS; +import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.PRESERVES_REGISTERS; +import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCall; +import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCallee; +import static jdk.internal.jvmci.code.CallingConvention.Type.NativeCall; +import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.internal.jvmci.hotspot.HotSpotSignature; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.meta.JavaMethod; +import jdk.internal.jvmci.meta.JavaType; +import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.internal.jvmci.meta.Signature; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.hotspot.*; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; +import com.oracle.graal.compiler.common.type.Stamp; +import com.oracle.graal.compiler.common.type.StampFactory; +import com.oracle.graal.debug.Debug; +import com.oracle.graal.debug.JavaMethodContext; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage.Transition; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.replacements.*; -import com.oracle.graal.nodes.*; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkageImpl; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.nodes.StubForeignCallNode; +import com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil; +import com.oracle.graal.nodes.ConstantNode; +import com.oracle.graal.nodes.InvokeNode; +import com.oracle.graal.nodes.ParameterNode; +import com.oracle.graal.nodes.ReturnNode; +import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; -import com.oracle.graal.replacements.*; -import com.oracle.graal.replacements.nodes.*; -import com.oracle.graal.word.*; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.replacements.GraphKit; +import com.oracle.graal.replacements.nodes.ReadRegisterNode; +import com.oracle.graal.word.Word; +import com.oracle.graal.word.WordTypes; /** * A {@linkplain #getGraph() generated} stub for a {@link Transition non-leaf} foreign call from @@ -53,7 +72,7 @@ */ public class ForeignCallStub extends Stub { - private final HotSpotGraalRuntimeProvider runtime; + private final HotSpotJVMCIRuntimeProvider jvmciRuntime; /** * The target of the call. @@ -78,16 +97,16 @@ * be re-executed. * @param killedLocations the memory locations killed by the stub call */ - public ForeignCallStub(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers, long address, ForeignCallDescriptor descriptor, boolean prependThread, Transition transition, + public ForeignCallStub(HotSpotJVMCIRuntimeProvider runtime, HotSpotProviders providers, long address, ForeignCallDescriptor descriptor, boolean prependThread, Transition transition, boolean reexecutable, LocationIdentity... killedLocations) { - super(providers, HotSpotForeignCallLinkageImpl.create(providers.getMetaAccess(), providers.getCodeCache(), providers.getForeignCalls(), descriptor, 0L, PRESERVES_REGISTERS, JavaCall, - JavaCallee, transition, reexecutable, killedLocations)); - this.runtime = runtime; + super(providers, HotSpotForeignCallLinkageImpl.create(providers.getMetaAccess(), providers.getCodeCache(), providers.getForeignCalls(), runtime.getCompilerToVM(), descriptor, 0L, + PRESERVES_REGISTERS, JavaCall, JavaCallee, transition, reexecutable, killedLocations)); + this.jvmciRuntime = runtime; this.prependThread = prependThread; Class<?>[] targetParameterTypes = createTargetParameters(descriptor); ForeignCallDescriptor targetSig = new ForeignCallDescriptor(descriptor.getName() + ":C", descriptor.getResultType(), targetParameterTypes); - target = HotSpotForeignCallLinkageImpl.create(providers.getMetaAccess(), providers.getCodeCache(), providers.getForeignCalls(), targetSig, address, DESTROYS_REGISTERS, NativeCall, NativeCall, - transition, reexecutable, killedLocations); + target = HotSpotForeignCallLinkageImpl.create(providers.getMetaAccess(), providers.getCodeCache(), providers.getForeignCalls(), runtime.getCompilerToVM(), targetSig, address, + DESTROYS_REGISTERS, NativeCall, NativeCall, transition, reexecutable, killedLocations); } /** @@ -126,7 +145,7 @@ for (int i = 0; i < arguments.length; i++) { parameters[i] = metaAccess.lookupJavaType(arguments[i]); } - return new HotSpotSignature(runtime.getJVMCIRuntime(), metaAccess.lookupJavaType(d.getResultType()), parameters); + return new HotSpotSignature(jvmciRuntime, metaAccess.lookupJavaType(d.getResultType()), parameters); } public String getName() {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewInstanceStub.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewInstanceStub.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,29 +22,69 @@ */ package com.oracle.graal.hotspot.stubs; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; -import static com.oracle.graal.hotspot.nodes.DirectCompareAndSwapNode.*; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; -import static com.oracle.graal.hotspot.stubs.StubUtil.*; -import static com.oracle.graal.nodes.extended.BranchProbabilityNode.*; +import static com.oracle.graal.hotspot.nodes.DirectCompareAndSwapNode.compareAndSwap; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.HEAP_END_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.HEAP_TOP_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.PROTOTYPE_MARK_WORD_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.TLAB_FAST_REFILL_WASTE_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.TLAB_NOF_REFILLS_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.TLAB_REFILL_WASTE_LIMIT_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.TLAB_SIZE_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.TLAB_SLOW_ALLOCATIONS_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.TLAB_THREAD_ALLOCATED_BYTES_LOCATION; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.arrayBaseOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.getAndClearObjectResult; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.heapEndAddress; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.heapTopAddress; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.initializeTlab; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.inlineContiguousAllocationSupported; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.isInstanceKlassFullyInitialized; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.loadKlassLayoutHelperIntrinsic; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.log2WordSize; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.prototypeMarkWordOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.readTlabEnd; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.readTlabStart; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.readTlabTop; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.registerAsWord; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.threadAllocatedBytesOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.threadTlabSizeOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabAlignmentReserveInHeapWords; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabFastRefillWasteOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabIntArrayMarkWord; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabNumberOfRefillsOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabRefillWasteIncrement; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabRefillWasteLimitOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabSlowAllocationsOffset; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.tlabStats; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.useG1GC; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.useTLAB; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.wordSize; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.writeTlabTop; +import static com.oracle.graal.hotspot.stubs.StubUtil.handlePendingException; +import static com.oracle.graal.hotspot.stubs.StubUtil.newDescriptor; +import static com.oracle.graal.hotspot.stubs.StubUtil.printf; +import static com.oracle.graal.hotspot.stubs.StubUtil.verifyObject; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.FAST_PATH_PROBABILITY; +import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; +import jdk.internal.jvmci.code.Register; +import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; +import jdk.internal.jvmci.meta.JavaKind; -import com.oracle.graal.api.replacements.*; -import com.oracle.graal.compiler.common.spi.*; +import com.oracle.graal.api.replacements.Fold; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.nodes.type.*; -import com.oracle.graal.hotspot.replacements.*; -import com.oracle.graal.hotspot.word.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.memory.address.*; -import com.oracle.graal.replacements.*; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.nodes.StubForeignCallNode; +import com.oracle.graal.hotspot.nodes.type.KlassPointerStamp; +import com.oracle.graal.hotspot.replacements.NewObjectSnippets; +import com.oracle.graal.hotspot.word.KlassPointer; +import com.oracle.graal.nodes.ConstantNode; +import com.oracle.graal.nodes.memory.address.RawAddressNode; +import com.oracle.graal.replacements.Snippet; import com.oracle.graal.replacements.Snippet.ConstantParameter; -import com.oracle.graal.word.*; +import com.oracle.graal.word.Word; /** * Stub implementing the fast path for TLAB refill during instance class allocation. This stub is
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,31 +22,50 @@ */ package com.oracle.graal.hotspot.stubs; -import static com.oracle.graal.compiler.GraalCompiler.*; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; +import static com.oracle.graal.compiler.GraalCompiler.emitBackEnd; +import static com.oracle.graal.compiler.GraalCompiler.emitFrontEnd; +import static com.oracle.graal.compiler.GraalCompiler.getProfilingInfo; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.ListIterator; +import java.util.Set; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.common.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.code.CallingConvention; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.code.CompilationResult; +import jdk.internal.jvmci.code.InstalledCode; +import jdk.internal.jvmci.code.Register; +import jdk.internal.jvmci.code.RegisterConfig; +import jdk.internal.jvmci.common.JVMCIError; +import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; +import jdk.internal.jvmci.hotspot.HotSpotCompiledCode; +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import com.oracle.graal.compiler.target.*; -import com.oracle.graal.debug.*; +import com.oracle.graal.compiler.target.Backend; +import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope; -import com.oracle.graal.debug.internal.*; -import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.lir.asm.*; -import com.oracle.graal.lir.phases.*; +import com.oracle.graal.debug.internal.DebugScope; +import com.oracle.graal.hotspot.HotSpotBackend; +import com.oracle.graal.hotspot.HotSpotCompiledRuntimeStub; +import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; +import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; +import com.oracle.graal.hotspot.meta.HotSpotProviders; +import com.oracle.graal.hotspot.meta.HotSpotRuntimeStub; +import com.oracle.graal.hotspot.nodes.StubStartNode; +import com.oracle.graal.lir.asm.CompilationResultBuilderFactory; +import com.oracle.graal.lir.phases.LIRPhase; +import com.oracle.graal.lir.phases.LIRSuites; import com.oracle.graal.lir.phases.PostAllocationOptimizationPhase.PostAllocationOptimizationContext; -import com.oracle.graal.lir.profiling.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.phases.*; -import com.oracle.graal.phases.schedule.*; -import com.oracle.graal.phases.tiers.*; +import com.oracle.graal.lir.profiling.MoveProfiling; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.phases.OptimisticOptimizations; +import com.oracle.graal.phases.PhaseSuite; +import com.oracle.graal.phases.schedule.SchedulePhase; +import com.oracle.graal.phases.tiers.Suites; //JaCoCo Exclude @@ -194,7 +213,7 @@ HotSpotRuntimeStub installedCode = new HotSpotRuntimeStub(stub); HotSpotCompiledCode hsCompResult = new HotSpotCompiledRuntimeStub(compResult); - HotSpotGraalRuntime runtime = runtime(); + HotSpotGraalRuntimeProvider runtime = ((HotSpotBackend) backend).getRuntime(); int result = runtime.getCompilerToVM().installCode(backend.getTarget(), hsCompResult, installedCode, null); HotSpotVMConfig config = runtime.getConfig(); if (result != config.codeInstallResultOk) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/StubUtil.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/StubUtil.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,26 +22,35 @@ */ package com.oracle.graal.hotspot.stubs; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import static com.oracle.graal.hotspot.nodes.CStringNode.*; -import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; -import static com.oracle.graal.word.Word.*; -import static jdk.internal.jvmci.meta.DeoptimizationReason.*; +import static com.oracle.graal.hotspot.nodes.CStringNode.cstring; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.clearPendingException; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.config; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.getAndClearObjectResult; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.loadHubIntrinsic; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.verifyOops; +import static com.oracle.graal.word.Word.unsigned; +import static jdk.internal.jvmci.meta.DeoptimizationReason.RuntimeConstraint; -import java.lang.reflect.*; -import java.util.*; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.List; -import jdk.internal.jvmci.meta.*; +import jdk.internal.jvmci.meta.DeoptimizationAction; -import com.oracle.graal.api.replacements.*; -import com.oracle.graal.compiler.common.spi.*; +import com.oracle.graal.api.replacements.Fold; +import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.hotspot.word.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.replacements.*; -import com.oracle.graal.word.*; +import com.oracle.graal.hotspot.nodes.DeoptimizeCallerNode; +import com.oracle.graal.hotspot.nodes.SnippetAnchorNode; +import com.oracle.graal.hotspot.nodes.StubForeignCallNode; +import com.oracle.graal.hotspot.nodes.VMErrorNode; +import com.oracle.graal.hotspot.word.KlassPointer; +import com.oracle.graal.nodes.extended.GuardingNode; +import com.oracle.graal.replacements.Log; +import com.oracle.graal.word.Pointer; +import com.oracle.graal.word.Word; //JaCoCo Exclude @@ -95,7 +104,7 @@ */ @Fold public static boolean cAssertionsEnabled() { - return runtime().getConfig().cAssertions; + return config().cAssertions; } @NodeIntrinsic(StubForeignCallNode.class)
--- a/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64OptimizedCallTargetInstrumentationFactory.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64OptimizedCallTargetInstrumentationFactory.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,31 +22,35 @@ */ package com.oracle.graal.truffle.hotspot.amd64; -import jdk.internal.jvmci.amd64.*; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.code.CallingConvention.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.meta.*; -import jdk.internal.jvmci.service.*; +import jdk.internal.jvmci.amd64.AMD64; +import jdk.internal.jvmci.code.CallingConvention.Type; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.code.CompilationResult; +import jdk.internal.jvmci.code.InstalledCode; +import jdk.internal.jvmci.code.Register; +import jdk.internal.jvmci.meta.JavaKind; +import jdk.internal.jvmci.service.ServiceProvider; -import com.oracle.graal.asm.*; -import com.oracle.graal.asm.amd64.*; -import com.oracle.graal.asm.amd64.AMD64Assembler.*; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.lir.asm.*; -import com.oracle.graal.lir.framemap.*; -import com.oracle.graal.truffle.*; -import com.oracle.graal.truffle.hotspot.*; +import com.oracle.graal.asm.Assembler; +import com.oracle.graal.asm.Label; +import com.oracle.graal.asm.amd64.AMD64Address; +import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; +import com.oracle.graal.asm.amd64.AMD64MacroAssembler; +import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; +import com.oracle.graal.lir.asm.CompilationResultBuilder; +import com.oracle.graal.lir.asm.FrameContext; +import com.oracle.graal.lir.framemap.FrameMap; +import com.oracle.graal.truffle.hotspot.OptimizedCallTargetInstrumentation; +import com.oracle.graal.truffle.hotspot.OptimizedCallTargetInstrumentationFactory; @ServiceProvider(OptimizedCallTargetInstrumentationFactory.class) -public class AMD64OptimizedCallTargetInstrumentationFactory implements OptimizedCallTargetInstrumentationFactory { +public class AMD64OptimizedCallTargetInstrumentationFactory extends OptimizedCallTargetInstrumentationFactory { public CompilationResultBuilder createBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, FrameContext frameContext, CompilationResult compilationResult) { - return new OptimizedCallTargetInstrumentation(codeCache, foreignCalls, frameMap, asm, frameContext, compilationResult) { + return new OptimizedCallTargetInstrumentation(codeCache, foreignCalls, frameMap, asm, frameContext, compilationResult, config, registers) { @Override - protected void injectTailCallCode(HotSpotVMConfig config, HotSpotRegistersProvider registers) { + protected void injectTailCallCode() { @SuppressWarnings("hiding") AMD64MacroAssembler asm = (AMD64MacroAssembler) this.asm; Register thisRegister = codeCache.getRegisterConfig().getCallingConventionRegisters(Type.JavaCall, JavaKind.Object)[0]; @@ -67,6 +71,7 @@ }; } + @Override public String getArchitecture() { return "AMD64"; }
--- a/graal/com.oracle.graal.truffle.hotspot.sparc/src/com/oracle/graal/truffle/hotspot/sparc/SPARCOptimizedCallTargetInstumentationFactory.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot.sparc/src/com/oracle/graal/truffle/hotspot/sparc/SPARCOptimizedCallTargetInstumentationFactory.java Wed Sep 16 00:48:33 2015 +0200 @@ -22,33 +22,37 @@ */ package com.oracle.graal.truffle.hotspot.sparc; -import static com.oracle.graal.asm.sparc.SPARCAssembler.BranchPredict.*; -import static com.oracle.graal.asm.sparc.SPARCAssembler.CC.*; -import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.*; -import static jdk.internal.jvmci.code.CallingConvention.Type.*; -import static jdk.internal.jvmci.meta.JavaKind.*; -import jdk.internal.jvmci.code.*; -import jdk.internal.jvmci.hotspot.*; -import jdk.internal.jvmci.service.*; +import static com.oracle.graal.asm.sparc.SPARCAssembler.BranchPredict.PREDICT_NOT_TAKEN; +import static com.oracle.graal.asm.sparc.SPARCAssembler.CC.Xcc; +import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.Equal; +import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCall; +import static jdk.internal.jvmci.meta.JavaKind.Object; +import jdk.internal.jvmci.code.CodeCacheProvider; +import jdk.internal.jvmci.code.CompilationResult; +import jdk.internal.jvmci.code.InstalledCode; +import jdk.internal.jvmci.code.Register; +import jdk.internal.jvmci.service.ServiceProvider; -import com.oracle.graal.asm.*; -import com.oracle.graal.asm.sparc.*; +import com.oracle.graal.asm.Assembler; +import com.oracle.graal.asm.Label; +import com.oracle.graal.asm.sparc.SPARCAddress; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister; -import com.oracle.graal.compiler.common.spi.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.lir.asm.*; -import com.oracle.graal.lir.framemap.*; -import com.oracle.graal.truffle.*; -import com.oracle.graal.truffle.hotspot.*; +import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; +import com.oracle.graal.lir.asm.CompilationResultBuilder; +import com.oracle.graal.lir.asm.FrameContext; +import com.oracle.graal.lir.framemap.FrameMap; +import com.oracle.graal.truffle.hotspot.OptimizedCallTargetInstrumentation; +import com.oracle.graal.truffle.hotspot.OptimizedCallTargetInstrumentationFactory; @ServiceProvider(OptimizedCallTargetInstrumentationFactory.class) -public class SPARCOptimizedCallTargetInstumentationFactory implements OptimizedCallTargetInstrumentationFactory { +public class SPARCOptimizedCallTargetInstumentationFactory extends OptimizedCallTargetInstrumentationFactory { public CompilationResultBuilder createBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, FrameContext frameContext, CompilationResult compilationResult) { - return new OptimizedCallTargetInstrumentation(codeCache, foreignCalls, frameMap, asm, frameContext, compilationResult) { + return new OptimizedCallTargetInstrumentation(codeCache, foreignCalls, frameMap, asm, frameContext, compilationResult, config, registers) { @Override - protected void injectTailCallCode(HotSpotVMConfig config, HotSpotRegistersProvider registers) { + protected void injectTailCallCode() { @SuppressWarnings("hiding") SPARCMacroAssembler asm = (SPARCMacroAssembler) this.asm; try (ScratchRegister scratch = asm.getScratchRegister()) { @@ -69,6 +73,7 @@ }; } + @Override public String getArchitecture() { return "SPARC"; }
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Wed Sep 16 00:48:33 2015 +0200 @@ -72,7 +72,8 @@ import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; import com.oracle.graal.graphbuilderconf.InvocationPlugins; -import com.oracle.graal.hotspot.HotSpotGraalRuntime; +import com.oracle.graal.hotspot.HotSpotBackend; +import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; import com.oracle.graal.hotspot.meta.HotSpotProviders; import com.oracle.graal.java.GraphBuilderPhase; import com.oracle.graal.lir.asm.CompilationResultBuilderFactory; @@ -94,7 +95,6 @@ import com.oracle.graal.truffle.GraalTruffleRuntime; import com.oracle.graal.truffle.InterpreterOnlyCompilationPolicy; import com.oracle.graal.truffle.OptimizedCallTarget; -import com.oracle.graal.truffle.OptimizedCallTargetInstrumentationFactory; import com.oracle.graal.truffle.TruffleCallBoundary; import com.oracle.graal.truffle.TruffleCompiler; import com.oracle.graal.truffle.TruffleCompilerOptions; @@ -123,7 +123,7 @@ private HotSpotTruffleRuntime() { setDontInlineCallBoundaryMethod(); - lookupCallMethods(getGraalProviders().getMetaAccess()); + lookupCallMethods(getHotSpotProviders().getMetaAccess()); installDefaultListeners(); @@ -191,7 +191,7 @@ } public static void setDontInlineCallBoundaryMethod() { - Providers providers = getGraalProviders(); + Providers providers = getHotSpotProviders(); MetaAccessProvider metaAccess = providers.getMetaAccess(); ResolvedJavaType type = metaAccess.lookupJavaType(OptimizedCallTarget.class); for (ResolvedJavaMethod method : type.getDeclaredMethods()) { @@ -203,7 +203,7 @@ @SuppressWarnings("try") public static void installOptimizedCallTargetCallMethod() { - Providers providers = getGraalProviders(); + Providers providers = getHotSpotProviders(); MetaAccessProvider metaAccess = providers.getMetaAccess(); ResolvedJavaType type = metaAccess.lookupJavaType(OptimizedCallTarget.class); for (ResolvedJavaMethod method : type.getDeclaredMethods()) { @@ -222,6 +222,7 @@ private static CompilationResultBuilderFactory getOptimizedCallTargetInstrumentationFactory(String arch) { for (OptimizedCallTargetInstrumentationFactory factory : Services.load(OptimizedCallTargetInstrumentationFactory.class)) { if (factory.getArchitecture().equals(arch)) { + factory.init(getHotSpotGraalRuntime().getConfig(), getHotSpotProviders().getRegisters()); return factory; } } @@ -230,7 +231,7 @@ } private static CompilationResult compileMethod(ResolvedJavaMethod javaMethod) { - HotSpotProviders providers = getGraalProviders(); + HotSpotProviders providers = getHotSpotProviders(); SuitesProvider suitesProvider = providers.getSuites(); Suites suites = suitesProvider.createSuites(); LIRSuites lirSuites = suitesProvider.createLIRSuites(); @@ -239,25 +240,33 @@ MetaAccessProvider metaAccess = providers.getMetaAccess(); Plugins plugins = new Plugins(new InvocationPlugins(metaAccess)); - boolean infoPoints = HotSpotGraalRuntime.runtime().getCompilerToVM().shouldDebugNonSafepoints(); + boolean infoPoints = getHotSpotGraalRuntime().getCompilerToVM().shouldDebugNonSafepoints(); GraphBuilderConfiguration config = infoPoints ? GraphBuilderConfiguration.getInfopointEagerDefault(plugins) : GraphBuilderConfiguration.getEagerDefault(plugins); new GraphBuilderPhase.Instance(metaAccess, providers.getStampProvider(), providers.getConstantReflection(), config, OptimisticOptimizations.ALL, null).apply(graph); PhaseSuite<HighTierContext> graphBuilderSuite = getGraphBuilderSuite(suitesProvider); CallingConvention cc = getCallingConvention(providers.getCodeCache(), Type.JavaCallee, graph.method(), false); - Backend backend = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend(); + Backend backend = getHotSpotBackend(); CompilationResultBuilderFactory factory = getOptimizedCallTargetInstrumentationFactory(backend.getTarget().arch.getName()); return compileGraph(graph, cc, javaMethod, providers, backend, graphBuilderSuite, OptimisticOptimizations.ALL, getProfilingInfo(graph), suites, lirSuites, new CompilationResult(), factory); } - private static HotSpotProviders getGraalProviders() { + private static HotSpotBackend getHotSpotBackend() { RuntimeProvider runtimeProvider = Graal.getRequiredCapability(RuntimeProvider.class); - return (HotSpotProviders) runtimeProvider.getHostBackend().getProviders(); + return (HotSpotBackend) runtimeProvider.getHostBackend(); + } + + private static HotSpotGraalRuntimeProvider getHotSpotGraalRuntime() { + return getHotSpotBackend().getRuntime(); + } + + private static HotSpotProviders getHotSpotProviders() { + return getHotSpotBackend().getProviders(); } private static PhaseSuite<HighTierContext> getGraphBuilderSuite(SuitesProvider suitesProvider) { PhaseSuite<HighTierContext> graphBuilderSuite = suitesProvider.getDefaultGraphBuilderSuite(); - return withSimpleDebugInfoIfRequested(graphBuilderSuite); + return withSimpleDebugInfoIfRequested(graphBuilderSuite, getHotSpotGraalRuntime()); } private static void removeInliningPhase(Suites suites) { @@ -344,7 +353,7 @@ @Override public void invalidateInstalledCode(OptimizedCallTarget optimizedCallTarget, Object source, CharSequence reason) { - HotSpotGraalRuntime.runtime().getCompilerToVM().invalidateInstalledCode(optimizedCallTarget); + getHotSpotGraalRuntime().getCompilerToVM().invalidateInstalledCode(optimizedCallTarget); getCompilationNotify().notifyCompilationInvalidated(optimizedCallTarget, source, reason); } @@ -355,7 +364,7 @@ @Override public boolean platformEnableInfopoints() { - return HotSpotGraalRuntime.runtime().getCompilerToVM().shouldDebugNonSafepoints(); + return getHotSpotGraalRuntime().getCompilerToVM().shouldDebugNonSafepoints(); } @Override @@ -382,13 +391,13 @@ } public static NativeFunctionInterface createNativeFunctionInterface() { - HotSpotVMConfig config = HotSpotGraalRuntime.runtime().getConfig(); - Backend backend = HotSpotGraalRuntime.runtime().getHostBackend(); + HotSpotVMConfig config = getHotSpotGraalRuntime().getConfig(); + Backend backend = getHotSpotBackend(); RawNativeCallNodeFactory factory = getRawNativeCallNodeFactory(backend.getTarget().arch.getName()); if (factory == null) { return null; } - return new HotSpotNativeFunctionInterface(HotSpotGraalRuntime.runtime().getHostProviders(), factory, backend, config.dllLoad, config.dllLookup, config.rtldDefault); + return new HotSpotNativeFunctionInterface(getHotSpotProviders(), factory, backend, config.dllLoad, config.dllLookup, config.rtldDefault); } private static class TraceTraceTransferToInterpreterHelper { @@ -404,7 +413,7 @@ static void traceTransferToInterpreter() { long thread = UNSAFE.getLong(Thread.currentThread(), THREAD_EETOP_OFFSET); - long pendingTransferToInterpreterAddress = thread + HotSpotGraalRuntime.runtime().getConfig().pendingTransferToInterpreterOffset; + long pendingTransferToInterpreterAddress = thread + getHotSpotGraalRuntime().getConfig().pendingTransferToInterpreterOffset; boolean deoptimized = UNSAFE.getByte(pendingTransferToInterpreterAddress) != 0; if (deoptimized) { UNSAFE.putByte(pendingTransferToInterpreterAddress, (byte) 0);
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentation.java Tue Sep 15 21:10:57 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentation.java Wed Sep 16 00:48:33 2015 +0200 @@ -35,7 +35,6 @@ import com.oracle.graal.asm.Assembler; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; -import com.oracle.graal.hotspot.HotSpotGraalRuntime; import com.oracle.graal.hotspot.meta.HotSpotRegistersProvider; import com.oracle.graal.lir.asm.CompilationResultBuilder; import com.oracle.graal.lir.asm.FrameContext; @@ -46,10 +45,14 @@ * Mechanism for injecting special code into {@link OptimizedCallTarget#call(Object[])} . */ public abstract class OptimizedCallTargetInstrumentation extends CompilationResultBuilder { + protected final HotSpotVMConfig config; + protected final HotSpotRegistersProvider registers; public OptimizedCallTargetInstrumentation(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, FrameContext frameContext, - CompilationResult compilationResult) { + CompilationResult compilationResult, HotSpotVMConfig config, HotSpotRegistersProvider registers) { super(codeCache, foreignCalls, frameMap, asm, frameContext, compilationResult); + this.config = config; + this.registers = registers; } @Override @@ -57,8 +60,7 @@ Mark mark = super.recordMark(id); HotSpotCodeCacheProvider hsCodeCache = (HotSpotCodeCacheProvider) codeCache; if ((int) id == hsCodeCache.config.MARKID_VERIFIED_ENTRY) { - HotSpotRegistersProvider registers = HotSpotGraalRuntime.runtime().getHostProviders().getRegisters(); - injectTailCallCode(HotSpotGraalRuntime.runtime().getConfig(), registers); + injectTailCallCode(); } return mark; } @@ -76,5 +78,5 @@ /** * Injects code into the verified entry point of that makes a tail-call to the target callee. */ - protected abstract void injectTailCallCode(HotSpotVMConfig config, HotSpotRegistersProvider registers); + protected abstract void injectTailCallCode(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentationFactory.java Wed Sep 16 00:48:33 2015 +0200 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.truffle.hotspot; + +import jdk.internal.jvmci.hotspot.HotSpotVMConfig; + +import com.oracle.graal.hotspot.meta.HotSpotRegistersProvider; +import com.oracle.graal.lir.asm.CompilationResultBuilder; +import com.oracle.graal.lir.asm.CompilationResultBuilderFactory; +import com.oracle.graal.truffle.OptimizedCallTarget; + +/** + * A service for creating a specialized {@link CompilationResultBuilder} used to inject code into + * {@link OptimizedCallTarget#call(Object[])}. + */ +public abstract class OptimizedCallTargetInstrumentationFactory implements CompilationResultBuilderFactory { + + protected HotSpotVMConfig config; + protected HotSpotRegistersProvider registers; + + @SuppressWarnings("hiding") + public final void init(HotSpotVMConfig config, HotSpotRegistersProvider registers) { + this.config = config; + this.registers = registers; + } + + /** + * Gets the architecture supported by this factory. + */ + public abstract String getArchitecture(); +}
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetInstrumentationFactory.java Tue Sep 15 21:10:57 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.truffle; - -import com.oracle.graal.lir.asm.*; - -/** - * A service for creating a specialized {@link CompilationResultBuilder} used to inject code into - * {@link OptimizedCallTarget#call(Object[])}. - */ -public interface OptimizedCallTargetInstrumentationFactory extends CompilationResultBuilderFactory { - - /** - * Gets the architecture supported by this factory. - */ - String getArchitecture(); -}
--- a/mx.graal/suite.py Tue Sep 15 21:10:57 2015 +0200 +++ b/mx.graal/suite.py Wed Sep 16 00:48:33 2015 +0200 @@ -6,7 +6,7 @@ "suites": [ { "name" : "jvmci", - "version" : "9665bbd976c81d40e147a9ac14ce333b9b44db3e", + "version" : "28fe5850735eb206b1ff7c7015b6501bb92cd721", "urls" : [ {"url" : "http://lafo.ssw.uni-linz.ac.at/hg/graal-jvmci-8", "kind" : "hg"}, {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},