Mercurial > hg > graal-compiler
changeset 22912:3c00f45259b6
Merge.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 30 Oct 2015 20:56:28 +0100 |
parents | 9aadd8e4e5aa (current diff) 6a508ee4c7ef (diff) |
children | 102b099df9dd |
files | graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/Graal.java graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/GraalRuntimeAccess.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/util/CollectionsAccess.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeAccess.java graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/ConvertJTT.java graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArithmeticLIRGenerator.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TracePerformanceWarningsListener.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java |
diffstat | 997 files changed, 13513 insertions(+), 8784 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Fri Oct 30 20:55:32 2015 +0100 +++ b/.hgignore Fri Oct 30 20:56:28 2015 +0100 @@ -30,6 +30,7 @@ \.dot$ \.pyc$ \.hprof$ +\.json$ \javafilelist.*\.txt$ \.hprof\.txt$ ^doc/.*/dot_temp_
--- a/graal/com.oracle.graal.api.directives.test/src/com/oracle/graal/api/directives/test/ControlFlowAnchorDirectiveTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.api.directives.test/src/com/oracle/graal/api/directives/test/ControlFlowAnchorDirectiveTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,7 +31,7 @@ import java.util.Collections; import java.util.List; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.api.directives.test/src/com/oracle/graal/api/directives/test/DeoptimizeDirectiveTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.api.directives.test/src/com/oracle/graal/api/directives/test/DeoptimizeDirectiveTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.api.directives.test; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.api.directives/src/com/oracle/graal/api/directives/GraalDirectives.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.api.directives/src/com/oracle/graal/api/directives/GraalDirectives.java Fri Oct 30 20:56:28 2015 +0100 @@ -328,6 +328,14 @@ } /** + * Ensures that the instrumentation is valid only if it is associated with an Invoke node. + * + * See {@link #instrumentationBegin(int)}. + */ + public static void instrumentationToInvokeBegin(@SuppressWarnings("unused") int offset) { + } + + /** * Marks the end of the instrumentation boundary. See {@link #instrumentationBegin(int)}. */ public static void instrumentationEnd() {
--- a/graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/MethodSubstitution.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/MethodSubstitution.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import jdk.internal.jvmci.meta.Signature; +import jdk.vm.ci.meta.Signature; /** * Denotes a substitute method. A substitute method can call the original/substituted method by
--- a/graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/SnippetReflectionProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/SnippetReflectionProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,12 +29,12 @@ import java.lang.reflect.Method; import java.util.Objects; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaField; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaField; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; /** * Reflection operations on values represented as {@linkplain JavaConstant constants} for the
--- a/graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/Graal.java Fri Oct 30 20:55:32 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012, 2015, 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.api.runtime; - -import java.util.Formatter; - -import jdk.internal.jvmci.service.Services; - -/** - * Access point for {@linkplain #getRuntime() retrieving} the single {@link GraalRuntime} instance. - */ -public class Graal { - - private static final class Lazy { - private static final GraalRuntime runtime = initializeRuntime(); - - private static GraalRuntime initializeRuntime() { - GraalRuntimeAccess access = Services.loadSingle(GraalRuntimeAccess.class, false); - if (access != null) { - GraalRuntime rt = access.getRuntime(); - assert rt != null; - return rt; - } - return new InvalidGraalRuntime(); - } - } - - /** - * Gets the singleton {@link GraalRuntime} instance available to the application. - */ - public static GraalRuntime getRuntime() { - return Lazy.runtime; - } - - /** - * Gets a capability provided by the {@link GraalRuntime} instance available to the application. - * - * @throws UnsupportedOperationException if the capability is not available - */ - public static <T> T getRequiredCapability(Class<T> clazz) { - T t = getRuntime().getCapability(clazz); - if (t == null) { - String javaHome = System.getProperty("java.home"); - String vmName = System.getProperty("java.vm.name"); - Formatter errorMessage = new Formatter(); - if (getRuntime().getClass() == InvalidGraalRuntime.class) { - errorMessage.format("The VM does not support the Graal API.%n"); - } else { - errorMessage.format("The VM does not expose required Graal capability %s.%n", clazz.getName()); - } - errorMessage.format("Currently used Java home directory is %s.%n", javaHome); - errorMessage.format("Currently used VM configuration is: %s", vmName); - throw new UnsupportedOperationException(errorMessage.toString()); - } - return t; - } - - private static final class InvalidGraalRuntime implements GraalRuntime { - - @Override - public String getName() { - return ""; - } - - @Override - public <T> T getCapability(Class<T> clazz) { - return null; - } - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/GraalJVMCICompiler.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2015, 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.api.runtime; + +import jdk.vm.ci.runtime.JVMCICompiler; + +/** + * Graal specific extension of the {@link JVMCICompiler} interface. + */ +public interface GraalJVMCICompiler extends JVMCICompiler { + + GraalRuntime getGraalRuntime(); +}
--- a/graal/com.oracle.graal.api.runtime/src/com/oracle/graal/api/runtime/GraalRuntimeAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2015, 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.api.runtime; - -/** - * A service that provides access to a {@link GraalRuntime} implementation. - */ -public interface GraalRuntimeAccess { - - /** - * Gets the {@link GraalRuntime} implementation available via this access object. - */ - GraalRuntime getRuntime(); -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.test/src/com/oracle/graal/api/test/Graal.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2012, 2015, 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.api.test; + +import java.util.Formatter; + +import jdk.vm.ci.runtime.JVMCI; +import jdk.vm.ci.runtime.JVMCICompiler; + +import com.oracle.graal.api.runtime.GraalJVMCICompiler; +import com.oracle.graal.api.runtime.GraalRuntime; + +/** + * Access point for {@linkplain #getRuntime() retrieving} the {@link GraalRuntime} instance of the + * system compiler from unit tests. + */ +public class Graal { + + private static final GraalRuntime runtime = initializeRuntime(); + + private static GraalRuntime initializeRuntime() { + JVMCICompiler compiler = JVMCI.getRuntime().getCompiler(); + if (compiler instanceof GraalJVMCICompiler) { + GraalJVMCICompiler graal = (GraalJVMCICompiler) compiler; + return graal.getGraalRuntime(); + } else { + return new InvalidGraalRuntime(); + } + } + + /** + * Gets the singleton {@link GraalRuntime} instance available to unit tests. + */ + public static GraalRuntime getRuntime() { + return runtime; + } + + /** + * Gets a capability provided by the {@link GraalRuntime} instance available to the application. + * + * @throws UnsupportedOperationException if the capability is not available + */ + public static <T> T getRequiredCapability(Class<T> clazz) { + T t = getRuntime().getCapability(clazz); + if (t == null) { + String javaHome = System.getProperty("java.home"); + String vmName = System.getProperty("java.vm.name"); + Formatter errorMessage = new Formatter(); + if (getRuntime().getClass() == InvalidGraalRuntime.class) { + errorMessage.format("The VM does not support the Graal API.%n"); + } else { + errorMessage.format("The VM does not expose required Graal capability %s.%n", clazz.getName()); + } + errorMessage.format("Currently used Java home directory is %s.%n", javaHome); + errorMessage.format("Currently used VM configuration is: %s", vmName); + throw new UnsupportedOperationException(errorMessage.toString()); + } + return t; + } + + private static final class InvalidGraalRuntime implements GraalRuntime { + + @Override + public String getName() { + return ""; + } + + @Override + public <T> T getCapability(Class<T> clazz) { + return null; + } + } +}
--- a/graal/com.oracle.graal.api.test/src/com/oracle/graal/api/test/GraalAPITest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.api.test/src/com/oracle/graal/api/test/GraalAPITest.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, 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 @@ -26,8 +26,6 @@ import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; - public class GraalAPITest { @Test
--- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/BitOpsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/BitOpsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,20 +27,20 @@ import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.TZCNT; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.DWORD; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.QWORD; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; import static org.junit.Assume.assumeTrue; import java.lang.reflect.Field; import java.util.EnumSet; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64.CPUFeature; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64.CPUFeature; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; import org.junit.Before; import org.junit.Test;
--- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/IncrementDecrementMacroTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/IncrementDecrementMacroTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,18 +22,18 @@ */ package com.oracle.graal.asm.amd64.test; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; import static org.junit.Assume.assumeTrue; import java.lang.reflect.Field; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; import org.junit.Before; import org.junit.Test;
--- a/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.amd64.test/src/com/oracle/graal/asm/amd64/test/SimpleAssemblerTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,17 +27,17 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.DataSectionReference; -import jdk.internal.jvmci.code.DataSection.Data; -import jdk.internal.jvmci.code.DataSection.DataBuilder; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.DataSectionReference; +import jdk.vm.ci.code.DataSection.Data; +import jdk.vm.ci.code.DataSection.DataBuilder; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import org.junit.Before; import org.junit.Test;
--- a/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Address.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Address.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.asm.amd64; -import jdk.internal.jvmci.code.Register; +import jdk.vm.ci.code.Register; import com.oracle.graal.asm.AbstractAddress;
--- a/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java Fri Oct 30 20:56:28 2015 +0100 @@ -42,20 +42,20 @@ import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SD; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SS; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.WORD; -import static jdk.internal.jvmci.amd64.AMD64.CPU; -import static jdk.internal.jvmci.amd64.AMD64.XMM; -import static jdk.internal.jvmci.amd64.AMD64.r12; -import static jdk.internal.jvmci.amd64.AMD64.r13; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import static jdk.internal.jvmci.amd64.AMD64.rip; -import static jdk.internal.jvmci.amd64.AMD64.rsp; -import static jdk.internal.jvmci.code.MemoryBarriers.STORE_LOAD; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64.CPUFeature; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.Register.RegisterCategory; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; +import static jdk.vm.ci.amd64.AMD64.CPU; +import static jdk.vm.ci.amd64.AMD64.XMM; +import static jdk.vm.ci.amd64.AMD64.r12; +import static jdk.vm.ci.amd64.AMD64.r13; +import static jdk.vm.ci.amd64.AMD64.rbp; +import static jdk.vm.ci.amd64.AMD64.rip; +import static jdk.vm.ci.amd64.AMD64.rsp; +import static jdk.vm.ci.code.MemoryBarriers.STORE_LOAD; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64.CPUFeature; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.Register.RegisterCategory; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.Label;
--- a/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,11 +25,11 @@ import static com.oracle.graal.asm.amd64.AMD64AsmOptions.UseIncDec; import static com.oracle.graal.asm.amd64.AMD64AsmOptions.UseXmmLoadAndClearUpper; import static com.oracle.graal.asm.amd64.AMD64AsmOptions.UseXmmRegToRegMoveAll; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.asm.NumUtil;
--- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAddress.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAddress.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.asm.sparc; -import static jdk.internal.jvmci.sparc.SPARC.STACK_BIAS; -import static jdk.internal.jvmci.sparc.SPARC.fp; -import static jdk.internal.jvmci.sparc.SPARC.sp; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.sparc.SPARC; +import static jdk.vm.ci.sparc.SPARC.STACK_BIAS; +import static jdk.vm.ci.sparc.SPARC.fp; +import static jdk.vm.ci.sparc.SPARC.sp; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.sparc.SPARC; import com.oracle.graal.asm.AbstractAddress;
--- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Fri Oct 30 20:56:28 2015 +0100 @@ -119,28 +119,28 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.Ops.ArithOp; import static com.oracle.graal.asm.sparc.SPARCAssembler.Ops.LdstOp; import static java.lang.String.format; -import static jdk.internal.jvmci.sparc.SPARC.INSTRUCTION_SIZE; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARC.isCPURegister; -import static jdk.internal.jvmci.sparc.SPARC.isDoubleFloatRegister; -import static jdk.internal.jvmci.sparc.SPARC.isSingleFloatRegister; -import static jdk.internal.jvmci.sparc.SPARC.r15; -import static jdk.internal.jvmci.sparc.SPARC.r2; -import static jdk.internal.jvmci.sparc.SPARC.r5; +import static jdk.vm.ci.sparc.SPARC.CPU; +import static jdk.vm.ci.sparc.SPARC.FPUd; +import static jdk.vm.ci.sparc.SPARC.FPUs; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARC.g2; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARC.g7; +import static jdk.vm.ci.sparc.SPARC.o7; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARC.CPUFeature; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARC.CPUFeature; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.Label; @@ -163,6 +163,16 @@ super(target); } + /** + * Size of an SPARC assembler instruction in Bytes. + */ + public static final int INSTRUCTION_SIZE = 4; + + /** + * Size in bytes which are cleared by stxa %g0, [%rd] ASI_ST_BLKINIT_PRIMARY. + */ + public static final int BLOCK_ZERO_LENGTH = 64; + public static final int CCR_ICC_SHIFT = 0; public static final int CCR_XCC_SHIFT = 4; public static final int CCR_V_SHIFT = 1; @@ -621,7 +631,7 @@ } public static CC forKind(PlatformKind kind) { - if (kind.equals(SPARCKind.DWORD)) { + if (kind.equals(SPARCKind.XWORD)) { return Xcc; } else if (kind.equals(SPARCKind.WORD)) { return Icc; @@ -1630,6 +1640,31 @@ } } + public static boolean isCPURegister(Register... regs) { + for (Register reg : regs) { + if (!isCPURegister(reg)) { + return false; + } + } + return true; + } + + public static boolean isCPURegister(Register r) { + return r.getRegisterCategory().equals(CPU); + } + + public static boolean isGlobalRegister(Register r) { + return isCPURegister(r) && g0.number <= r.number && r.number <= g7.number; + } + + public static boolean isSingleFloatRegister(Register r) { + return r.getRegisterCategory().equals(FPUs); + } + + public static boolean isDoubleFloatRegister(Register r) { + return r.getRegisterCategory().equals(FPUd); + } + public boolean hasFeature(CPUFeature feature) { return ((SPARC) this.target.arch).features.contains(feature); } @@ -2309,7 +2344,7 @@ // A.44 Read State Register public void rdpc(Register rd) { - op3(Rd, r5, g0, rd); + op3(Rd, g5, g0, rd); } public void restore(Register rs1, Register rs2, Register rd) { @@ -2423,11 +2458,11 @@ } public void wrccr(Register rs1, Register rs2) { - op3(Wr, rs1, rs2, r2); + op3(Wr, rs1, rs2, g2); } public void wrccr(Register rs1, int simm13) { - op3(Wr, rs1, simm13, r2); + op3(Wr, rs1, simm13, g2); } public void xor(Register rs1, Register rs2, Register rd) { @@ -2499,7 +2534,7 @@ } public void ld(SPARCAddress src, Register dst, int bytes, boolean signExtend) { - if (SPARC.isCPURegister(dst)) { + if (isCPURegister(dst)) { if (signExtend) { switch (bytes) { case 1: @@ -2535,10 +2570,10 @@ throw new InternalError(); } } - } else if (SPARC.isDoubleFloatRegister(dst) && bytes == 8) { + } else if (isDoubleFloatRegister(dst) && bytes == 8) { assert !signExtend; ld(Lddf, src, dst); - } else if (SPARC.isSingleFloatRegister(dst) && bytes == 4) { + } else if (isSingleFloatRegister(dst) && bytes == 4) { assert !signExtend; ld(Ldf, src, dst); } else { @@ -2547,7 +2582,7 @@ } public void st(Register src, SPARCAddress dst, int bytes) { - if (SPARC.isCPURegister(src)) { + if (isCPURegister(src)) { switch (bytes) { case 1: st(Stb, src, dst); @@ -2564,9 +2599,9 @@ default: throw new InternalError(Integer.toString(bytes)); } - } else if (SPARC.isDoubleFloatRegister(src) && bytes == 8) { + } else if (isDoubleFloatRegister(src) && bytes == 8) { st(Stdf, src, dst); - } else if (SPARC.isSingleFloatRegister(src) && bytes == 4) { + } else if (isSingleFloatRegister(src) && bytes == 4) { st(Stf, src, dst); } else { throw new InternalError(String.format("src: %s dst: %s bytes: %d", src, dst, bytes)); @@ -2599,17 +2634,17 @@ } public void ldxa(Register rs1, Register rs2, Register rd, Asi asi) { - assert SPARC.isCPURegister(rs1, rs2, rd) : format("%s %s %s", rs1, rs2, rd); + assert isCPURegister(rs1, rs2, rd) : format("%s %s %s", rs1, rs2, rd); ld(Ldxa, new SPARCAddress(rs1, rs2), rd, asi); } public void lduwa(Register rs1, Register rs2, Register rd, Asi asi) { - assert SPARC.isCPURegister(rs1, rs2, rd) : format("%s %s %s", rs1, rs2, rd); + assert isCPURegister(rs1, rs2, rd) : format("%s %s %s", rs1, rs2, rd); ld(Lduwa, new SPARCAddress(rs1, rs2), rd, asi); } public void stxa(Register rd, Register rs1, Register rs2, Asi asi) { - assert SPARC.isCPURegister(rs1, rs2, rd) : format("%s %s %s", rs1, rs2, rd); + assert isCPURegister(rs1, rs2, rd) : format("%s %s %s", rs1, rs2, rd); ld(Stxa, new SPARCAddress(rs1, rs2), rd, asi); } @@ -2648,7 +2683,7 @@ } public void membar(int barriers) { - op3(Membar, r15, barriers, g0); + op3(Membar, o7, barriers, g0); } public void casa(Register rs1, Register rs2, Register rd, Asi asi) {
--- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCMacroAssembler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCMacroAssembler.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,19 +29,14 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.Always; import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.Equal; import static com.oracle.graal.asm.sparc.SPARCAssembler.RCondition.Rc_z; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARC.g3; -import static jdk.internal.jvmci.sparc.SPARC.i7; -import static jdk.internal.jvmci.sparc.SPARC.isCPURegister; -import static jdk.internal.jvmci.sparc.SPARC.o7; - -import java.util.function.Consumer; - -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARC.CPUFeature; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARC.g3; +import static jdk.vm.ci.sparc.SPARC.i7; +import static jdk.vm.ci.sparc.SPARC.o7; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.sparc.SPARC.CPUFeature; import com.oracle.graal.asm.AbstractAddress; import com.oracle.graal.asm.Label; @@ -191,182 +186,74 @@ } /** - * This instruction is like sethi but for 64-bit values. + * Generates sethi hi22(value), dst; or dst, lo10(value), dst; code. */ - public static class Sethix { - - private static final int INSTRUCTION_SIZE = 7; - - private long value; - private Register dst; - private boolean forceRelocatable; - private boolean delayed = false; - private Consumer<SPARCAssembler> delayedInstructionEmitter; - - public Sethix(long value, Register dst, boolean forceRelocatable, boolean delayed) { - this(value, dst, forceRelocatable); - assert !(forceRelocatable && delayed) : "Relocatable sethix cannot be delayed"; - this.delayed = delayed; - } - - public Sethix(long value, Register dst, boolean forceRelocatable) { - this.value = value; - this.dst = dst; - this.forceRelocatable = forceRelocatable; + public void setw(int value, Register dst, boolean forceRelocatable) { + if (!forceRelocatable && isSimm13(value)) { + or(g0, value, dst); + } else { + sethi(hi22(value), dst); + or(dst, lo10(value), dst); } - - public Sethix(long value, Register dst) { - this(value, dst, false); - } - - private void emitInstruction(Consumer<SPARCAssembler> cb, SPARCMacroAssembler masm) { - if (delayed) { - if (this.delayedInstructionEmitter != null) { - delayedInstructionEmitter.accept(masm); - } - delayedInstructionEmitter = cb; - } else { - cb.accept(masm); - } - } - - public void emit(SPARCMacroAssembler masm) { - final int hi = (int) (value >> 32); - final int lo = (int) (value & ~0); - - // This is the same logic as MacroAssembler::internal_set. - final int startPc = masm.position(); + } - if (hi == 0 && lo >= 0) { - Consumer<SPARCAssembler> cb = eMasm -> eMasm.sethi(hi22(lo), dst); - emitInstruction(cb, masm); - } else if (hi == -1) { - Consumer<SPARCAssembler> cb = eMasm -> eMasm.sethi(hi22(~lo), dst); - emitInstruction(cb, masm); - cb = eMasm -> eMasm.xor(dst, ~lo10(~0), dst); - emitInstruction(cb, masm); - } else { - final int shiftcnt; - final int shiftcnt2; - Consumer<SPARCAssembler> cb = eMasm -> eMasm.sethi(hi22(hi), dst); - emitInstruction(cb, masm); - if ((hi & 0x3ff) != 0) { // Any bits? - // msb 32-bits are now in lsb 32 - cb = eMasm -> eMasm.or(dst, hi & 0x3ff, dst); - emitInstruction(cb, masm); - } - if ((lo & 0xFFFFFC00) != 0) { // done? - if (((lo >> 20) & 0xfff) != 0) { // Any bits set? - // Make room for next 12 bits - cb = eMasm -> eMasm.sllx(dst, 12, dst); - emitInstruction(cb, masm); - // Or in next 12 - cb = eMasm -> eMasm.or(dst, (lo >> 20) & 0xfff, dst); - emitInstruction(cb, masm); - shiftcnt = 0; // We already shifted - } else { - shiftcnt = 12; - } - if (((lo >> 10) & 0x3ff) != 0) { - // Make room for last 10 bits - cb = eMasm -> eMasm.sllx(dst, shiftcnt + 10, dst); - emitInstruction(cb, masm); - // Or in next 10 - cb = eMasm -> eMasm.or(dst, (lo >> 10) & 0x3ff, dst); - emitInstruction(cb, masm); - shiftcnt2 = 0; - } else { - shiftcnt2 = 10; - } - // Shift leaving disp field 0'd - cb = eMasm -> eMasm.sllx(dst, shiftcnt2 + 10, dst); - emitInstruction(cb, masm); - } else { - cb = eMasm -> eMasm.sllx(dst, 32, dst); - emitInstruction(cb, masm); - } - } - // Pad out the instruction sequence so it can be patched later. - if (forceRelocatable) { - while (masm.position() < (startPc + (INSTRUCTION_SIZE * 4))) { - Consumer<SPARCAssembler> cb = eMasm -> eMasm.nop(); - emitInstruction(cb, masm); - } - } - } - - public void emitDelayed(SPARCMacroAssembler masm) { - assert delayedInstructionEmitter != null; - delayedInstructionEmitter.accept(masm); + public void setx(long value, Register dst, boolean forceRelocatable) { + int lo = (int) (value & ~0); + sethix(value, dst, forceRelocatable); + if (lo10(lo) != 0 || forceRelocatable) { + add(dst, lo10(lo), dst); } } - public static class Setx { - - private long value; - private Register dst; - private boolean forceRelocatable; - private boolean delayed = false; - private boolean delayedFirstEmitted = false; - private Sethix sethix; - private Consumer<SPARCMacroAssembler> delayedAdd; - - public Setx(long value, Register dst, boolean forceRelocatable, boolean delayed) { - assert !(forceRelocatable && delayed) : "Cannot use relocatable setx as delayable"; - this.value = value; - this.dst = dst; - this.forceRelocatable = forceRelocatable; - this.delayed = delayed; - } - - public Setx(long value, Register dst, boolean forceRelocatable) { - this(value, dst, forceRelocatable, false); - } + public void sethix(long value, Register dst, boolean forceRelocatable) { + final int hi = (int) (value >> 32); + final int lo = (int) (value & ~0); - public Setx(long value, Register dst) { - this(value, dst, false); - } - - public void emit(SPARCMacroAssembler masm) { - assert !delayed; - doEmit(masm); - } - - private void doEmit(SPARCMacroAssembler masm) { - sethix = new Sethix(value, dst, forceRelocatable, delayed); - sethix.emit(masm); - int lo = (int) (value & ~0); - if (lo10(lo) != 0 || forceRelocatable) { - Consumer<SPARCMacroAssembler> add = eMasm -> eMasm.add(dst, lo10(lo), dst); - if (delayed) { - sethix.emitDelayed(masm); - sethix = null; - delayedAdd = add; + // This is the same logic as MacroAssembler::internal_set. + final int startPc = position(); + if (hi == 0 && lo >= 0) { + sethi(hi22(lo), dst); + } else if (hi == -1) { + sethi(hi22(~lo), dst); + xor(dst, ~lo10(~0), dst); + } else { + final int shiftcnt; + final int shiftcnt2; + sethi(hi22(hi), dst); + if ((hi & 0x3ff) != 0) { // Any bits? + // msb 32-bits are now in lsb 32 + or(dst, hi & 0x3ff, dst); + } + if ((lo & 0xFFFFFC00) != 0) { // done? + if (((lo >> 20) & 0xfff) != 0) { // Any bits set? + // Make room for next 12 bits + sllx(dst, 12, dst); + // Or in next 12 + or(dst, (lo >> 20) & 0xfff, dst); + shiftcnt = 0; // We already shifted } else { - sethix = null; - add.accept(masm); + shiftcnt = 12; } + if (((lo >> 10) & 0x3ff) != 0) { + // Make room for last 10 bits + sllx(dst, shiftcnt + 10, dst); + // Or in next 10 + or(dst, (lo >> 10) & 0x3ff, dst); + shiftcnt2 = 0; + } else { + shiftcnt2 = 10; + } + // Shift leaving disp field 0'd + sllx(dst, shiftcnt2 + 10, dst); + } else { + sllx(dst, 32, dst); } } - - public void emitFirstPartOfDelayed(SPARCMacroAssembler masm) { - assert !forceRelocatable : "Cannot use delayed mode with relocatable setx"; - assert delayed : "Can only be used in delayed mode"; - doEmit(masm); - delayedFirstEmitted = true; - } - - public void emitSecondPartOfDelayed(SPARCMacroAssembler masm) { - assert !forceRelocatable : "Cannot use delayed mode with relocatable setx"; - assert delayed : "Can only be used in delayed mode"; - assert delayedFirstEmitted : "First part has not been emitted so far."; - assert delayedAdd == null && sethix != null || delayedAdd != null && sethix == null : "Either add or sethix must be set"; - if (delayedAdd != null) { - delayedAdd.accept(masm); - } else { - sethix.emitDelayed(masm); + // Pad out the instruction sequence so it can be patched later. + if (forceRelocatable) { + while (position() < (startPc + (INSTRUCTION_SIZE * 7))) { + nop(); } - } } @@ -423,7 +310,7 @@ int positionBefore = position(); delaySlotInstruction.run(); int positionAfter = position(); - assert positionBefore - positionAfter > SPARC.INSTRUCTION_SIZE : "Emitted more than one instruction into delay slot"; + assert positionBefore - positionAfter > INSTRUCTION_SIZE : "Emitted more than one instruction into delay slot"; } else { nop(); } @@ -449,7 +336,7 @@ int positionBefore = position(); delaySlotInstruction.run(); int positionAfter = position(); - assert positionBefore - positionAfter > SPARC.INSTRUCTION_SIZE : "Emitted more than one instruction into delay slot"; + assert positionBefore - positionAfter > INSTRUCTION_SIZE : "Emitted more than one instruction into delay slot"; } else { nop(); }
--- a/graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm.test/src/com/oracle/graal/asm/test/AssemblerTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,19 +24,19 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.runtime.JVMCI; -import jdk.internal.jvmci.runtime.JVMCIBackend; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.runtime.JVMCI; +import jdk.vm.ci.runtime.JVMCIBackend; +import jdk.vm.ci.service.Services; import org.junit.Assert;
--- a/graal/com.oracle.graal.asm/src/com/oracle/graal/asm/Assembler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm/src/com/oracle/graal/asm/Assembler.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,15 +22,14 @@ */ package com.oracle.graal.asm; -import java.nio.ByteOrder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; /** * The platform-independent base class for the assembler. @@ -47,11 +46,7 @@ public Assembler(TargetDescription target) { this.target = target; - if (target.arch.getByteOrder() == ByteOrder.BIG_ENDIAN) { - this.codeBuffer = new Buffer.BigEndian(); - } else { - this.codeBuffer = new Buffer.LittleEndian(); - } + this.codeBuffer = new Buffer(target.arch.getByteOrder()); } /**
--- a/graal/com.oracle.graal.asm/src/com/oracle/graal/asm/Buffer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.asm/src/com/oracle/graal/asm/Buffer.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,39 +22,46 @@ */ package com.oracle.graal.asm; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.util.Arrays; /** - * Code buffer management for the assembler. Support for little endian and big endian architectures - * is implemented using subclasses. + * Code buffer management for the assembler. */ -abstract class Buffer { +final class Buffer { - protected byte[] data; - protected int position; + protected ByteBuffer data; - public Buffer() { - data = new byte[AsmOptions.InitialCodeBufferSize]; + public Buffer(ByteOrder order) { + data = ByteBuffer.allocate(AsmOptions.InitialCodeBufferSize); + data.order(order); } public int position() { - return position; + return data.position(); } public void setPosition(int position) { - assert position >= 0 && position <= data.length; - this.position = position; + assert position >= 0 && position <= data.limit(); + data.position(position); } /** - * Closes this buffer. No extra data can be written to this buffer after this call. + * Closes this buffer. Any further operations on a closed buffer will result in a + * {@link NullPointerException}. * * @param trimmedCopy if {@code true}, then a copy of the underlying byte array up to (but not * including) {@code position()} is returned * @return the data in this buffer or a trimmed copy if {@code trimmedCopy} is {@code true} */ public byte[] close(boolean trimmedCopy) { - byte[] result = trimmedCopy ? Arrays.copyOf(data, position()) : data; + byte[] result = data.array(); + if (trimmedCopy) { + // Make a copy even if result.length == data.position() since + // the API for trimmedCopy states a copy is always made + result = Arrays.copyOf(result, data.position()); + } data = null; return result; } @@ -63,7 +70,7 @@ if (data == null) { return null; } - return Arrays.copyOfRange(data, start, end); + return Arrays.copyOfRange(data.array(), start, end); } /** @@ -74,166 +81,91 @@ * @param len number of bytes to copy */ public void copyInto(byte[] dst, int off, int len) { - System.arraycopy(data, 0, dst, off, len); + System.arraycopy(data.array(), 0, dst, off, len); } protected void ensureSize(int length) { - if (length >= data.length) { - data = Arrays.copyOf(data, length * 4); + if (length >= data.limit()) { + byte[] newBuf = Arrays.copyOf(data.array(), length * 4); + ByteBuffer newData = ByteBuffer.wrap(newBuf); + newData.order(data.order()); + newData.position(data.position()); + data = newData; } } public void emitBytes(byte[] arr, int off, int len) { - ensureSize(position + len); - System.arraycopy(arr, off, data, position, len); - position += len; + ensureSize(data.position() + len); + data.put(arr, off, len); } public void emitByte(int b) { - position = emitByte(b, position); + assert NumUtil.isUByte(b) || NumUtil.isByte(b); + ensureSize(data.position() + 1); + data.put((byte) (b & 0xFF)); } public void emitShort(int b) { - position = emitShort(b, position); + assert NumUtil.isUShort(b) || NumUtil.isShort(b); + ensureSize(data.position() + 2); + data.putShort((short) b); } public void emitInt(int b) { - position = emitInt(b, position); + ensureSize(data.position() + 4); + data.putInt(b); } public void emitLong(long b) { - position = emitLong(b, position); - } - - public int emitBytes(byte[] arr, int pos) { - final int len = arr.length; - final int newPos = pos + len; - ensureSize(newPos); - System.arraycopy(arr, 0, data, pos, len); - return newPos; + ensureSize(data.position() + 8); + data.putLong(b); } - public int emitByte(int b, int pos) { - assert NumUtil.isUByte(b) || NumUtil.isByte(b); - int newPos = pos + 1; - ensureSize(newPos); - data[pos] = (byte) (b & 0xFF); - return newPos; + public void emitBytes(byte[] arr, int pos) { + final int len = arr.length; + ensureSize(pos + len); + // Write directly into the underlying array so as to not + // change the ByteBuffer's position + System.arraycopy(arr, 0, data.array(), pos, len); } - public abstract int emitShort(int b, int pos); - - public abstract int emitInt(int b, int pos); - - public abstract int emitLong(long b, int pos); - - public int getByte(int pos) { - return data[pos] & 0xff; + public void emitByte(int b, int pos) { + assert NumUtil.isUByte(b) || NumUtil.isByte(b); + ensureSize(pos + 1); + data.put(pos, (byte) (b & 0xFF)); } - public abstract int getShort(int pos); - - public abstract int getInt(int pos); - - public static final class BigEndian extends Buffer { - - @Override - public int emitShort(int b, int pos) { - assert NumUtil.isUShort(b) || NumUtil.isShort(b); - int newPos = pos + 2; - ensureSize(pos + 2); - data[pos] = (byte) ((b >> 8) & 0xFF); - data[pos + 1] = (byte) (b & 0xFF); - return newPos; - } + public void emitShort(int b, int pos) { + assert NumUtil.isUShort(b) || NumUtil.isShort(b); + ensureSize(pos + 2); + data.putShort(pos, (short) b).position(); + } - @Override - public int emitInt(int b, int pos) { - int newPos = pos + 4; - ensureSize(newPos); - data[pos] = (byte) ((b >> 24) & 0xFF); - data[pos + 1] = (byte) ((b >> 16) & 0xFF); - data[pos + 2] = (byte) ((b >> 8) & 0xFF); - data[pos + 3] = (byte) (b & 0xFF); - return newPos; - } - - @Override - public int emitLong(long b, int pos) { - int newPos = pos + 8; - ensureSize(newPos); - data[pos] = (byte) ((b >> 56) & 0xFF); - data[pos + 1] = (byte) ((b >> 48) & 0xFF); - data[pos + 2] = (byte) ((b >> 40) & 0xFF); - data[pos + 3] = (byte) ((b >> 32) & 0xFF); - data[pos + 4] = (byte) ((b >> 24) & 0xFF); - data[pos + 5] = (byte) ((b >> 16) & 0xFF); - data[pos + 6] = (byte) ((b >> 8) & 0xFF); - data[pos + 7] = (byte) (b & 0xFF); - return newPos; - } - - @Override - public int getShort(int pos) { - return (data[pos + 0] & 0xff) << 8 | (data[pos + 1] & 0xff) << 0; - } - - @Override - public int getInt(int pos) { - return (data[pos + 0] & 0xff) << 24 | (data[pos + 1] & 0xff) << 16 | (data[pos + 2] & 0xff) << 8 | (data[pos + 3] & 0xff) << 0; - } + public void emitInt(int b, int pos) { + ensureSize(pos + 4); + data.putInt(pos, b).position(); } - public static final class LittleEndian extends Buffer { - - @Override - public int emitShort(int b, int pos) { - assert NumUtil.isUShort(b) || NumUtil.isShort(b); - int newPos = pos + 2; - ensureSize(newPos); - data[pos] = (byte) (b & 0xFF); - data[pos + 1] = (byte) ((b >> 8) & 0xFF); - return newPos; - } - - @Override - public int emitInt(int b, int pos) { - int newPos = pos + 4; - ensureSize(newPos); - data[pos] = (byte) (b & 0xFF); - data[pos + 1] = (byte) ((b >> 8) & 0xFF); - data[pos + 2] = (byte) ((b >> 16) & 0xFF); - data[pos + 3] = (byte) ((b >> 24) & 0xFF); - return newPos; - } + public void emitLong(long b, int pos) { + ensureSize(pos + 8); + data.putLong(pos, b).position(); + } - @Override - public int emitLong(long b, int pos) { - int newPos = pos + 8; - ensureSize(newPos); - data[pos] = (byte) (b & 0xFF); - data[pos + 1] = (byte) ((b >> 8) & 0xFF); - data[pos + 2] = (byte) ((b >> 16) & 0xFF); - data[pos + 3] = (byte) ((b >> 24) & 0xFF); - data[pos + 4] = (byte) ((b >> 32) & 0xFF); - data[pos + 5] = (byte) ((b >> 40) & 0xFF); - data[pos + 6] = (byte) ((b >> 48) & 0xFF); - data[pos + 7] = (byte) ((b >> 56) & 0xFF); - return newPos; - } + public int getByte(int pos) { + int b = data.get(pos); + return b & 0xff; + } - @Override - public int getShort(int pos) { - return (data[pos + 1] & 0xff) << 8 | (data[pos + 0] & 0xff) << 0; - } + public int getShort(int pos) { + short s = data.getShort(pos); + return s & 0xffff; + } - @Override - public int getInt(int pos) { - return (data[pos + 3] & 0xff) << 24 | (data[pos + 2] & 0xff) << 16 | (data[pos + 1] & 0xff) << 8 | (data[pos + 0] & 0xff) << 0; - } + public int getInt(int pos) { + return data.getInt(pos); } public void reset() { - position = 0; + data.clear(); } }
--- a/graal/com.oracle.graal.code/src/com/oracle/graal/code/DisassemblerProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.code/src/com/oracle/graal/code/DisassemblerProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.code; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; /** * Interface providing capability for disassembling machine code.
--- a/graal/com.oracle.graal.code/src/com/oracle/graal/code/HexCodeFile.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.code/src/com/oracle/graal/code/HexCodeFile.java Fri Oct 30 20:56:28 2015 +0100 @@ -32,10 +32,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.CompilationResult.CodeAnnotation; -import jdk.internal.jvmci.code.CompilationResult.CodeComment; -import jdk.internal.jvmci.code.CompilationResult.JumpTable; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.CompilationResult.CodeAnnotation; +import jdk.vm.ci.code.CompilationResult.CodeComment; +import jdk.vm.ci.code.CompilationResult.JumpTable; /** * A HexCodeFile is a textual format for representing a chunk of machine code along with extra
--- a/graal/com.oracle.graal.code/src/com/oracle/graal/code/HexCodeFileDisassemblerProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.code/src/com/oracle/graal/code/HexCodeFileDisassemblerProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -26,20 +26,20 @@ import java.lang.invoke.MethodHandles; import java.util.Arrays; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.CodeUtil.DefaultRefMapFormatter; -import jdk.internal.jvmci.code.CodeUtil.RefMapFormatter; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.Call; -import jdk.internal.jvmci.code.CompilationResult.DataPatch; -import jdk.internal.jvmci.code.CompilationResult.Infopoint; -import jdk.internal.jvmci.code.CompilationResult.Mark; -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.service.ServiceProvider; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.CodeUtil.DefaultRefMapFormatter; +import jdk.vm.ci.code.CodeUtil.RefMapFormatter; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.Call; +import jdk.vm.ci.code.CompilationResult.DataPatch; +import jdk.vm.ci.code.CompilationResult.Infopoint; +import jdk.vm.ci.code.CompilationResult.Mark; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.service.ServiceProvider; /** * {@link HexCodeFile} based implementation of {@link DisassemblerProvider}. @@ -77,7 +77,7 @@ HexCodeFile.addAnnotations(hcf, compResult.getAnnotations()); addExceptionHandlersComment(compResult, hcf); Register fp = regConfig.getFrameRegister(); - RefMapFormatter slotFormatter = new DefaultRefMapFormatter(target.arch, target.wordSize, fp, 0); + RefMapFormatter slotFormatter = new DefaultRefMapFormatter(target.wordSize, fp, 0); for (Infopoint infopoint : compResult.getInfopoints()) { if (infopoint instanceof Call) { Call call = (Call) infopoint;
--- a/graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/AMD64AllocatorTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/AMD64AllocatorTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import static com.oracle.graal.compiler.common.BackendOptions.UserOptions.TraceRA; import static com.oracle.graal.compiler.common.GraalOptions.RegisterPressure; import static org.junit.Assume.assumeTrue; -import jdk.internal.jvmci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64; import org.junit.Before; import org.junit.Ignore;
--- a/graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/ConstantStackMoveTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/ConstantStackMoveTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,14 +23,14 @@ package com.oracle.graal.compiler.amd64.test; import static org.junit.Assume.assumeTrue; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.PrimitiveConstant; import org.junit.Before; import org.junit.Test; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.lir.jtt.LIRTest; @@ -54,7 +54,7 @@ FrameMapBuilder frameMapBuilder = gen.getResult().getFrameMapBuilder(); // create slots PrimitiveConstant constantValue = JavaConstant.forBoxedPrimitive(primitive); - StackSlotValue s1 = frameMapBuilder.allocateSpillSlot(gen.target().getLIRKind(constantValue.getJavaKind())); + VirtualStackSlot s1 = frameMapBuilder.allocateSpillSlot(gen.target().getLIRKind(constantValue.getJavaKind())); // move stuff around gen.emitMoveConstant(s1, constantValue); gen.emitBlackhole(s1);
--- a/graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/StackStoreTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/StackStoreTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,16 +23,16 @@ package com.oracle.graal.compiler.amd64.test; import static org.junit.Assume.assumeTrue; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import org.junit.Before; import org.junit.Test; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.lir.jtt.LIRTest; @@ -49,8 +49,8 @@ public void generate(LIRGeneratorTool gen, Value a) { FrameMapBuilder frameMapBuilder = gen.getResult().getFrameMapBuilder(); // create slots - StackSlotValue s1 = frameMapBuilder.allocateSpillSlot(a.getLIRKind()); - StackSlotValue s2 = frameMapBuilder.allocateSpillSlot(LIRKind.value(AMD64Kind.WORD)); + VirtualStackSlot s1 = frameMapBuilder.allocateSpillSlot(a.getLIRKind()); + VirtualStackSlot s2 = frameMapBuilder.allocateSpillSlot(LIRKind.value(AMD64Kind.WORD)); // move stuff around gen.emitMove(s1, a); gen.emitMoveConstant(s2, JavaConstant.forShort(Short.MIN_VALUE)); @@ -65,8 +65,8 @@ public void generate(LIRGeneratorTool gen, Value a) { FrameMapBuilder frameMapBuilder = gen.getResult().getFrameMapBuilder(); // create slots - StackSlotValue s1 = frameMapBuilder.allocateSpillSlot(a.getLIRKind()); - StackSlotValue s2 = frameMapBuilder.allocateSpillSlot(LIRKind.value(AMD64Kind.WORD)); + VirtualStackSlot s1 = frameMapBuilder.allocateSpillSlot(a.getLIRKind()); + VirtualStackSlot s2 = frameMapBuilder.allocateSpillSlot(LIRKind.value(AMD64Kind.WORD)); // move stuff around gen.emitMove(s1, a); Value v = gen.emitLoadConstant(LIRKind.value(AMD64Kind.WORD), JavaConstant.forShort(Short.MIN_VALUE)); @@ -82,8 +82,8 @@ public void generate(LIRGeneratorTool gen, Value a) { FrameMapBuilder frameMapBuilder = gen.getResult().getFrameMapBuilder(); // create slots - StackSlotValue s1 = frameMapBuilder.allocateSpillSlot(a.getLIRKind()); - StackSlotValue s2 = frameMapBuilder.allocateSpillSlot(LIRKind.value(AMD64Kind.WORD)); + VirtualStackSlot s1 = frameMapBuilder.allocateSpillSlot(a.getLIRKind()); + VirtualStackSlot s2 = frameMapBuilder.allocateSpillSlot(LIRKind.value(AMD64Kind.WORD)); // move stuff around gen.emitMoveConstant(s2, JavaConstant.forShort(Short.MIN_VALUE)); gen.emitMove(s1, a);
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64AddressLowering.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64AddressLowering.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.compiler.amd64; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.asm.amd64.AMD64Address.Scale;
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64AddressNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64AddressNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.compiler.amd64; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address.Scale; import com.oracle.graal.graph.NodeClass;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64ArithmeticLIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,896 @@ +/* + * Copyright (c) 2009, 2015, 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.compiler.amd64; + +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.ADD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.AND; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.OR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.SUB; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.XOR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp.NEG; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp.NOT; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.BSF; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.BSR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.LZCNT; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOV; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSX; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXB; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVZX; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVZXB; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.POPCNT; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.TZCNT; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.ROL; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.ROR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.SAR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.SHL; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.SHR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.DWORD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.PD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.PS; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.QWORD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SS; +import static com.oracle.graal.lir.LIRValueUtil.asConstantValue; +import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; +import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; +import static com.oracle.graal.lir.amd64.AMD64Arithmetic.DREM; +import static com.oracle.graal.lir.amd64.AMD64Arithmetic.FREM; +import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.COS; +import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.LOG; +import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.LOG10; +import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.SIN; +import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.TAN; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; + +import com.oracle.graal.asm.NumUtil; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MROp; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMIOp; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift; +import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize; +import com.oracle.graal.asm.amd64.AMD64Assembler.SSEOp; +import com.oracle.graal.compiler.common.calc.FloatConvert; +import com.oracle.graal.lir.ConstantValue; +import com.oracle.graal.lir.LIRFrameState; +import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.amd64.AMD64AddressValue; +import com.oracle.graal.lir.amd64.AMD64Arithmetic.FPDivRemOp; +import com.oracle.graal.lir.amd64.AMD64ArithmeticLIRGeneratorTool; +import com.oracle.graal.lir.amd64.AMD64Binary; +import com.oracle.graal.lir.amd64.AMD64ClearRegisterOp; +import com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp; +import com.oracle.graal.lir.amd64.AMD64MulDivOp; +import com.oracle.graal.lir.amd64.AMD64ShiftOp; +import com.oracle.graal.lir.amd64.AMD64SignExtendOp; +import com.oracle.graal.lir.amd64.AMD64Unary; +import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; + +/** + * This class implements the AMD64 specific portion of the LIR generator. + */ +public class AMD64ArithmeticLIRGenerator extends ArithmeticLIRGenerator implements AMD64ArithmeticLIRGeneratorTool { + + private static final RegisterValue RCX_I = AMD64.rcx.asValue(LIRKind.value(AMD64Kind.DWORD)); + + @Override + public Variable emitNegate(Value inputVal) { + AllocatableValue input = getLIRGen().asAllocatable(inputVal); + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + switch ((AMD64Kind) input.getPlatformKind()) { + case DWORD: + getLIRGen().append(new AMD64Unary.MOp(NEG, DWORD, result, input)); + break; + case QWORD: + getLIRGen().append(new AMD64Unary.MOp(NEG, QWORD, result, input)); + break; + case SINGLE: + getLIRGen().append(new AMD64Binary.DataOp(SSEOp.XOR, PS, result, input, JavaConstant.forFloat(Float.intBitsToFloat(0x80000000)), 16)); + break; + case DOUBLE: + getLIRGen().append(new AMD64Binary.DataOp(SSEOp.XOR, PD, result, input, JavaConstant.forDouble(Double.longBitsToDouble(0x8000000000000000L)), 16)); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return result; + } + + @Override + public Variable emitNot(Value inputVal) { + AllocatableValue input = getLIRGen().asAllocatable(inputVal); + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + switch ((AMD64Kind) input.getPlatformKind()) { + case DWORD: + getLIRGen().append(new AMD64Unary.MOp(NOT, DWORD, result, input)); + break; + case QWORD: + getLIRGen().append(new AMD64Unary.MOp(NOT, QWORD, result, input)); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return result; + } + + private Variable emitBinary(LIRKind resultKind, AMD64BinaryArithmetic op, OperandSize size, boolean commutative, Value a, Value b, boolean setFlags) { + if (isJavaConstant(b)) { + return emitBinaryConst(resultKind, op, size, commutative, getLIRGen().asAllocatable(a), asConstantValue(b), setFlags); + } else if (commutative && isJavaConstant(a)) { + return emitBinaryConst(resultKind, op, size, commutative, getLIRGen().asAllocatable(b), asConstantValue(a), setFlags); + } else { + return emitBinaryVar(resultKind, op.getRMOpcode(size), size, commutative, getLIRGen().asAllocatable(a), getLIRGen().asAllocatable(b)); + } + } + + private Variable emitBinary(LIRKind resultKind, AMD64RMOp op, OperandSize size, boolean commutative, Value a, Value b) { + if (isJavaConstant(b)) { + return emitBinaryConst(resultKind, op, size, getLIRGen().asAllocatable(a), asJavaConstant(b)); + } else if (commutative && isJavaConstant(a)) { + return emitBinaryConst(resultKind, op, size, getLIRGen().asAllocatable(b), asJavaConstant(a)); + } else { + return emitBinaryVar(resultKind, op, size, commutative, getLIRGen().asAllocatable(a), getLIRGen().asAllocatable(b)); + } + } + + private Variable emitBinaryConst(LIRKind resultKind, AMD64BinaryArithmetic op, OperandSize size, boolean commutative, AllocatableValue a, ConstantValue b, boolean setFlags) { + long value = b.getJavaConstant().asLong(); + if (NumUtil.isInt(value)) { + Variable result = getLIRGen().newVariable(resultKind); + int constant = (int) value; + + if (!setFlags) { + AMD64MOp mop = getMOp(op, constant); + if (mop != null) { + getLIRGen().append(new AMD64Unary.MOp(mop, size, result, a)); + return result; + } + } + + getLIRGen().append(new AMD64Binary.ConstOp(op, size, result, a, constant)); + return result; + } else { + return emitBinaryVar(resultKind, op.getRMOpcode(size), size, commutative, a, getLIRGen().asAllocatable(b)); + } + } + + private static AMD64MOp getMOp(AMD64BinaryArithmetic op, int constant) { + if (constant == 1) { + if (op.equals(AMD64BinaryArithmetic.ADD)) { + return AMD64MOp.INC; + } + if (op.equals(AMD64BinaryArithmetic.SUB)) { + return AMD64MOp.DEC; + } + } else if (constant == -1) { + if (op.equals(AMD64BinaryArithmetic.ADD)) { + return AMD64MOp.DEC; + } + if (op.equals(AMD64BinaryArithmetic.SUB)) { + return AMD64MOp.INC; + } + } + return null; + } + + private Variable emitBinaryConst(LIRKind resultKind, AMD64RMOp op, OperandSize size, AllocatableValue a, JavaConstant b) { + Variable result = getLIRGen().newVariable(resultKind); + getLIRGen().append(new AMD64Binary.DataOp(op, size, result, a, b)); + return result; + } + + private Variable emitBinaryVar(LIRKind resultKind, AMD64RMOp op, OperandSize size, boolean commutative, AllocatableValue a, AllocatableValue b) { + Variable result = getLIRGen().newVariable(resultKind); + if (commutative) { + getLIRGen().append(new AMD64Binary.CommutativeOp(op, size, result, a, b)); + } else { + getLIRGen().append(new AMD64Binary.Op(op, size, result, a, b)); + } + return result; + } + + @Override + protected boolean isNumericInteger(PlatformKind kind) { + return ((AMD64Kind) kind).isInteger(); + } + + @Override + public Variable emitAdd(LIRKind resultKind, Value a, Value b, boolean setFlags) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitBinary(resultKind, ADD, DWORD, true, a, b, setFlags); + case QWORD: + return emitBinary(resultKind, ADD, QWORD, true, a, b, setFlags); + case SINGLE: + return emitBinary(resultKind, SSEOp.ADD, SS, true, a, b); + case DOUBLE: + return emitBinary(resultKind, SSEOp.ADD, SD, true, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Variable emitSub(LIRKind resultKind, Value a, Value b, boolean setFlags) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitBinary(resultKind, SUB, DWORD, false, a, b, setFlags); + case QWORD: + return emitBinary(resultKind, SUB, QWORD, false, a, b, setFlags); + case SINGLE: + return emitBinary(resultKind, SSEOp.SUB, SS, false, a, b); + case DOUBLE: + return emitBinary(resultKind, SSEOp.SUB, SD, false, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + private Variable emitIMULConst(OperandSize size, AllocatableValue a, ConstantValue b) { + long value = b.getJavaConstant().asLong(); + if (NumUtil.isInt(value)) { + int imm = (int) value; + AMD64RMIOp op; + if (NumUtil.isByte(imm)) { + op = AMD64RMIOp.IMUL_SX; + } else { + op = AMD64RMIOp.IMUL; + } + + Variable ret = getLIRGen().newVariable(LIRKind.combine(a, b)); + getLIRGen().append(new AMD64Binary.RMIOp(op, size, ret, a, imm)); + return ret; + } else { + return emitBinaryVar(LIRKind.combine(a, b), AMD64RMOp.IMUL, size, true, a, getLIRGen().asAllocatable(b)); + } + } + + private Variable emitIMUL(OperandSize size, Value a, Value b) { + if (isJavaConstant(b)) { + return emitIMULConst(size, getLIRGen().asAllocatable(a), asConstantValue(b)); + } else if (isJavaConstant(a)) { + return emitIMULConst(size, getLIRGen().asAllocatable(b), asConstantValue(a)); + } else { + return emitBinaryVar(LIRKind.combine(a, b), AMD64RMOp.IMUL, size, true, getLIRGen().asAllocatable(a), getLIRGen().asAllocatable(b)); + } + } + + @Override + public Variable emitMul(Value a, Value b, boolean setFlags) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitIMUL(DWORD, a, b); + case QWORD: + return emitIMUL(QWORD, a, b); + case SINGLE: + return emitBinary(LIRKind.combine(a, b), SSEOp.MUL, SS, true, a, b); + case DOUBLE: + return emitBinary(LIRKind.combine(a, b), SSEOp.MUL, SD, true, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + private RegisterValue moveToReg(Register reg, Value v) { + RegisterValue ret = reg.asValue(v.getLIRKind()); + getLIRGen().emitMove(ret, v); + return ret; + } + + private Value emitMulHigh(AMD64MOp opcode, OperandSize size, Value a, Value b) { + AMD64MulDivOp mulHigh = getLIRGen().append(new AMD64MulDivOp(opcode, size, LIRKind.combine(a, b), moveToReg(AMD64.rax, a), getLIRGen().asAllocatable(b))); + return getLIRGen().emitMove(mulHigh.getHighResult()); + } + + @Override + public Value emitMulHigh(Value a, Value b) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitMulHigh(AMD64MOp.IMUL, DWORD, a, b); + case QWORD: + return emitMulHigh(AMD64MOp.IMUL, QWORD, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Value emitUMulHigh(Value a, Value b) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitMulHigh(AMD64MOp.MUL, DWORD, a, b); + case QWORD: + return emitMulHigh(AMD64MOp.MUL, QWORD, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + public Value emitBinaryMemory(AMD64RMOp op, OperandSize size, AllocatableValue a, AMD64AddressValue location, LIRFrameState state) { + Variable result = getLIRGen().newVariable(LIRKind.combine(a)); + getLIRGen().append(new AMD64Binary.MemoryOp(op, size, result, a, location, state)); + return result; + } + + protected Value emitConvertMemoryOp(PlatformKind kind, AMD64RMOp op, OperandSize size, AMD64AddressValue address, LIRFrameState state) { + Variable result = getLIRGen().newVariable(LIRKind.value(kind)); + getLIRGen().append(new AMD64Unary.MemoryOp(op, size, result, address, state)); + return result; + } + + protected Value emitZeroExtendMemory(AMD64Kind memoryKind, int resultBits, AMD64AddressValue address, LIRFrameState state) { + // Issue a zero extending load of the proper bit size and set the result to + // the proper kind. + Variable result = getLIRGen().newVariable(LIRKind.value(resultBits == 32 ? AMD64Kind.DWORD : AMD64Kind.QWORD)); + switch (memoryKind) { + case BYTE: + getLIRGen().append(new AMD64Unary.MemoryOp(MOVZXB, DWORD, result, address, state)); + break; + case WORD: + getLIRGen().append(new AMD64Unary.MemoryOp(MOVZX, DWORD, result, address, state)); + break; + case DWORD: + getLIRGen().append(new AMD64Unary.MemoryOp(MOV, DWORD, result, address, state)); + break; + case QWORD: + getLIRGen().append(new AMD64Unary.MemoryOp(MOV, QWORD, result, address, state)); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return result; + } + + private AMD64MulDivOp emitIDIV(OperandSize size, Value a, Value b, LIRFrameState state) { + LIRKind kind = LIRKind.combine(a, b); + + AMD64SignExtendOp sx = getLIRGen().append(new AMD64SignExtendOp(size, kind, moveToReg(AMD64.rax, a))); + return getLIRGen().append(new AMD64MulDivOp(AMD64MOp.IDIV, size, kind, sx.getHighResult(), sx.getLowResult(), getLIRGen().asAllocatable(b), state)); + } + + private AMD64MulDivOp emitDIV(OperandSize size, Value a, Value b, LIRFrameState state) { + LIRKind kind = LIRKind.combine(a, b); + + RegisterValue rax = moveToReg(AMD64.rax, a); + RegisterValue rdx = AMD64.rdx.asValue(kind); + getLIRGen().append(new AMD64ClearRegisterOp(size, rdx)); + return getLIRGen().append(new AMD64MulDivOp(AMD64MOp.DIV, size, kind, rdx, rax, getLIRGen().asAllocatable(b), state)); + } + + public Value[] emitIntegerDivRem(Value a, Value b, LIRFrameState state) { + AMD64MulDivOp op; + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + op = emitIDIV(DWORD, a, b, state); + break; + case QWORD: + op = emitIDIV(QWORD, a, b, state); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return new Value[]{getLIRGen().emitMove(op.getQuotient()), getLIRGen().emitMove(op.getRemainder())}; + } + + @Override + public Value emitDiv(Value a, Value b, LIRFrameState state) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + AMD64MulDivOp op = emitIDIV(DWORD, a, b, state); + return getLIRGen().emitMove(op.getQuotient()); + case QWORD: + AMD64MulDivOp lop = emitIDIV(QWORD, a, b, state); + return getLIRGen().emitMove(lop.getQuotient()); + case SINGLE: + return emitBinary(LIRKind.combine(a, b), SSEOp.DIV, SS, false, a, b); + case DOUBLE: + return emitBinary(LIRKind.combine(a, b), SSEOp.DIV, SD, false, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Value emitRem(Value a, Value b, LIRFrameState state) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + AMD64MulDivOp op = emitIDIV(DWORD, a, b, state); + return getLIRGen().emitMove(op.getRemainder()); + case QWORD: + AMD64MulDivOp lop = emitIDIV(QWORD, a, b, state); + return getLIRGen().emitMove(lop.getRemainder()); + case SINGLE: { + Variable result = getLIRGen().newVariable(LIRKind.combine(a, b)); + getLIRGen().append(new FPDivRemOp(FREM, result, getLIRGen().load(a), getLIRGen().load(b))); + return result; + } + case DOUBLE: { + Variable result = getLIRGen().newVariable(LIRKind.combine(a, b)); + getLIRGen().append(new FPDivRemOp(DREM, result, getLIRGen().load(a), getLIRGen().load(b))); + return result; + } + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Variable emitUDiv(Value a, Value b, LIRFrameState state) { + AMD64MulDivOp op; + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + op = emitDIV(DWORD, a, b, state); + break; + case QWORD: + op = emitDIV(QWORD, a, b, state); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return getLIRGen().emitMove(op.getQuotient()); + } + + @Override + public Variable emitURem(Value a, Value b, LIRFrameState state) { + AMD64MulDivOp op; + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + op = emitDIV(DWORD, a, b, state); + break; + case QWORD: + op = emitDIV(QWORD, a, b, state); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return getLIRGen().emitMove(op.getRemainder()); + } + + @Override + public Variable emitAnd(Value a, Value b) { + LIRKind resultKind = LIRKind.combine(a, b); + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitBinary(resultKind, AND, DWORD, true, a, b, false); + case QWORD: + return emitBinary(resultKind, AND, QWORD, true, a, b, false); + case SINGLE: + return emitBinary(resultKind, SSEOp.AND, PS, true, a, b); + case DOUBLE: + return emitBinary(resultKind, SSEOp.AND, PD, true, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Variable emitOr(Value a, Value b) { + LIRKind resultKind = LIRKind.combine(a, b); + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitBinary(resultKind, OR, DWORD, true, a, b, false); + case QWORD: + return emitBinary(resultKind, OR, QWORD, true, a, b, false); + case SINGLE: + return emitBinary(resultKind, SSEOp.OR, PS, true, a, b); + case DOUBLE: + return emitBinary(resultKind, SSEOp.OR, PD, true, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Variable emitXor(Value a, Value b) { + LIRKind resultKind = LIRKind.combine(a, b); + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitBinary(resultKind, XOR, DWORD, true, a, b, false); + case QWORD: + return emitBinary(resultKind, XOR, QWORD, true, a, b, false); + case SINGLE: + return emitBinary(resultKind, SSEOp.XOR, PS, true, a, b); + case DOUBLE: + return emitBinary(resultKind, SSEOp.XOR, PD, true, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + private Variable emitShift(AMD64Shift op, OperandSize size, Value a, Value b) { + Variable result = getLIRGen().newVariable(LIRKind.combine(a, b).changeType(a.getPlatformKind())); + AllocatableValue input = getLIRGen().asAllocatable(a); + if (isJavaConstant(b)) { + JavaConstant c = asJavaConstant(b); + if (c.asLong() == 1) { + getLIRGen().append(new AMD64Unary.MOp(op.m1Op, size, result, input)); + } else { + /* + * c is implicitly masked to 5 or 6 bits by the CPU, so casting it to (int) is + * always correct, even without the NumUtil.is32bit() test. + */ + getLIRGen().append(new AMD64Binary.ConstOp(op.miOp, size, result, input, (int) c.asLong())); + } + } else { + getLIRGen().emitMove(RCX_I, b); + getLIRGen().append(new AMD64ShiftOp(op.mcOp, size, result, input, RCX_I)); + } + return result; + } + + @Override + public Variable emitShl(Value a, Value b) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitShift(SHL, DWORD, a, b); + case QWORD: + return emitShift(SHL, QWORD, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Variable emitShr(Value a, Value b) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitShift(SAR, DWORD, a, b); + case QWORD: + return emitShift(SAR, QWORD, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Variable emitUShr(Value a, Value b) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitShift(SHR, DWORD, a, b); + case QWORD: + return emitShift(SHR, QWORD, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + public Variable emitRol(Value a, Value b) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitShift(ROL, DWORD, a, b); + case QWORD: + return emitShift(ROL, QWORD, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + public Variable emitRor(Value a, Value b) { + switch ((AMD64Kind) a.getPlatformKind()) { + case DWORD: + return emitShift(ROR, DWORD, a, b); + case QWORD: + return emitShift(ROR, QWORD, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + private AllocatableValue emitConvertOp(LIRKind kind, AMD64RMOp op, OperandSize size, Value input) { + Variable result = getLIRGen().newVariable(kind); + getLIRGen().append(new AMD64Unary.RMOp(op, size, result, getLIRGen().asAllocatable(input))); + return result; + } + + private AllocatableValue emitConvertOp(LIRKind kind, AMD64MROp op, OperandSize size, Value input) { + Variable result = getLIRGen().newVariable(kind); + getLIRGen().append(new AMD64Unary.MROp(op, size, result, getLIRGen().asAllocatable(input))); + return result; + } + + @Override + public Value emitReinterpret(LIRKind to, Value inputVal) { + LIRKind from = inputVal.getLIRKind(); + if (to.equals(from)) { + return inputVal; + } + + AllocatableValue input = getLIRGen().asAllocatable(inputVal); + /* + * Conversions between integer to floating point types require moves between CPU and FPU + * registers. + */ + AMD64Kind fromKind = (AMD64Kind) from.getPlatformKind(); + switch ((AMD64Kind) to.getPlatformKind()) { + case DWORD: + switch (fromKind) { + case SINGLE: + return emitConvertOp(to, AMD64MROp.MOVD, DWORD, input); + } + break; + case QWORD: + switch (fromKind) { + case DOUBLE: + return emitConvertOp(to, AMD64MROp.MOVQ, QWORD, input); + } + break; + case SINGLE: + switch (fromKind) { + case DWORD: + return emitConvertOp(to, AMD64RMOp.MOVD, DWORD, input); + } + break; + case DOUBLE: + switch (fromKind) { + case QWORD: + return emitConvertOp(to, AMD64RMOp.MOVQ, QWORD, input); + } + break; + } + throw JVMCIError.shouldNotReachHere(); + } + + public Value emitFloatConvert(FloatConvert op, Value input) { + switch (op) { + case D2F: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.SINGLE), SSEOp.CVTSD2SS, SD, input); + case D2I: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DWORD), SSEOp.CVTTSD2SI, DWORD, input); + case D2L: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.QWORD), SSEOp.CVTTSD2SI, QWORD, input); + case F2D: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DOUBLE), SSEOp.CVTSS2SD, SS, input); + case F2I: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DWORD), SSEOp.CVTTSS2SI, DWORD, input); + case F2L: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.QWORD), SSEOp.CVTTSS2SI, QWORD, input); + case I2D: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DOUBLE), SSEOp.CVTSI2SD, DWORD, input); + case I2F: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.SINGLE), SSEOp.CVTSI2SS, DWORD, input); + case L2D: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DOUBLE), SSEOp.CVTSI2SD, QWORD, input); + case L2F: + return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.SINGLE), SSEOp.CVTSI2SS, QWORD, input); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @Override + public Value emitNarrow(Value inputVal, int bits) { + if (inputVal.getPlatformKind() == AMD64Kind.QWORD && bits <= 32) { + // TODO make it possible to reinterpret Long as Int in LIR without move + return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.DWORD), AMD64RMOp.MOV, DWORD, inputVal); + } else { + return inputVal; + } + } + + @Override + public Value emitSignExtend(Value inputVal, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= 64; + if (fromBits == toBits) { + return inputVal; + } else if (toBits > 32) { + // sign extend to 64 bits + switch (fromBits) { + case 8: + return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.QWORD), MOVSXB, QWORD, inputVal); + case 16: + return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.QWORD), MOVSX, QWORD, inputVal); + case 32: + return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.QWORD), MOVSXD, QWORD, inputVal); + default: + throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + } + } else { + // sign extend to 32 bits (smaller values are internally represented as 32 bit values) + switch (fromBits) { + case 8: + return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.DWORD), MOVSXB, DWORD, inputVal); + case 16: + return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.DWORD), MOVSX, DWORD, inputVal); + case 32: + return inputVal; + default: + throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + } + } + } + + @Override + public Value emitZeroExtend(Value inputVal, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= 64; + if (fromBits == toBits) { + return inputVal; + } else if (fromBits > 32) { + assert inputVal.getPlatformKind() == AMD64Kind.QWORD; + Variable result = getLIRGen().newVariable(LIRKind.combine(inputVal)); + long mask = CodeUtil.mask(fromBits); + getLIRGen().append(new AMD64Binary.DataOp(AND.getRMOpcode(QWORD), QWORD, result, getLIRGen().asAllocatable(inputVal), JavaConstant.forLong(mask))); + return result; + } else { + LIRKind resultKind = LIRKind.combine(inputVal); + if (toBits > 32) { + resultKind = resultKind.changeType(AMD64Kind.QWORD); + } else { + resultKind = resultKind.changeType(AMD64Kind.DWORD); + } + + /* + * Always emit DWORD operations, even if the resultKind is Long. On AMD64, all DWORD + * operations implicitly set the upper half of the register to 0, which is what we want + * anyway. Compared to the QWORD oparations, the encoding of the DWORD operations is + * sometimes one byte shorter. + */ + switch (fromBits) { + case 8: + return emitConvertOp(resultKind, MOVZXB, DWORD, inputVal); + case 16: + return emitConvertOp(resultKind, MOVZX, DWORD, inputVal); + case 32: + return emitConvertOp(resultKind, MOV, DWORD, inputVal); + } + + // odd bit count, fall back on manual masking + Variable result = getLIRGen().newVariable(resultKind); + JavaConstant mask; + if (toBits > 32) { + mask = JavaConstant.forLong(CodeUtil.mask(fromBits)); + } else { + mask = JavaConstant.forInt((int) CodeUtil.mask(fromBits)); + } + getLIRGen().append(new AMD64Binary.DataOp(AND.getRMOpcode(DWORD), DWORD, result, getLIRGen().asAllocatable(inputVal), mask)); + return result; + } + } + + @Override + public Variable emitBitCount(Value value) { + Variable result = getLIRGen().newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); + assert ((AMD64Kind) value.getPlatformKind()).isInteger(); + if (value.getPlatformKind() == AMD64Kind.QWORD) { + getLIRGen().append(new AMD64Unary.RMOp(POPCNT, QWORD, result, getLIRGen().asAllocatable(value))); + } else { + getLIRGen().append(new AMD64Unary.RMOp(POPCNT, DWORD, result, getLIRGen().asAllocatable(value))); + } + return result; + } + + @Override + public Variable emitBitScanForward(Value value) { + Variable result = getLIRGen().newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); + getLIRGen().append(new AMD64Unary.RMOp(BSF, QWORD, result, getLIRGen().asAllocatable(value))); + return result; + } + + @Override + public Variable emitBitScanReverse(Value value) { + Variable result = getLIRGen().newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); + assert ((AMD64Kind) value.getPlatformKind()).isInteger(); + if (value.getPlatformKind() == AMD64Kind.QWORD) { + getLIRGen().append(new AMD64Unary.RMOp(BSR, QWORD, result, getLIRGen().asAllocatable(value))); + } else { + getLIRGen().append(new AMD64Unary.RMOp(BSR, DWORD, result, getLIRGen().asAllocatable(value))); + } + return result; + } + + @Override + public Value emitCountLeadingZeros(Value value) { + Variable result = getLIRGen().newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); + assert ((AMD64Kind) value.getPlatformKind()).isInteger(); + if (value.getPlatformKind() == AMD64Kind.QWORD) { + getLIRGen().append(new AMD64Unary.RMOp(LZCNT, QWORD, result, getLIRGen().asAllocatable(value))); + } else { + getLIRGen().append(new AMD64Unary.RMOp(LZCNT, DWORD, result, getLIRGen().asAllocatable(value))); + } + return result; + } + + @Override + public Value emitCountTrailingZeros(Value value) { + Variable result = getLIRGen().newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); + assert ((AMD64Kind) value.getPlatformKind()).isInteger(); + if (value.getPlatformKind() == AMD64Kind.QWORD) { + getLIRGen().append(new AMD64Unary.RMOp(TZCNT, QWORD, result, getLIRGen().asAllocatable(value))); + } else { + getLIRGen().append(new AMD64Unary.RMOp(TZCNT, DWORD, result, getLIRGen().asAllocatable(value))); + } + return result; + } + + @Override + public Value emitMathAbs(Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + switch ((AMD64Kind) input.getPlatformKind()) { + case SINGLE: + getLIRGen().append(new AMD64Binary.DataOp(SSEOp.AND, PS, result, getLIRGen().asAllocatable(input), JavaConstant.forFloat(Float.intBitsToFloat(0x7FFFFFFF)), 16)); + break; + case DOUBLE: + getLIRGen().append(new AMD64Binary.DataOp(SSEOp.AND, PD, result, getLIRGen().asAllocatable(input), JavaConstant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL)), 16)); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return result; + } + + @Override + public Value emitMathSqrt(Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + switch ((AMD64Kind) input.getPlatformKind()) { + case SINGLE: + getLIRGen().append(new AMD64Unary.RMOp(SSEOp.SQRT, SS, result, getLIRGen().asAllocatable(input))); + break; + case DOUBLE: + getLIRGen().append(new AMD64Unary.RMOp(SSEOp.SQRT, SD, result, getLIRGen().asAllocatable(input))); + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return result; + } + + @Override + public Value emitMathLog(Value input, boolean base10) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + getLIRGen().append(new AMD64MathIntrinsicOp(base10 ? LOG10 : LOG, result, getLIRGen().asAllocatable(input))); + return result; + } + + @Override + public Value emitMathCos(Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + getLIRGen().append(new AMD64MathIntrinsicOp(COS, result, getLIRGen().asAllocatable(input))); + return result; + } + + @Override + public Value emitMathSin(Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + getLIRGen().append(new AMD64MathIntrinsicOp(SIN, result, getLIRGen().asAllocatable(input))); + return result; + } + + @Override + public Value emitMathTan(Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + getLIRGen().append(new AMD64MathIntrinsicOp(TAN, result, getLIRGen().asAllocatable(input))); + return result; + } +}
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,34 +23,14 @@ package com.oracle.graal.compiler.amd64; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.ADD; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.AND; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.CMP; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.OR; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.SUB; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.XOR; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp.NEG; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp.NOT; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.BSF; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.BSR; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.LZCNT; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOV; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSD; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSS; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSX; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXB; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXD; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVZX; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVZXB; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.POPCNT; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.TEST; import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.TESTB; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.TZCNT; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.ROL; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.ROR; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.SAR; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.SHL; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift.SHR; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.BYTE; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.DWORD; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.PD; @@ -62,52 +42,37 @@ import static com.oracle.graal.lir.LIRValueUtil.asConstantValue; import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static com.oracle.graal.lir.amd64.AMD64Arithmetic.DREM; -import static com.oracle.graal.lir.amd64.AMD64Arithmetic.FREM; -import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.COS; -import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.LOG; -import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.LOG10; -import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.SIN; -import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.TAN; -import static jdk.internal.jvmci.code.ValueUtil.isAllocatableValue; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.ValueUtil.isAllocatableValue; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -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.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.NumUtil; -import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MIOp; -import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MROp; -import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMIOp; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp; -import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64Shift; import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize; import com.oracle.graal.asm.amd64.AMD64Assembler.SSEOp; import com.oracle.graal.compiler.common.calc.Condition; -import com.oracle.graal.compiler.common.calc.FloatConvert; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.common.spi.LIRKindTool; import com.oracle.graal.compiler.common.util.Util; @@ -119,15 +84,12 @@ import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.SwitchStrategy; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.amd64.AMD64AddressValue; -import com.oracle.graal.lir.amd64.AMD64Arithmetic.FPDivRemOp; -import com.oracle.graal.lir.amd64.AMD64ArithmeticLIRGenerator; import com.oracle.graal.lir.amd64.AMD64ArrayEqualsOp; -import com.oracle.graal.lir.amd64.AMD64Binary; import com.oracle.graal.lir.amd64.AMD64BinaryConsumer; import com.oracle.graal.lir.amd64.AMD64ByteSwapOp; import com.oracle.graal.lir.amd64.AMD64Call; -import com.oracle.graal.lir.amd64.AMD64ClearRegisterOp; import com.oracle.graal.lir.amd64.AMD64ControlFlow.BranchOp; import com.oracle.graal.lir.amd64.AMD64ControlFlow.CondMoveOp; import com.oracle.graal.lir.amd64.AMD64ControlFlow.FloatBranchOp; @@ -136,7 +98,6 @@ import com.oracle.graal.lir.amd64.AMD64ControlFlow.StrategySwitchOp; import com.oracle.graal.lir.amd64.AMD64ControlFlow.TableSwitchOp; import com.oracle.graal.lir.amd64.AMD64LIRInstruction; -import com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp; import com.oracle.graal.lir.amd64.AMD64Move; import com.oracle.graal.lir.amd64.AMD64Move.AMD64PushPopStackMove; import com.oracle.graal.lir.amd64.AMD64Move.AMD64StackMove; @@ -148,9 +109,6 @@ import com.oracle.graal.lir.amd64.AMD64Move.MoveFromRegOp; import com.oracle.graal.lir.amd64.AMD64Move.MoveToRegOp; import com.oracle.graal.lir.amd64.AMD64Move.StackLeaOp; -import com.oracle.graal.lir.amd64.AMD64MulDivOp; -import com.oracle.graal.lir.amd64.AMD64ShiftOp; -import com.oracle.graal.lir.amd64.AMD64SignExtendOp; import com.oracle.graal.lir.amd64.AMD64Unary; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.gen.LIRGenerationResult; @@ -161,18 +119,16 @@ /** * This class implements the AMD64 specific portion of the LIR generator. */ -public abstract class AMD64LIRGenerator extends LIRGenerator implements AMD64ArithmeticLIRGenerator { - - private static final RegisterValue RCX_I = AMD64.rcx.asValue(LIRKind.value(AMD64Kind.DWORD)); +public abstract class AMD64LIRGenerator extends LIRGenerator { private AMD64SpillMoveFactory moveFactory; private Map<PlatformKind.Key, RegisterBackupPair> categorized; private static class RegisterBackupPair { public final Register register; - public final StackSlotValue backupSlot; + public final VirtualStackSlot backupSlot; - RegisterBackupPair(Register register, StackSlotValue backupSlot) { + RegisterBackupPair(Register register, VirtualStackSlot backupSlot) { this.register = register; this.backupSlot = backupSlot; } @@ -196,8 +152,8 @@ } } - public AMD64LIRGenerator(LIRKindTool lirKindTool, Providers providers, CallingConvention cc, LIRGenerationResult lirGenRes) { - super(lirKindTool, providers, cc, lirGenRes); + public AMD64LIRGenerator(LIRKindTool lirKindTool, AMD64ArithmeticLIRGenerator arithmeticLIRGen, Providers providers, CallingConvention cc, LIRGenerationResult lirGenRes) { + super(lirKindTool, arithmeticLIRGen, providers, cc, lirGenRes); } public SpillMoveFactory getSpillMoveFactory() { @@ -287,12 +243,12 @@ default: RegisterBackupPair backup = getScratchRegister(input.getPlatformKind()); Register scratchRegister = backup.register; - StackSlotValue backupSlot = backup.backupSlot; + VirtualStackSlot backupSlot = backup.backupSlot; return createStackMove(result, input, scratchRegister, backupSlot); } } - protected LIRInstruction createStackMove(AllocatableValue result, AllocatableValue input, Register scratchRegister, StackSlotValue backupSlot) { + protected LIRInstruction createStackMove(AllocatableValue result, AllocatableValue input, Register scratchRegister, AllocatableValue backupSlot) { return new AMD64StackMove(result, input, scratchRegister, backupSlot); } @@ -354,9 +310,9 @@ } @Override - public Variable emitAddress(StackSlotValue address) { + public Variable emitAddress(AllocatableValue stackslot) { Variable result = newVariable(LIRKind.value(target().arch.getWordKind())); - append(new StackLeaOp(result, address)); + append(new StackLeaOp(result, stackslot)); return result; } @@ -727,679 +683,6 @@ } @Override - public Variable emitNegate(Value inputVal) { - AllocatableValue input = asAllocatable(inputVal); - Variable result = newVariable(LIRKind.combine(input)); - switch ((AMD64Kind) input.getPlatformKind()) { - case DWORD: - append(new AMD64Unary.MOp(NEG, DWORD, result, input)); - break; - case QWORD: - append(new AMD64Unary.MOp(NEG, QWORD, result, input)); - break; - case SINGLE: - append(new AMD64Binary.DataOp(SSEOp.XOR, PS, result, input, JavaConstant.forFloat(Float.intBitsToFloat(0x80000000)), 16)); - break; - case DOUBLE: - append(new AMD64Binary.DataOp(SSEOp.XOR, PD, result, input, JavaConstant.forDouble(Double.longBitsToDouble(0x8000000000000000L)), 16)); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return result; - } - - @Override - public Variable emitNot(Value inputVal) { - AllocatableValue input = asAllocatable(inputVal); - Variable result = newVariable(LIRKind.combine(input)); - switch ((AMD64Kind) input.getPlatformKind()) { - case DWORD: - append(new AMD64Unary.MOp(NOT, DWORD, result, input)); - break; - case QWORD: - append(new AMD64Unary.MOp(NOT, QWORD, result, input)); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return result; - } - - private Variable emitBinary(LIRKind resultKind, AMD64BinaryArithmetic op, OperandSize size, boolean commutative, Value a, Value b, boolean setFlags) { - if (isJavaConstant(b)) { - return emitBinaryConst(resultKind, op, size, commutative, asAllocatable(a), asConstantValue(b), setFlags); - } else if (commutative && isJavaConstant(a)) { - return emitBinaryConst(resultKind, op, size, commutative, asAllocatable(b), asConstantValue(a), setFlags); - } else { - return emitBinaryVar(resultKind, op.getRMOpcode(size), size, commutative, asAllocatable(a), asAllocatable(b)); - } - } - - private Variable emitBinary(LIRKind resultKind, AMD64RMOp op, OperandSize size, boolean commutative, Value a, Value b) { - if (isJavaConstant(b)) { - return emitBinaryConst(resultKind, op, size, asAllocatable(a), asJavaConstant(b)); - } else if (commutative && isJavaConstant(a)) { - return emitBinaryConst(resultKind, op, size, asAllocatable(b), asJavaConstant(a)); - } else { - return emitBinaryVar(resultKind, op, size, commutative, asAllocatable(a), asAllocatable(b)); - } - } - - private Variable emitBinaryConst(LIRKind resultKind, AMD64BinaryArithmetic op, OperandSize size, boolean commutative, AllocatableValue a, ConstantValue b, boolean setFlags) { - long value = b.getJavaConstant().asLong(); - if (NumUtil.isInt(value)) { - Variable result = newVariable(resultKind); - int constant = (int) value; - - if (!setFlags) { - AMD64MOp mop = getMOp(op, constant); - if (mop != null) { - append(new AMD64Unary.MOp(mop, size, result, a)); - return result; - } - } - - append(new AMD64Binary.ConstOp(op, size, result, a, constant)); - return result; - } else { - return emitBinaryVar(resultKind, op.getRMOpcode(size), size, commutative, a, asAllocatable(b)); - } - } - - private static AMD64MOp getMOp(AMD64BinaryArithmetic op, int constant) { - if (constant == 1) { - if (op.equals(AMD64BinaryArithmetic.ADD)) { - return AMD64MOp.INC; - } - if (op.equals(AMD64BinaryArithmetic.SUB)) { - return AMD64MOp.DEC; - } - } else if (constant == -1) { - if (op.equals(AMD64BinaryArithmetic.ADD)) { - return AMD64MOp.DEC; - } - if (op.equals(AMD64BinaryArithmetic.SUB)) { - return AMD64MOp.INC; - } - } - return null; - } - - private Variable emitBinaryConst(LIRKind resultKind, AMD64RMOp op, OperandSize size, AllocatableValue a, JavaConstant b) { - Variable result = newVariable(resultKind); - append(new AMD64Binary.DataOp(op, size, result, a, b)); - return result; - } - - private Variable emitBinaryVar(LIRKind resultKind, AMD64RMOp op, OperandSize size, boolean commutative, AllocatableValue a, AllocatableValue b) { - Variable result = newVariable(resultKind); - if (commutative) { - append(new AMD64Binary.CommutativeOp(op, size, result, a, b)); - } else { - append(new AMD64Binary.Op(op, size, result, a, b)); - } - return result; - } - - @Override - protected boolean isNumericInteger(PlatformKind kind) { - return ((AMD64Kind) kind).isInteger(); - } - - @Override - public Variable emitAdd(LIRKind resultKind, Value a, Value b, boolean setFlags) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitBinary(resultKind, ADD, DWORD, true, a, b, setFlags); - case QWORD: - return emitBinary(resultKind, ADD, QWORD, true, a, b, setFlags); - case SINGLE: - return emitBinary(resultKind, SSEOp.ADD, SS, true, a, b); - case DOUBLE: - return emitBinary(resultKind, SSEOp.ADD, SD, true, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Variable emitSub(LIRKind resultKind, Value a, Value b, boolean setFlags) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitBinary(resultKind, SUB, DWORD, false, a, b, setFlags); - case QWORD: - return emitBinary(resultKind, SUB, QWORD, false, a, b, setFlags); - case SINGLE: - return emitBinary(resultKind, SSEOp.SUB, SS, false, a, b); - case DOUBLE: - return emitBinary(resultKind, SSEOp.SUB, SD, false, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - private Variable emitIMULConst(OperandSize size, AllocatableValue a, ConstantValue b) { - long value = b.getJavaConstant().asLong(); - if (NumUtil.isInt(value)) { - int imm = (int) value; - AMD64RMIOp op; - if (NumUtil.isByte(imm)) { - op = AMD64RMIOp.IMUL_SX; - } else { - op = AMD64RMIOp.IMUL; - } - - Variable ret = newVariable(LIRKind.combine(a, b)); - append(new AMD64Binary.RMIOp(op, size, ret, a, imm)); - return ret; - } else { - return emitBinaryVar(LIRKind.combine(a, b), AMD64RMOp.IMUL, size, true, a, asAllocatable(b)); - } - } - - private Variable emitIMUL(OperandSize size, Value a, Value b) { - if (isJavaConstant(b)) { - return emitIMULConst(size, asAllocatable(a), asConstantValue(b)); - } else if (isJavaConstant(a)) { - return emitIMULConst(size, asAllocatable(b), asConstantValue(a)); - } else { - return emitBinaryVar(LIRKind.combine(a, b), AMD64RMOp.IMUL, size, true, asAllocatable(a), asAllocatable(b)); - } - } - - @Override - public Variable emitMul(Value a, Value b, boolean setFlags) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitIMUL(DWORD, a, b); - case QWORD: - return emitIMUL(QWORD, a, b); - case SINGLE: - return emitBinary(LIRKind.combine(a, b), SSEOp.MUL, SS, true, a, b); - case DOUBLE: - return emitBinary(LIRKind.combine(a, b), SSEOp.MUL, SD, true, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - private RegisterValue moveToReg(Register reg, Value v) { - RegisterValue ret = reg.asValue(v.getLIRKind()); - emitMove(ret, v); - return ret; - } - - private Value emitMulHigh(AMD64MOp opcode, OperandSize size, Value a, Value b) { - AMD64MulDivOp mulHigh = append(new AMD64MulDivOp(opcode, size, LIRKind.combine(a, b), moveToReg(AMD64.rax, a), asAllocatable(b))); - return emitMove(mulHigh.getHighResult()); - } - - @Override - public Value emitMulHigh(Value a, Value b) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitMulHigh(AMD64MOp.IMUL, DWORD, a, b); - case QWORD: - return emitMulHigh(AMD64MOp.IMUL, QWORD, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Value emitUMulHigh(Value a, Value b) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitMulHigh(AMD64MOp.MUL, DWORD, a, b); - case QWORD: - return emitMulHigh(AMD64MOp.MUL, QWORD, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - public Value emitBinaryMemory(AMD64RMOp op, OperandSize size, AllocatableValue a, AMD64AddressValue location, LIRFrameState state) { - Variable result = newVariable(LIRKind.combine(a)); - append(new AMD64Binary.MemoryOp(op, size, result, a, location, state)); - return result; - } - - protected Value emitConvertMemoryOp(PlatformKind kind, AMD64RMOp op, OperandSize size, AMD64AddressValue address, LIRFrameState state) { - Variable result = newVariable(LIRKind.value(kind)); - append(new AMD64Unary.MemoryOp(op, size, result, address, state)); - return result; - } - - protected Value emitZeroExtendMemory(AMD64Kind memoryKind, int resultBits, AMD64AddressValue address, LIRFrameState state) { - // Issue a zero extending load of the proper bit size and set the result to - // the proper kind. - Variable result = newVariable(LIRKind.value(resultBits == 32 ? AMD64Kind.DWORD : AMD64Kind.QWORD)); - switch (memoryKind) { - case BYTE: - append(new AMD64Unary.MemoryOp(MOVZXB, DWORD, result, address, state)); - break; - case WORD: - append(new AMD64Unary.MemoryOp(MOVZX, DWORD, result, address, state)); - break; - case DWORD: - append(new AMD64Unary.MemoryOp(MOV, DWORD, result, address, state)); - break; - case QWORD: - append(new AMD64Unary.MemoryOp(MOV, QWORD, result, address, state)); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return result; - } - - private AMD64MulDivOp emitIDIV(OperandSize size, Value a, Value b, LIRFrameState state) { - LIRKind kind = LIRKind.combine(a, b); - - AMD64SignExtendOp sx = append(new AMD64SignExtendOp(size, kind, moveToReg(AMD64.rax, a))); - return append(new AMD64MulDivOp(AMD64MOp.IDIV, size, kind, sx.getHighResult(), sx.getLowResult(), asAllocatable(b), state)); - } - - private AMD64MulDivOp emitDIV(OperandSize size, Value a, Value b, LIRFrameState state) { - LIRKind kind = LIRKind.combine(a, b); - - RegisterValue rax = moveToReg(AMD64.rax, a); - RegisterValue rdx = AMD64.rdx.asValue(kind); - append(new AMD64ClearRegisterOp(size, rdx)); - return append(new AMD64MulDivOp(AMD64MOp.DIV, size, kind, rdx, rax, asAllocatable(b), state)); - } - - public Value[] emitIntegerDivRem(Value a, Value b, LIRFrameState state) { - AMD64MulDivOp op; - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - op = emitIDIV(DWORD, a, b, state); - break; - case QWORD: - op = emitIDIV(QWORD, a, b, state); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return new Value[]{emitMove(op.getQuotient()), emitMove(op.getRemainder())}; - } - - @Override - public Value emitDiv(Value a, Value b, LIRFrameState state) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - AMD64MulDivOp op = emitIDIV(DWORD, a, b, state); - return emitMove(op.getQuotient()); - case QWORD: - AMD64MulDivOp lop = emitIDIV(QWORD, a, b, state); - return emitMove(lop.getQuotient()); - case SINGLE: - return emitBinary(LIRKind.combine(a, b), SSEOp.DIV, SS, false, a, b); - case DOUBLE: - return emitBinary(LIRKind.combine(a, b), SSEOp.DIV, SD, false, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Value emitRem(Value a, Value b, LIRFrameState state) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - AMD64MulDivOp op = emitIDIV(DWORD, a, b, state); - return emitMove(op.getRemainder()); - case QWORD: - AMD64MulDivOp lop = emitIDIV(QWORD, a, b, state); - return emitMove(lop.getRemainder()); - case SINGLE: { - Variable result = newVariable(LIRKind.combine(a, b)); - append(new FPDivRemOp(FREM, result, load(a), load(b))); - return result; - } - case DOUBLE: { - Variable result = newVariable(LIRKind.combine(a, b)); - append(new FPDivRemOp(DREM, result, load(a), load(b))); - return result; - } - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Variable emitUDiv(Value a, Value b, LIRFrameState state) { - AMD64MulDivOp op; - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - op = emitDIV(DWORD, a, b, state); - break; - case QWORD: - op = emitDIV(QWORD, a, b, state); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return emitMove(op.getQuotient()); - } - - @Override - public Variable emitURem(Value a, Value b, LIRFrameState state) { - AMD64MulDivOp op; - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - op = emitDIV(DWORD, a, b, state); - break; - case QWORD: - op = emitDIV(QWORD, a, b, state); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return emitMove(op.getRemainder()); - } - - @Override - public Variable emitAnd(Value a, Value b) { - LIRKind resultKind = LIRKind.combine(a, b); - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitBinary(resultKind, AND, DWORD, true, a, b, false); - case QWORD: - return emitBinary(resultKind, AND, QWORD, true, a, b, false); - case SINGLE: - return emitBinary(resultKind, SSEOp.AND, PS, true, a, b); - case DOUBLE: - return emitBinary(resultKind, SSEOp.AND, PD, true, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Variable emitOr(Value a, Value b) { - LIRKind resultKind = LIRKind.combine(a, b); - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitBinary(resultKind, OR, DWORD, true, a, b, false); - case QWORD: - return emitBinary(resultKind, OR, QWORD, true, a, b, false); - case SINGLE: - return emitBinary(resultKind, SSEOp.OR, PS, true, a, b); - case DOUBLE: - return emitBinary(resultKind, SSEOp.OR, PD, true, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Variable emitXor(Value a, Value b) { - LIRKind resultKind = LIRKind.combine(a, b); - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitBinary(resultKind, XOR, DWORD, true, a, b, false); - case QWORD: - return emitBinary(resultKind, XOR, QWORD, true, a, b, false); - case SINGLE: - return emitBinary(resultKind, SSEOp.XOR, PS, true, a, b); - case DOUBLE: - return emitBinary(resultKind, SSEOp.XOR, PD, true, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - private Variable emitShift(AMD64Shift op, OperandSize size, Value a, Value b) { - Variable result = newVariable(LIRKind.combine(a, b).changeType(a.getPlatformKind())); - AllocatableValue input = asAllocatable(a); - if (isJavaConstant(b)) { - JavaConstant c = asJavaConstant(b); - if (c.asLong() == 1) { - append(new AMD64Unary.MOp(op.m1Op, size, result, input)); - } else { - /* - * c is implicitly masked to 5 or 6 bits by the CPU, so casting it to (int) is - * always correct, even without the NumUtil.is32bit() test. - */ - append(new AMD64Binary.ConstOp(op.miOp, size, result, input, (int) c.asLong())); - } - } else { - emitMove(RCX_I, b); - append(new AMD64ShiftOp(op.mcOp, size, result, input, RCX_I)); - } - return result; - } - - @Override - public Variable emitShl(Value a, Value b) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitShift(SHL, DWORD, a, b); - case QWORD: - return emitShift(SHL, QWORD, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Variable emitShr(Value a, Value b) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitShift(SAR, DWORD, a, b); - case QWORD: - return emitShift(SAR, QWORD, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Variable emitUShr(Value a, Value b) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitShift(SHR, DWORD, a, b); - case QWORD: - return emitShift(SHR, QWORD, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - public Variable emitRol(Value a, Value b) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitShift(ROL, DWORD, a, b); - case QWORD: - return emitShift(ROL, QWORD, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - public Variable emitRor(Value a, Value b) { - switch ((AMD64Kind) a.getPlatformKind()) { - case DWORD: - return emitShift(ROR, DWORD, a, b); - case QWORD: - return emitShift(ROR, QWORD, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - private AllocatableValue emitConvertOp(LIRKind kind, AMD64RMOp op, OperandSize size, Value input) { - Variable result = newVariable(kind); - append(new AMD64Unary.RMOp(op, size, result, asAllocatable(input))); - return result; - } - - private AllocatableValue emitConvertOp(LIRKind kind, AMD64MROp op, OperandSize size, Value input) { - Variable result = newVariable(kind); - append(new AMD64Unary.MROp(op, size, result, asAllocatable(input))); - return result; - } - - @Override - public Value emitReinterpret(LIRKind to, Value inputVal) { - LIRKind from = inputVal.getLIRKind(); - if (to.equals(from)) { - return inputVal; - } - - AllocatableValue input = asAllocatable(inputVal); - /* - * Conversions between integer to floating point types require moves between CPU and FPU - * registers. - */ - AMD64Kind fromKind = (AMD64Kind) from.getPlatformKind(); - switch ((AMD64Kind) to.getPlatformKind()) { - case DWORD: - switch (fromKind) { - case SINGLE: - return emitConvertOp(to, AMD64MROp.MOVD, DWORD, input); - } - break; - case QWORD: - switch (fromKind) { - case DOUBLE: - return emitConvertOp(to, AMD64MROp.MOVQ, QWORD, input); - } - break; - case SINGLE: - switch (fromKind) { - case DWORD: - return emitConvertOp(to, AMD64RMOp.MOVD, DWORD, input); - } - break; - case DOUBLE: - switch (fromKind) { - case QWORD: - return emitConvertOp(to, AMD64RMOp.MOVQ, QWORD, input); - } - break; - } - throw JVMCIError.shouldNotReachHere(); - } - - public Value emitFloatConvert(FloatConvert op, Value input) { - switch (op) { - case D2F: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.SINGLE), SSEOp.CVTSD2SS, SD, input); - case D2I: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DWORD), SSEOp.CVTTSD2SI, DWORD, input); - case D2L: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.QWORD), SSEOp.CVTTSD2SI, QWORD, input); - case F2D: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DOUBLE), SSEOp.CVTSS2SD, SS, input); - case F2I: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DWORD), SSEOp.CVTTSS2SI, DWORD, input); - case F2L: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.QWORD), SSEOp.CVTTSS2SI, QWORD, input); - case I2D: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DOUBLE), SSEOp.CVTSI2SD, DWORD, input); - case I2F: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.SINGLE), SSEOp.CVTSI2SS, DWORD, input); - case L2D: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.DOUBLE), SSEOp.CVTSI2SD, QWORD, input); - case L2F: - return emitConvertOp(LIRKind.combine(input).changeType(AMD64Kind.SINGLE), SSEOp.CVTSI2SS, QWORD, input); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @Override - public Value emitNarrow(Value inputVal, int bits) { - if (inputVal.getPlatformKind() == AMD64Kind.QWORD && bits <= 32) { - // TODO make it possible to reinterpret Long as Int in LIR without move - return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.DWORD), AMD64RMOp.MOV, DWORD, inputVal); - } else { - return inputVal; - } - } - - @Override - public Value emitSignExtend(Value inputVal, int fromBits, int toBits) { - assert fromBits <= toBits && toBits <= 64; - if (fromBits == toBits) { - return inputVal; - } else if (toBits > 32) { - // sign extend to 64 bits - switch (fromBits) { - case 8: - return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.QWORD), MOVSXB, QWORD, inputVal); - case 16: - return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.QWORD), MOVSX, QWORD, inputVal); - case 32: - return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.QWORD), MOVSXD, QWORD, inputVal); - default: - throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); - } - } else { - // sign extend to 32 bits (smaller values are internally represented as 32 bit values) - switch (fromBits) { - case 8: - return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.DWORD), MOVSXB, DWORD, inputVal); - case 16: - return emitConvertOp(LIRKind.combine(inputVal).changeType(AMD64Kind.DWORD), MOVSX, DWORD, inputVal); - case 32: - return inputVal; - default: - throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); - } - } - } - - @Override - public Value emitZeroExtend(Value inputVal, int fromBits, int toBits) { - assert fromBits <= toBits && toBits <= 64; - if (fromBits == toBits) { - return inputVal; - } else if (fromBits > 32) { - assert inputVal.getPlatformKind() == AMD64Kind.QWORD; - Variable result = newVariable(LIRKind.combine(inputVal)); - long mask = CodeUtil.mask(fromBits); - append(new AMD64Binary.DataOp(AND.getRMOpcode(QWORD), QWORD, result, asAllocatable(inputVal), JavaConstant.forLong(mask))); - return result; - } else { - LIRKind resultKind = LIRKind.combine(inputVal); - if (toBits > 32) { - resultKind = resultKind.changeType(AMD64Kind.QWORD); - } else { - resultKind = resultKind.changeType(AMD64Kind.DWORD); - } - - /* - * Always emit DWORD operations, even if the resultKind is Long. On AMD64, all DWORD - * operations implicitly set the upper half of the register to 0, which is what we want - * anyway. Compared to the QWORD oparations, the encoding of the DWORD operations is - * sometimes one byte shorter. - */ - switch (fromBits) { - case 8: - return emitConvertOp(resultKind, MOVZXB, DWORD, inputVal); - case 16: - return emitConvertOp(resultKind, MOVZX, DWORD, inputVal); - case 32: - return emitConvertOp(resultKind, MOV, DWORD, inputVal); - } - - // odd bit count, fall back on manual masking - Variable result = newVariable(resultKind); - JavaConstant mask; - if (toBits > 32) { - mask = JavaConstant.forLong(CodeUtil.mask(fromBits)); - } else { - mask = JavaConstant.forInt((int) CodeUtil.mask(fromBits)); - } - append(new AMD64Binary.DataOp(AND.getRMOpcode(DWORD), DWORD, result, asAllocatable(inputVal), mask)); - return result; - } - } - - @Override public void emitMembar(int barriers) { int necessaryBarriers = target().arch.requiredBarriers(barriers); if (target().isMP && necessaryBarriers != 0) { @@ -1420,119 +703,6 @@ } @Override - public Variable emitBitCount(Value value) { - Variable result = newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); - assert ((AMD64Kind) value.getPlatformKind()).isInteger(); - if (value.getPlatformKind() == AMD64Kind.QWORD) { - append(new AMD64Unary.RMOp(POPCNT, QWORD, result, asAllocatable(value))); - } else { - append(new AMD64Unary.RMOp(POPCNT, DWORD, result, asAllocatable(value))); - } - return result; - } - - @Override - public Variable emitBitScanForward(Value value) { - Variable result = newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); - append(new AMD64Unary.RMOp(BSF, QWORD, result, asAllocatable(value))); - return result; - } - - @Override - public Variable emitBitScanReverse(Value value) { - Variable result = newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); - assert ((AMD64Kind) value.getPlatformKind()).isInteger(); - if (value.getPlatformKind() == AMD64Kind.QWORD) { - append(new AMD64Unary.RMOp(BSR, QWORD, result, asAllocatable(value))); - } else { - append(new AMD64Unary.RMOp(BSR, DWORD, result, asAllocatable(value))); - } - return result; - } - - public Value emitCountLeadingZeros(Value value) { - Variable result = newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); - assert ((AMD64Kind) value.getPlatformKind()).isInteger(); - if (value.getPlatformKind() == AMD64Kind.QWORD) { - append(new AMD64Unary.RMOp(LZCNT, QWORD, result, asAllocatable(value))); - } else { - append(new AMD64Unary.RMOp(LZCNT, DWORD, result, asAllocatable(value))); - } - return result; - } - - public Value emitCountTrailingZeros(Value value) { - Variable result = newVariable(LIRKind.combine(value).changeType(AMD64Kind.DWORD)); - assert ((AMD64Kind) value.getPlatformKind()).isInteger(); - if (value.getPlatformKind() == AMD64Kind.QWORD) { - append(new AMD64Unary.RMOp(TZCNT, QWORD, result, asAllocatable(value))); - } else { - append(new AMD64Unary.RMOp(TZCNT, DWORD, result, asAllocatable(value))); - } - return result; - } - - @Override - public Value emitMathAbs(Value input) { - Variable result = newVariable(LIRKind.combine(input)); - switch ((AMD64Kind) input.getPlatformKind()) { - case SINGLE: - append(new AMD64Binary.DataOp(SSEOp.AND, PS, result, asAllocatable(input), JavaConstant.forFloat(Float.intBitsToFloat(0x7FFFFFFF)), 16)); - break; - case DOUBLE: - append(new AMD64Binary.DataOp(SSEOp.AND, PD, result, asAllocatable(input), JavaConstant.forDouble(Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL)), 16)); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return result; - } - - @Override - public Value emitMathSqrt(Value input) { - Variable result = newVariable(LIRKind.combine(input)); - switch ((AMD64Kind) input.getPlatformKind()) { - case SINGLE: - append(new AMD64Unary.RMOp(SSEOp.SQRT, SS, result, asAllocatable(input))); - break; - case DOUBLE: - append(new AMD64Unary.RMOp(SSEOp.SQRT, SD, result, asAllocatable(input))); - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return result; - } - - @Override - public Value emitMathLog(Value input, boolean base10) { - Variable result = newVariable(LIRKind.combine(input)); - append(new AMD64MathIntrinsicOp(base10 ? LOG10 : LOG, result, asAllocatable(input))); - return result; - } - - @Override - public Value emitMathCos(Value input) { - Variable result = newVariable(LIRKind.combine(input)); - append(new AMD64MathIntrinsicOp(COS, result, asAllocatable(input))); - return result; - } - - @Override - public Value emitMathSin(Value input) { - Variable result = newVariable(LIRKind.combine(input)); - append(new AMD64MathIntrinsicOp(SIN, result, asAllocatable(input))); - return result; - } - - @Override - public Value emitMathTan(Value input) { - Variable result = newVariable(LIRKind.combine(input)); - append(new AMD64MathIntrinsicOp(TAN, result, asAllocatable(input))); - return result; - } - - @Override public Variable emitByteSwap(Value input) { Variable result = newVariable(LIRKind.combine(input)); append(new AMD64ByteSwapOp(result, input)); @@ -1571,5 +741,4 @@ protected void emitTableSwitch(int lowKey, LabelRef defaultTarget, LabelRef[] targets, Value key) { append(new TableSwitchOp(lowKey, defaultTarget, targets, key, newVariable(LIRKind.value(target().arch.getWordKind())), newVariable(key.getLIRKind()))); } - }
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRKindTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRKindTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.amd64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.compiler.common.spi.LIRKindTool;
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeLIRBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,50 +23,18 @@ package com.oracle.graal.compiler.amd64; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.ADD; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.AND; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.OR; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.SUB; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.XOR; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSX; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXB; -import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXD; -import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.DWORD; -import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.QWORD; -import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SD; -import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SS; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.Value; -import com.oracle.graal.asm.NumUtil; -import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MIOp; -import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp; -import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize; -import com.oracle.graal.asm.amd64.AMD64Assembler.SSEOp; -import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.gen.NodeLIRBuilder; -import com.oracle.graal.compiler.match.ComplexMatchResult; -import com.oracle.graal.compiler.match.MatchRule; -import com.oracle.graal.debug.Debug; import com.oracle.graal.lir.LIRFrameState; -import com.oracle.graal.lir.LabelRef; -import com.oracle.graal.lir.amd64.AMD64AddressValue; -import com.oracle.graal.lir.amd64.AMD64BinaryConsumer; import com.oracle.graal.lir.amd64.AMD64BreakpointOp; import com.oracle.graal.lir.amd64.AMD64Call; -import com.oracle.graal.lir.amd64.AMD64ControlFlow.BranchOp; import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.nodes.BreakpointNode; -import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.DeoptimizingNode; import com.oracle.graal.nodes.FixedNode; import com.oracle.graal.nodes.FixedWithNextNode; @@ -74,25 +42,14 @@ import com.oracle.graal.nodes.IndirectCallTargetNode; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.calc.CompareNode; import com.oracle.graal.nodes.calc.FixedBinaryNode; -import com.oracle.graal.nodes.calc.FloatConvertNode; import com.oracle.graal.nodes.calc.IntegerDivNode; import com.oracle.graal.nodes.calc.IntegerRemNode; -import com.oracle.graal.nodes.calc.LeftShiftNode; -import com.oracle.graal.nodes.calc.NarrowNode; -import com.oracle.graal.nodes.calc.ReinterpretNode; -import com.oracle.graal.nodes.calc.SignExtendNode; -import com.oracle.graal.nodes.calc.UnsignedRightShiftNode; -import com.oracle.graal.nodes.calc.ZeroExtendNode; -import com.oracle.graal.nodes.extended.UnsafeCastNode; -import com.oracle.graal.nodes.memory.Access; -import com.oracle.graal.nodes.memory.WriteNode; public abstract class AMD64NodeLIRBuilder extends NodeLIRBuilder { - public AMD64NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen) { - super(graph, gen); + public AMD64NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen, AMD64NodeMatchRules nodeMatchRules) { + super(graph, gen, nodeMatchRules); } @Override @@ -127,7 +84,7 @@ if (((fixedWithNextNode instanceof IntegerDivNode) || (fixedWithNextNode instanceof IntegerRemNode)) && fixedWithNextNode.getClass() != divRem.getClass()) { FixedBinaryNode otherDivRem = (FixedBinaryNode) fixedWithNextNode; if (otherDivRem.getX() == divRem.getX() && otherDivRem.getY() == divRem.getY() && !hasOperand(otherDivRem)) { - Value[] results = ((AMD64LIRGenerator) gen).emitIntegerDivRem(operand(divRem.getX()), operand(divRem.getY()), state((DeoptimizingNode) valueNode)); + Value[] results = ((AMD64ArithmeticLIRGenerator) gen.getArithmetic()).emitIntegerDivRem(operand(divRem.getX()), operand(divRem.getY()), state((DeoptimizingNode) valueNode)); if (divRem instanceof IntegerDivNode) { setResult(divRem, results[0]); setResult(otherDivRem, results[1]); @@ -144,352 +101,6 @@ return false; } - protected LIRFrameState getState(Access access) { - if (access instanceof DeoptimizingNode) { - return state((DeoptimizingNode) access); - } - return null; - } - - protected AMD64Kind getMemoryKind(Access access) { - return (AMD64Kind) gen.getLIRKind(access.asNode().stamp()).getPlatformKind(); - } - - protected OperandSize getMemorySize(Access access) { - switch (getMemoryKind(access)) { - case BYTE: - return OperandSize.BYTE; - case WORD: - return OperandSize.WORD; - case DWORD: - return OperandSize.DWORD; - case QWORD: - return OperandSize.QWORD; - case SINGLE: - return OperandSize.SS; - case DOUBLE: - return OperandSize.SD; - default: - throw JVMCIError.shouldNotReachHere("unsupported memory access type " + getMemoryKind(access)); - } - } - - protected ValueNode uncast(ValueNode value) { - if (value instanceof UnsafeCastNode) { - UnsafeCastNode cast = (UnsafeCastNode) value; - return cast.getOriginalNode(); - } - return value; - } - - protected ComplexMatchResult emitCompareBranchMemory(IfNode ifNode, CompareNode compare, ValueNode value, Access access) { - Condition cond = compare.condition(); - AMD64Kind kind = getMemoryKind(access); - - if (value.isConstant()) { - JavaConstant constant = value.asJavaConstant(); - if (kind == AMD64Kind.QWORD && !NumUtil.isInt(constant.asLong())) { - // Only imm32 as long - return null; - } - if (kind.isXMM()) { - Debug.log("Skipping constant compares for float kinds"); - return null; - } - if (constant.getJavaKind() == JavaKind.Object && !constant.isNull()) { - Debug.log("Skipping constant compares for Object kinds"); - return null; - } - } - - // emitCompareBranchMemory expects the memory on the right, so mirror the condition if - // that's not true. It might be mirrored again the actual compare is emitted but that's - // ok. - Condition finalCondition = uncast(compare.getX()) == access ? cond.mirror() : cond; - return new ComplexMatchResult() { - public Value evaluate(NodeLIRBuilder builder) { - LabelRef trueLabel = getLIRBlock(ifNode.trueSuccessor()); - LabelRef falseLabel = getLIRBlock(ifNode.falseSuccessor()); - boolean unorderedIsTrue = compare.unorderedIsTrue(); - double trueLabelProbability = ifNode.probability(ifNode.trueSuccessor()); - Value other; - if (value.isConstant()) { - other = gen.emitJavaConstant(value.asJavaConstant()); - } else { - other = operand(value); - } - - AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); - getLIRGeneratorTool().emitCompareBranchMemory(kind, other, address, getState(access), finalCondition, unorderedIsTrue, trueLabel, falseLabel, trueLabelProbability); - return null; - } - }; - } - - private ComplexMatchResult emitIntegerTestBranchMemory(IfNode x, ValueNode value, Access access) { - LabelRef trueLabel = getLIRBlock(x.trueSuccessor()); - LabelRef falseLabel = getLIRBlock(x.falseSuccessor()); - double trueLabelProbability = x.probability(x.trueSuccessor()); - AMD64Kind kind = getMemoryKind(access); - OperandSize size = kind == AMD64Kind.QWORD ? QWORD : DWORD; - if (value.isConstant()) { - JavaConstant constant = value.asJavaConstant(); - if (kind == AMD64Kind.QWORD && !NumUtil.isInt(constant.asLong())) { - // Only imm32 as long - return null; - } - return builder -> { - AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); - gen.append(new AMD64BinaryConsumer.MemoryConstOp(AMD64MIOp.TEST, size, address, (int) constant.asLong(), getState(access))); - gen.append(new BranchOp(Condition.EQ, trueLabel, falseLabel, trueLabelProbability)); - return null; - }; - } else { - return builder -> { - AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); - gen.append(new AMD64BinaryConsumer.MemoryRMOp(AMD64RMOp.TEST, size, gen.asAllocatable(operand(value)), address, getState(access))); - gen.append(new BranchOp(Condition.EQ, trueLabel, falseLabel, trueLabelProbability)); - return null; - }; - } - } - - protected ComplexMatchResult emitConvertMemoryOp(PlatformKind kind, AMD64RMOp op, OperandSize size, Access access) { - return builder -> { - AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); - LIRFrameState state = getState(access); - return getLIRGeneratorTool().emitConvertMemoryOp(kind, op, size, address, state); - }; - } - - private ComplexMatchResult emitSignExtendMemory(Access access, int fromBits, int toBits) { - assert fromBits <= toBits && toBits <= 64; - AMD64Kind kind = null; - AMD64RMOp op; - OperandSize size; - if (fromBits == toBits) { - return null; - } else if (toBits > 32) { - kind = AMD64Kind.QWORD; - size = OperandSize.QWORD; - // sign extend to 64 bits - switch (fromBits) { - case 8: - op = MOVSXB; - break; - case 16: - op = MOVSX; - break; - case 32: - op = MOVSXD; - break; - default: - throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); - } - } else { - kind = AMD64Kind.DWORD; - size = OperandSize.DWORD; - // sign extend to 32 bits (smaller values are internally represented as 32 bit values) - switch (fromBits) { - case 8: - op = MOVSXB; - break; - case 16: - op = MOVSX; - break; - case 32: - return null; - default: - throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); - } - } - if (kind != null && op != null) { - return emitConvertMemoryOp(kind, op, size, access); - } - return null; - } - - private Value emitReinterpretMemory(LIRKind to, Access access) { - AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); - LIRFrameState state = getState(access); - return getLIRGeneratorTool().emitLoad(to, address, state); - } - - @MatchRule("(If (IntegerTest Read=access value))") - @MatchRule("(If (IntegerTest FloatingRead=access value))") - public ComplexMatchResult integerTestBranchMemory(IfNode root, Access access, ValueNode value) { - return emitIntegerTestBranchMemory(root, value, access); - } - - @MatchRule("(If (IntegerEquals=compare value Read=access))") - @MatchRule("(If (IntegerLessThan=compare value Read=access))") - @MatchRule("(If (IntegerBelow=compare value Read=access))") - @MatchRule("(If (IntegerEquals=compare value FloatingRead=access))") - @MatchRule("(If (IntegerLessThan=compare value FloatingRead=access))") - @MatchRule("(If (IntegerBelow=compare value FloatingRead=access))") - @MatchRule("(If (FloatEquals=compare value Read=access))") - @MatchRule("(If (FloatEquals=compare value FloatingRead=access))") - @MatchRule("(If (FloatLessThan=compare value Read=access))") - @MatchRule("(If (FloatLessThan=compare value FloatingRead=access))") - public ComplexMatchResult ifCompareMemory(IfNode root, CompareNode compare, ValueNode value, Access access) { - return emitCompareBranchMemory(root, compare, value, access); - } - - @MatchRule("(Or (LeftShift=lshift value Constant) (UnsignedRightShift=rshift value Constant))") - public ComplexMatchResult rotateLeftConstant(LeftShiftNode lshift, UnsignedRightShiftNode rshift) { - if ((lshift.getShiftAmountMask() & (lshift.getY().asJavaConstant().asInt() + rshift.getY().asJavaConstant().asInt())) == 0) { - return builder -> getLIRGeneratorTool().emitRol(operand(lshift.getX()), operand(lshift.getY())); - } - return null; - } - - @MatchRule("(Or (LeftShift value (Sub Constant=delta shiftAmount)) (UnsignedRightShift value shiftAmount))") - public ComplexMatchResult rotateRightVariable(ValueNode value, ConstantNode delta, ValueNode shiftAmount) { - if (delta.asJavaConstant().asLong() == 0 || delta.asJavaConstant().asLong() == 32) { - return builder -> getLIRGeneratorTool().emitRor(operand(value), operand(shiftAmount)); - } - return null; - } - - @MatchRule("(Or (LeftShift value shiftAmount) (UnsignedRightShift value (Sub Constant=delta shiftAmount)))") - public ComplexMatchResult rotateLeftVariable(ValueNode value, ValueNode shiftAmount, ConstantNode delta) { - if (delta.asJavaConstant().asLong() == 0 || delta.asJavaConstant().asLong() == 32) { - return builder -> getLIRGeneratorTool().emitRol(operand(value), operand(shiftAmount)); - } - return null; - } - - private ComplexMatchResult binaryRead(AMD64RMOp op, OperandSize size, ValueNode value, Access access) { - return builder -> getLIRGeneratorTool().emitBinaryMemory(op, size, getLIRGeneratorTool().asAllocatable(operand(value)), (AMD64AddressValue) operand(access.getAddress()), getState(access)); - } - - @MatchRule("(Add value Read=access)") - @MatchRule("(Add value FloatingRead=access)") - public ComplexMatchResult addMemory(ValueNode value, Access access) { - OperandSize size = getMemorySize(access); - if (size.isXmmType()) { - return binaryRead(SSEOp.ADD, size, value, access); - } else { - return binaryRead(ADD.getRMOpcode(size), size, value, access); - } - } - - @MatchRule("(Sub value Read=access)") - @MatchRule("(Sub value FloatingRead=access)") - public ComplexMatchResult subMemory(ValueNode value, Access access) { - OperandSize size = getMemorySize(access); - if (size.isXmmType()) { - return binaryRead(SSEOp.SUB, size, value, access); - } else { - return binaryRead(SUB.getRMOpcode(size), size, value, access); - } - } - - @MatchRule("(Mul value Read=access)") - @MatchRule("(Mul value FloatingRead=access)") - public ComplexMatchResult mulMemory(ValueNode value, Access access) { - OperandSize size = getMemorySize(access); - if (size.isXmmType()) { - return binaryRead(SSEOp.MUL, size, value, access); - } else { - return binaryRead(AMD64RMOp.IMUL, size, value, access); - } - } - - @MatchRule("(And value Read=access)") - @MatchRule("(And value FloatingRead=access)") - public ComplexMatchResult andMemory(ValueNode value, Access access) { - OperandSize size = getMemorySize(access); - if (size.isXmmType()) { - return null; - } else { - return binaryRead(AND.getRMOpcode(size), size, value, access); - } - } - - @MatchRule("(Or value Read=access)") - @MatchRule("(Or value FloatingRead=access)") - public ComplexMatchResult orMemory(ValueNode value, Access access) { - OperandSize size = getMemorySize(access); - if (size.isXmmType()) { - return null; - } else { - return binaryRead(OR.getRMOpcode(size), size, value, access); - } - } - - @MatchRule("(Xor value Read=access)") - @MatchRule("(Xor value FloatingRead=access)") - public ComplexMatchResult xorMemory(ValueNode value, Access access) { - OperandSize size = getMemorySize(access); - if (size.isXmmType()) { - return null; - } else { - return binaryRead(XOR.getRMOpcode(size), size, value, access); - } - } - - @MatchRule("(Write object Narrow=narrow)") - public ComplexMatchResult writeNarrow(WriteNode root, NarrowNode narrow) { - return builder -> { - LIRKind writeKind = getLIRGeneratorTool().getLIRKind(root.value().stamp()); - getLIRGeneratorTool().emitStore(writeKind, operand(root.getAddress()), operand(narrow.getValue()), state(root)); - return null; - }; - } - - @MatchRule("(SignExtend Read=access)") - @MatchRule("(SignExtend FloatingRead=access)") - public ComplexMatchResult signExtend(SignExtendNode root, Access access) { - return emitSignExtendMemory(access, root.getInputBits(), root.getResultBits()); - } - - @MatchRule("(ZeroExtend Read=access)") - @MatchRule("(ZeroExtend FloatingRead=access)") - public ComplexMatchResult zeroExtend(ZeroExtendNode root, Access access) { - AMD64Kind memoryKind = getMemoryKind(access); - return builder -> getLIRGeneratorTool().emitZeroExtendMemory(memoryKind, root.getResultBits(), (AMD64AddressValue) operand(access.getAddress()), getState(access)); - } - - @MatchRule("(FloatConvert Read=access)") - @MatchRule("(FloatConvert FloatingRead=access)") - public ComplexMatchResult floatConvert(FloatConvertNode root, Access access) { - switch (root.getFloatConvert()) { - case D2F: - return emitConvertMemoryOp(AMD64Kind.SINGLE, SSEOp.CVTSD2SS, SD, access); - case D2I: - return emitConvertMemoryOp(AMD64Kind.DWORD, SSEOp.CVTTSD2SI, DWORD, access); - case D2L: - return emitConvertMemoryOp(AMD64Kind.QWORD, SSEOp.CVTTSD2SI, QWORD, access); - case F2D: - return emitConvertMemoryOp(AMD64Kind.DOUBLE, SSEOp.CVTSS2SD, SS, access); - case F2I: - return emitConvertMemoryOp(AMD64Kind.DWORD, SSEOp.CVTTSS2SI, DWORD, access); - case F2L: - return emitConvertMemoryOp(AMD64Kind.QWORD, SSEOp.CVTTSS2SI, QWORD, access); - case I2D: - return emitConvertMemoryOp(AMD64Kind.DOUBLE, SSEOp.CVTSI2SD, DWORD, access); - case I2F: - return emitConvertMemoryOp(AMD64Kind.SINGLE, SSEOp.CVTSI2SS, DWORD, access); - case L2D: - return emitConvertMemoryOp(AMD64Kind.DOUBLE, SSEOp.CVTSI2SD, QWORD, access); - case L2F: - return emitConvertMemoryOp(AMD64Kind.SINGLE, SSEOp.CVTSI2SS, QWORD, access); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - @MatchRule("(Reinterpret Read=access)") - @MatchRule("(Reinterpret FloatingRead=access)") - public ComplexMatchResult reinterpret(ReinterpretNode root, Access access) { - return builder -> { - LIRKind kind = getLIRGeneratorTool().getLIRKind(root.stamp()); - return emitReinterpretMemory(kind, access); - }; - - } - @Override public void visitBreakpointNode(BreakpointNode node) { JavaType[] sig = new JavaType[node.arguments().size()];
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64NodeMatchRules.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,442 @@ +/* + * Copyright (c) 2009, 2015, 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.compiler.amd64; + +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.ADD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.AND; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.OR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.SUB; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.XOR; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSX; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXB; +import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp.MOVSXD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.DWORD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.QWORD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SD; +import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.SS; + +import com.oracle.graal.asm.NumUtil; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MIOp; +import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp; +import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize; +import com.oracle.graal.asm.amd64.AMD64Assembler.SSEOp; +import com.oracle.graal.compiler.common.calc.Condition; +import com.oracle.graal.compiler.gen.NodeLIRBuilder; +import com.oracle.graal.compiler.gen.NodeMatchRules; +import com.oracle.graal.compiler.match.ComplexMatchResult; +import com.oracle.graal.compiler.match.MatchRule; +import com.oracle.graal.debug.Debug; +import com.oracle.graal.lir.LIRFrameState; +import com.oracle.graal.lir.LabelRef; +import com.oracle.graal.lir.amd64.AMD64AddressValue; +import com.oracle.graal.lir.amd64.AMD64BinaryConsumer; +import com.oracle.graal.lir.amd64.AMD64ControlFlow.BranchOp; +import com.oracle.graal.lir.gen.LIRGeneratorTool; +import com.oracle.graal.nodes.ConstantNode; +import com.oracle.graal.nodes.DeoptimizingNode; +import com.oracle.graal.nodes.IfNode; +import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.calc.CompareNode; +import com.oracle.graal.nodes.calc.FloatConvertNode; +import com.oracle.graal.nodes.calc.LeftShiftNode; +import com.oracle.graal.nodes.calc.NarrowNode; +import com.oracle.graal.nodes.calc.ReinterpretNode; +import com.oracle.graal.nodes.calc.SignExtendNode; +import com.oracle.graal.nodes.calc.UnsignedRightShiftNode; +import com.oracle.graal.nodes.calc.ZeroExtendNode; +import com.oracle.graal.nodes.extended.UnsafeCastNode; +import com.oracle.graal.nodes.memory.Access; +import com.oracle.graal.nodes.memory.WriteNode; + +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; + +public class AMD64NodeMatchRules extends NodeMatchRules { + + public AMD64NodeMatchRules(LIRGeneratorTool gen) { + super(gen); + } + + protected LIRFrameState getState(Access access) { + if (access instanceof DeoptimizingNode) { + return state((DeoptimizingNode) access); + } + return null; + } + + protected AMD64Kind getMemoryKind(Access access) { + return (AMD64Kind) gen.getLIRKind(access.asNode().stamp()).getPlatformKind(); + } + + protected OperandSize getMemorySize(Access access) { + switch (getMemoryKind(access)) { + case BYTE: + return OperandSize.BYTE; + case WORD: + return OperandSize.WORD; + case DWORD: + return OperandSize.DWORD; + case QWORD: + return OperandSize.QWORD; + case SINGLE: + return OperandSize.SS; + case DOUBLE: + return OperandSize.SD; + default: + throw JVMCIError.shouldNotReachHere("unsupported memory access type " + getMemoryKind(access)); + } + } + + protected ValueNode uncast(ValueNode value) { + if (value instanceof UnsafeCastNode) { + UnsafeCastNode cast = (UnsafeCastNode) value; + return cast.getOriginalNode(); + } + return value; + } + + protected ComplexMatchResult emitCompareBranchMemory(IfNode ifNode, CompareNode compare, ValueNode value, Access access) { + Condition cond = compare.condition(); + AMD64Kind kind = getMemoryKind(access); + + if (value.isConstant()) { + JavaConstant constant = value.asJavaConstant(); + if (constant != null && kind == AMD64Kind.QWORD && !NumUtil.isInt(constant.asLong())) { + // Only imm32 as long + return null; + } + if (kind.isXMM()) { + Debug.log("Skipping constant compares for float kinds"); + return null; + } + if (constant != null && constant.getJavaKind() == JavaKind.Object && !constant.isNull()) { + Debug.log("Skipping constant compares for Object kinds"); + return null; + } + } + + // emitCompareBranchMemory expects the memory on the right, so mirror the condition if + // that's not true. It might be mirrored again the actual compare is emitted but that's + // ok. + Condition finalCondition = uncast(compare.getX()) == access ? cond.mirror() : cond; + return new ComplexMatchResult() { + public Value evaluate(NodeLIRBuilder builder) { + LabelRef trueLabel = getLIRBlock(ifNode.trueSuccessor()); + LabelRef falseLabel = getLIRBlock(ifNode.falseSuccessor()); + boolean unorderedIsTrue = compare.unorderedIsTrue(); + double trueLabelProbability = ifNode.probability(ifNode.trueSuccessor()); + Value other; + JavaConstant constant = value.asJavaConstant(); + if (constant != null) { + other = gen.emitJavaConstant(constant); + } else { + other = operand(value); + } + + AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); + getLIRGeneratorTool().emitCompareBranchMemory(kind, other, address, getState(access), finalCondition, unorderedIsTrue, trueLabel, falseLabel, trueLabelProbability); + return null; + } + }; + } + + private ComplexMatchResult emitIntegerTestBranchMemory(IfNode x, ValueNode value, Access access) { + LabelRef trueLabel = getLIRBlock(x.trueSuccessor()); + LabelRef falseLabel = getLIRBlock(x.falseSuccessor()); + double trueLabelProbability = x.probability(x.trueSuccessor()); + AMD64Kind kind = getMemoryKind(access); + OperandSize size = kind == AMD64Kind.QWORD ? QWORD : DWORD; + if (value.isConstant()) { + JavaConstant constant = value.asJavaConstant(); + if (constant != null && kind == AMD64Kind.QWORD && !NumUtil.isInt(constant.asLong())) { + // Only imm32 as long + return null; + } + return builder -> { + AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); + gen.append(new AMD64BinaryConsumer.MemoryConstOp(AMD64MIOp.TEST, size, address, (int) constant.asLong(), getState(access))); + gen.append(new BranchOp(Condition.EQ, trueLabel, falseLabel, trueLabelProbability)); + return null; + }; + } else { + return builder -> { + AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); + gen.append(new AMD64BinaryConsumer.MemoryRMOp(AMD64RMOp.TEST, size, gen.asAllocatable(operand(value)), address, getState(access))); + gen.append(new BranchOp(Condition.EQ, trueLabel, falseLabel, trueLabelProbability)); + return null; + }; + } + } + + protected ComplexMatchResult emitConvertMemoryOp(PlatformKind kind, AMD64RMOp op, OperandSize size, Access access) { + return builder -> { + AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); + LIRFrameState state = getState(access); + return getArithmeticLIRGenerator().emitConvertMemoryOp(kind, op, size, address, state); + }; + } + + private ComplexMatchResult emitSignExtendMemory(Access access, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= 64; + AMD64Kind kind = null; + AMD64RMOp op; + OperandSize size; + if (fromBits == toBits) { + return null; + } else if (toBits > 32) { + kind = AMD64Kind.QWORD; + size = OperandSize.QWORD; + // sign extend to 64 bits + switch (fromBits) { + case 8: + op = MOVSXB; + break; + case 16: + op = MOVSX; + break; + case 32: + op = MOVSXD; + break; + default: + throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + } + } else { + kind = AMD64Kind.DWORD; + size = OperandSize.DWORD; + // sign extend to 32 bits (smaller values are internally represented as 32 bit values) + switch (fromBits) { + case 8: + op = MOVSXB; + break; + case 16: + op = MOVSX; + break; + case 32: + return null; + default: + throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + } + } + if (kind != null && op != null) { + return emitConvertMemoryOp(kind, op, size, access); + } + return null; + } + + private Value emitReinterpretMemory(LIRKind to, Access access) { + AMD64AddressValue address = (AMD64AddressValue) operand(access.getAddress()); + LIRFrameState state = getState(access); + return getLIRGeneratorTool().emitLoad(to, address, state); + } + + @MatchRule("(If (IntegerTest Read=access value))") + @MatchRule("(If (IntegerTest FloatingRead=access value))") + public ComplexMatchResult integerTestBranchMemory(IfNode root, Access access, ValueNode value) { + return emitIntegerTestBranchMemory(root, value, access); + } + + @MatchRule("(If (IntegerEquals=compare value Read=access))") + @MatchRule("(If (IntegerLessThan=compare value Read=access))") + @MatchRule("(If (IntegerBelow=compare value Read=access))") + @MatchRule("(If (IntegerEquals=compare value FloatingRead=access))") + @MatchRule("(If (IntegerLessThan=compare value FloatingRead=access))") + @MatchRule("(If (IntegerBelow=compare value FloatingRead=access))") + @MatchRule("(If (FloatEquals=compare value Read=access))") + @MatchRule("(If (FloatEquals=compare value FloatingRead=access))") + @MatchRule("(If (FloatLessThan=compare value Read=access))") + @MatchRule("(If (FloatLessThan=compare value FloatingRead=access))") + public ComplexMatchResult ifCompareMemory(IfNode root, CompareNode compare, ValueNode value, Access access) { + return emitCompareBranchMemory(root, compare, value, access); + } + + @MatchRule("(Or (LeftShift=lshift value Constant) (UnsignedRightShift=rshift value Constant))") + public ComplexMatchResult rotateLeftConstant(LeftShiftNode lshift, UnsignedRightShiftNode rshift) { + if ((lshift.getShiftAmountMask() & (lshift.getY().asJavaConstant().asInt() + rshift.getY().asJavaConstant().asInt())) == 0) { + return builder -> getArithmeticLIRGenerator().emitRol(operand(lshift.getX()), operand(lshift.getY())); + } + return null; + } + + @MatchRule("(Or (LeftShift value (Sub Constant=delta shiftAmount)) (UnsignedRightShift value shiftAmount))") + public ComplexMatchResult rotateRightVariable(ValueNode value, ConstantNode delta, ValueNode shiftAmount) { + if (delta.asJavaConstant().asLong() == 0 || delta.asJavaConstant().asLong() == 32) { + return builder -> getArithmeticLIRGenerator().emitRor(operand(value), operand(shiftAmount)); + } + return null; + } + + @MatchRule("(Or (LeftShift value shiftAmount) (UnsignedRightShift value (Sub Constant=delta shiftAmount)))") + public ComplexMatchResult rotateLeftVariable(ValueNode value, ValueNode shiftAmount, ConstantNode delta) { + if (delta.asJavaConstant().asLong() == 0 || delta.asJavaConstant().asLong() == 32) { + return builder -> getArithmeticLIRGenerator().emitRol(operand(value), operand(shiftAmount)); + } + return null; + } + + private ComplexMatchResult binaryRead(AMD64RMOp op, OperandSize size, ValueNode value, Access access) { + return builder -> getArithmeticLIRGenerator().emitBinaryMemory(op, size, getLIRGeneratorTool().asAllocatable(operand(value)), (AMD64AddressValue) operand(access.getAddress()), + getState(access)); + } + + @MatchRule("(Add value Read=access)") + @MatchRule("(Add value FloatingRead=access)") + public ComplexMatchResult addMemory(ValueNode value, Access access) { + OperandSize size = getMemorySize(access); + if (size.isXmmType()) { + return binaryRead(SSEOp.ADD, size, value, access); + } else { + return binaryRead(ADD.getRMOpcode(size), size, value, access); + } + } + + @MatchRule("(Sub value Read=access)") + @MatchRule("(Sub value FloatingRead=access)") + public ComplexMatchResult subMemory(ValueNode value, Access access) { + OperandSize size = getMemorySize(access); + if (size.isXmmType()) { + return binaryRead(SSEOp.SUB, size, value, access); + } else { + return binaryRead(SUB.getRMOpcode(size), size, value, access); + } + } + + @MatchRule("(Mul value Read=access)") + @MatchRule("(Mul value FloatingRead=access)") + public ComplexMatchResult mulMemory(ValueNode value, Access access) { + OperandSize size = getMemorySize(access); + if (size.isXmmType()) { + return binaryRead(SSEOp.MUL, size, value, access); + } else { + return binaryRead(AMD64RMOp.IMUL, size, value, access); + } + } + + @MatchRule("(And value Read=access)") + @MatchRule("(And value FloatingRead=access)") + public ComplexMatchResult andMemory(ValueNode value, Access access) { + OperandSize size = getMemorySize(access); + if (size.isXmmType()) { + return null; + } else { + return binaryRead(AND.getRMOpcode(size), size, value, access); + } + } + + @MatchRule("(Or value Read=access)") + @MatchRule("(Or value FloatingRead=access)") + public ComplexMatchResult orMemory(ValueNode value, Access access) { + OperandSize size = getMemorySize(access); + if (size.isXmmType()) { + return null; + } else { + return binaryRead(OR.getRMOpcode(size), size, value, access); + } + } + + @MatchRule("(Xor value Read=access)") + @MatchRule("(Xor value FloatingRead=access)") + public ComplexMatchResult xorMemory(ValueNode value, Access access) { + OperandSize size = getMemorySize(access); + if (size.isXmmType()) { + return null; + } else { + return binaryRead(XOR.getRMOpcode(size), size, value, access); + } + } + + @MatchRule("(Write object Narrow=narrow)") + public ComplexMatchResult writeNarrow(WriteNode root, NarrowNode narrow) { + return builder -> { + LIRKind writeKind = getLIRGeneratorTool().getLIRKind(root.value().stamp()); + getLIRGeneratorTool().emitStore(writeKind, operand(root.getAddress()), operand(narrow.getValue()), state(root)); + return null; + }; + } + + @MatchRule("(SignExtend Read=access)") + @MatchRule("(SignExtend FloatingRead=access)") + public ComplexMatchResult signExtend(SignExtendNode root, Access access) { + return emitSignExtendMemory(access, root.getInputBits(), root.getResultBits()); + } + + @MatchRule("(ZeroExtend Read=access)") + @MatchRule("(ZeroExtend FloatingRead=access)") + public ComplexMatchResult zeroExtend(ZeroExtendNode root, Access access) { + AMD64Kind memoryKind = getMemoryKind(access); + return builder -> getArithmeticLIRGenerator().emitZeroExtendMemory(memoryKind, root.getResultBits(), (AMD64AddressValue) operand(access.getAddress()), getState(access)); + } + + @MatchRule("(FloatConvert Read=access)") + @MatchRule("(FloatConvert FloatingRead=access)") + public ComplexMatchResult floatConvert(FloatConvertNode root, Access access) { + switch (root.getFloatConvert()) { + case D2F: + return emitConvertMemoryOp(AMD64Kind.SINGLE, SSEOp.CVTSD2SS, SD, access); + case D2I: + return emitConvertMemoryOp(AMD64Kind.DWORD, SSEOp.CVTTSD2SI, DWORD, access); + case D2L: + return emitConvertMemoryOp(AMD64Kind.QWORD, SSEOp.CVTTSD2SI, QWORD, access); + case F2D: + return emitConvertMemoryOp(AMD64Kind.DOUBLE, SSEOp.CVTSS2SD, SS, access); + case F2I: + return emitConvertMemoryOp(AMD64Kind.DWORD, SSEOp.CVTTSS2SI, DWORD, access); + case F2L: + return emitConvertMemoryOp(AMD64Kind.QWORD, SSEOp.CVTTSS2SI, QWORD, access); + case I2D: + return emitConvertMemoryOp(AMD64Kind.DOUBLE, SSEOp.CVTSI2SD, DWORD, access); + case I2F: + return emitConvertMemoryOp(AMD64Kind.SINGLE, SSEOp.CVTSI2SS, DWORD, access); + case L2D: + return emitConvertMemoryOp(AMD64Kind.DOUBLE, SSEOp.CVTSI2SD, QWORD, access); + case L2F: + return emitConvertMemoryOp(AMD64Kind.SINGLE, SSEOp.CVTSI2SS, QWORD, access); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + @MatchRule("(Reinterpret Read=access)") + @MatchRule("(Reinterpret FloatingRead=access)") + public ComplexMatchResult reinterpret(ReinterpretNode root, Access access) { + return builder -> { + LIRKind kind = getLIRGeneratorTool().getLIRKind(root.stamp()); + return emitReinterpretMemory(kind, access); + }; + + } + + @Override + public AMD64LIRGenerator getLIRGeneratorTool() { + return (AMD64LIRGenerator) gen; + } + + protected AMD64ArithmeticLIRGenerator getArithmeticLIRGenerator() { + return (AMD64ArithmeticLIRGenerator) getLIRGeneratorTool().getArithmetic(); + } +}
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/BackendOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/BackendOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,11 @@ */ package com.oracle.graal.compiler.common; -import jdk.internal.jvmci.options.DerivedOptionValue; -import jdk.internal.jvmci.options.DerivedOptionValue.OptionSupplier; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.StableOptionValue; +import jdk.vm.ci.options.DerivedOptionValue; +import jdk.vm.ci.options.DerivedOptionValue.OptionSupplier; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; /** * Options to control the backend configuration. @@ -42,8 +41,8 @@ public static final OptionValue<Boolean> LIROptSSILinearScan = new OptionValue<>(false); @Option(help = "Enable experimental Trace Register Allocation.", type = OptionType.Debug) public static final OptionValue<Boolean> TraceRA = new OptionValue<>(false); - @Option(help = "Never spill constant intervals.", type = OptionType.Debug) - public static final OptionValue<Boolean> NeverSpillConstants = new StableOptionValue<>(false); + @Option(help = "Support object constant to stack move.", type = OptionType.Debug) + public static final OptionValue<Boolean> AllowObjectConstantToStackMove = new OptionValue<>(true); // @formatter:on }
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.ArrayList; import java.util.Collections; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import sun.misc.Unsafe; /**
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/GraalOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.compiler.common; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.StableOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.StableOptionValue; /** * This class encapsulates options that control the behavior of the Graal compiler.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/RegisterAllocationConfig.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/RegisterAllocationConfig.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,9 +27,9 @@ import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.meta.PlatformKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.meta.PlatformKind; import com.oracle.graal.compiler.common.GraalOptions;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/calc/Condition.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/calc/Condition.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.compiler.common.calc; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.PrimitiveConstant; /** * Condition codes used in conditionals.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/calc/FloatConvert.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/calc/FloatConvert.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.common.calc; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; public enum FloatConvert { F2I,
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/CodeGenProviders.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/CodeGenProviders.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.common.spi; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; /** * A set of providers which are required for LIR and/or code generation. Some may not be present
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/ForeignCallLinkage.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/ForeignCallLinkage.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.common.spi; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.meta.InvokeTarget; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.meta.InvokeTarget; +import jdk.vm.ci.meta.Value; /** * The runtime specific details of a {@linkplain ForeignCallDescriptor foreign} call.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/ForeignCallsProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/ForeignCallsProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.common.spi; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; /** * Details about a set of supported {@link ForeignCallDescriptor foreign calls}.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/LIRKindTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/spi/LIRKindTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.common.spi; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.meta.LIRKind; /** * This interface can be used to access platform and VM specific kinds.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractObjectStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractObjectStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,11 +26,11 @@ import java.util.Objects; import java.util.RandomAccess; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; /** * Type describing all pointers to Java objects.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractPointerStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractPointerStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; /** * Abstract base class of all pointer types.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.common.type; -import static jdk.internal.jvmci.meta.MetaUtil.getSimpleName; +import static jdk.vm.ci.meta.MetaUtil.getSimpleName; import java.util.Arrays; import java.util.Objects; @@ -30,8 +30,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.calc.FloatConvert; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.Add;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.nio.ByteBuffer; import java.util.Objects; -import jdk.internal.jvmci.meta.SerializableConstant; +import jdk.vm.ci.meta.SerializableConstant; /** * Type describing values that support arithmetic operations.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/FloatStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/FloatStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -32,15 +32,15 @@ import java.nio.ByteBuffer; import java.util.function.DoubleBinaryOperator; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.SerializableConstant; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.SerializableConstant; import com.oracle.graal.compiler.common.spi.LIRKindTool; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IllegalStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IllegalStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.LIRKindTool;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,16 +30,16 @@ import java.nio.ByteBuffer; import java.util.Formatter; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.SerializableConstant; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.SerializableConstant; import com.oracle.graal.compiler.common.spi.LIRKindTool; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ObjectStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ObjectStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.LIRKindTool;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/PrimitiveStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/PrimitiveStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.MemoryAccessProvider; /** * Type describing primitive values.
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/RawPointerStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/RawPointerStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.LIRKindTool;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/Stamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/Stamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.LIRKindTool;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,15 +22,15 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -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 jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; public class StampFactory {
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/VoidStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/VoidStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.compiler.common.type; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.LIRKindTool;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/Util.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/util/Util.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,8 +26,8 @@ import java.util.Comparator; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.CodeUtil; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.CodeUtil; import com.oracle.graal.debug.TTY;
--- a/graal/com.oracle.graal.compiler.match.processor/src/com/oracle/graal/compiler/match/processor/MatchProcessor.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.match.processor/src/com/oracle/graal/compiler/match/processor/MatchProcessor.java Fri Oct 30 20:56:28 2015 +0100 @@ -63,10 +63,10 @@ import javax.tools.JavaFileObject; import javax.tools.StandardLocation; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.service.ServiceProvider; -import com.oracle.graal.compiler.gen.NodeLIRBuilder; +import com.oracle.graal.compiler.gen.NodeMatchRules; import com.oracle.graal.compiler.match.ComplexMatchResult; import com.oracle.graal.compiler.match.MatchRule; import com.oracle.graal.compiler.match.MatchRules; @@ -520,7 +520,7 @@ out.println(""); out.println("import java.util.*;"); out.println("import " + MatchStatementSet.class.getPackage().getName() + ".*;"); - out.println("import " + NodeLIRBuilder.class.getName() + ";"); + out.println("import " + NodeMatchRules.class.getName() + ";"); out.println("import " + Position.class.getName() + ";"); out.println("import " + ServiceProvider.class.getName() + ";"); for (String p : info.requiredPackages) { @@ -552,8 +552,8 @@ out.printf(" private static final String[] %s = new String[] {%s};\n", invoker.argumentsListName(), args); out.printf(" private static final class %s implements MatchGenerator {\n", invoker.wrapperClass()); out.printf(" static MatchGenerator instance = new %s();\n", invoker.wrapperClass()); - out.printf(" public ComplexMatchResult match(NodeLIRBuilder builder, Object...args) {\n"); - out.printf(" return ((%s) builder).%s(%s);\n", invoker.nodeLIRBuilderClass, invoker.methodName, types); + out.printf(" public ComplexMatchResult match(NodeMatchRules nodeMatchRules, Object...args) {\n"); + out.printf(" return ((%s) nodeMatchRules).%s(%s);\n", invoker.nodeLIRBuilderClass, invoker.methodName, types); out.printf(" }\n"); out.printf(" public String getName() {\n"); out.printf(" return \"%s\";\n", invoker.methodName); @@ -565,7 +565,7 @@ String desc = MatchStatement.class.getSimpleName(); - out.println(" public Class<? extends NodeLIRBuilder> forClass() {"); + out.println(" public Class<? extends NodeMatchRules> forClass() {"); out.println(" return " + topDeclaringClass + ".class;"); out.println(" }"); out.println(); @@ -604,7 +604,7 @@ } private void createProviderFile(String pkg, String providerClassName, Element... originatingElements) throws IOException { - String filename = "META-INF/providers/" + pkg + "." + providerClassName; + String filename = "META-INF/jvmci.providers/" + pkg + "." + providerClassName; FileObject file = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", filename, originatingElements); PrintWriter writer = new PrintWriter(new OutputStreamWriter(file.openOutputStream(), "UTF-8")); writer.println(MatchStatementSet.class.getName());
--- a/graal/com.oracle.graal.compiler.sparc.test/src/com/oracle/graal/compiler/sparc/test/SPARCAllocatorTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc.test/src/com/oracle/graal/compiler/sparc/test/SPARCAllocatorTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import static com.oracle.graal.compiler.common.BackendOptions.UserOptions.TraceRA; import static com.oracle.graal.compiler.common.GraalOptions.RegisterPressure; import static org.junit.Assume.assumeTrue; -import jdk.internal.jvmci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARC; import org.junit.Before; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.compiler.sparc; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.nodes.ValueNode;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCArithmeticLIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,670 @@ +/* + * Copyright (c) 2009, 2015, 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.compiler.sparc; + +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Add; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Addcc; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.And; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Mulx; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sdivx; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sllx; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sra; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Srax; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Srl; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sub; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Subcc; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Udivx; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Xnor; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Faddd; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fadds; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fdivd; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fdivs; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fdtos; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fitod; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fitos; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fmuld; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fmuls; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fnegd; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fnegs; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fstod; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fxtod; +import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.UMulxhi; +import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; +import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; +import static com.oracle.graal.lir.sparc.SPARCBitManipulationOp.IntrinsicOpcode.BSF; +import static com.oracle.graal.lir.sparc.SPARCBitManipulationOp.IntrinsicOpcode.IBSR; +import static com.oracle.graal.lir.sparc.SPARCBitManipulationOp.IntrinsicOpcode.LBSR; +import static jdk.vm.ci.code.CodeUtil.mask; +import static jdk.vm.ci.meta.JavaConstant.forLong; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARCKind.DOUBLE; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import static jdk.vm.ci.sparc.SPARCKind.SINGLE; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARC.CPUFeature; +import jdk.vm.ci.sparc.SPARCKind; + +import com.oracle.graal.asm.sparc.SPARCAssembler.Op3s; +import com.oracle.graal.asm.sparc.SPARCAssembler.Opfs; +import com.oracle.graal.compiler.common.calc.FloatConvert; +import com.oracle.graal.lir.ConstantValue; +import com.oracle.graal.lir.LIRFrameState; +import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.sparc.SPARCArithmetic; +import com.oracle.graal.lir.sparc.SPARCArithmetic.FloatConvertOp; +import com.oracle.graal.lir.sparc.SPARCArithmetic.MulHighOp; +import com.oracle.graal.lir.sparc.SPARCArithmetic.MulHighOp.MulHigh; +import com.oracle.graal.lir.sparc.SPARCArithmetic.RemOp; +import com.oracle.graal.lir.sparc.SPARCArithmetic.RemOp.Rem; +import com.oracle.graal.lir.sparc.SPARCArithmetic.SPARCIMulccOp; +import com.oracle.graal.lir.sparc.SPARCArithmetic.SPARCLMulccOp; +import com.oracle.graal.lir.sparc.SPARCBitManipulationOp; +import com.oracle.graal.lir.sparc.SPARCMove.MoveFpGp; +import com.oracle.graal.lir.sparc.SPARCOP3Op; +import com.oracle.graal.lir.sparc.SPARCOPFOp; + +/** + * This class implements the SPARC specific portion of the LIR generator. + */ +public class SPARCArithmeticLIRGenerator extends ArithmeticLIRGenerator { + + @Override + public SPARCLIRGenerator getLIRGen() { + return (SPARCLIRGenerator) super.getLIRGen(); + } + + @Override + public Variable emitBitCount(Value operand) { + Variable result = getLIRGen().newVariable(LIRKind.combine(operand).changeType(SPARCKind.WORD)); + Value usedOperand = operand; + if (operand.getPlatformKind() == SPARCKind.WORD) { // Zero extend + usedOperand = getLIRGen().newVariable(operand.getLIRKind()); + getLIRGen().append(new SPARCOP3Op(Op3s.Srl, operand, SPARC.g0.asValue(), usedOperand)); + } + getLIRGen().append(new SPARCOP3Op(Op3s.Popc, SPARC.g0.asValue(), usedOperand, result)); + return result; + } + + @Override + public Variable emitBitScanForward(Value operand) { + Variable result = getLIRGen().newVariable(LIRKind.combine(operand).changeType(SPARCKind.WORD)); + getLIRGen().append(new SPARCBitManipulationOp(BSF, result, getLIRGen().asAllocatable(operand), getLIRGen())); + return result; + } + + @Override + public Variable emitBitScanReverse(Value operand) { + Variable result = getLIRGen().newVariable(LIRKind.combine(operand).changeType(SPARCKind.WORD)); + if (operand.getPlatformKind() == SPARCKind.XWORD) { + getLIRGen().append(new SPARCBitManipulationOp(LBSR, result, getLIRGen().asAllocatable(operand), getLIRGen())); + } else { + getLIRGen().append(new SPARCBitManipulationOp(IBSR, result, getLIRGen().asAllocatable(operand), getLIRGen())); + } + return result; + } + + @Override + public Value emitMathAbs(Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + SPARCKind kind = (SPARCKind) input.getPlatformKind(); + Opfs opf; + switch (kind) { + case SINGLE: + opf = Opfs.Fabss; + break; + case DOUBLE: + opf = Opfs.Fabsd; + break; + default: + throw JVMCIError.shouldNotReachHere("Input kind: " + kind); + } + getLIRGen().append(new SPARCOPFOp(opf, g0.asValue(), input, result)); + return result; + } + + @Override + public Value emitMathSqrt(Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + SPARCKind kind = (SPARCKind) input.getPlatformKind(); + Opfs opf; + switch (kind) { + case SINGLE: + opf = Opfs.Fsqrts; + break; + case DOUBLE: + opf = Opfs.Fsqrtd; + break; + default: + throw JVMCIError.shouldNotReachHere("Input kind: " + kind); + } + getLIRGen().append(new SPARCOPFOp(opf, g0.asValue(), input, result)); + return result; + } + + @Override + public Value emitNegate(Value input) { + PlatformKind inputKind = input.getPlatformKind(); + if (isNumericInteger(inputKind)) { + return emitUnary(Sub, input); + } else { + return emitUnary(inputKind.equals(DOUBLE) ? Fnegd : Fnegs, input); + } + } + + @Override + public Value emitNot(Value input) { + return emitUnary(Xnor, input); + } + + private Variable emitUnary(Opfs opf, Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + getLIRGen().append(new SPARCOPFOp(opf, g0.asValue(), input, result)); + return result; + } + + private Variable emitUnary(Op3s op3, Value input) { + Variable result = getLIRGen().newVariable(LIRKind.combine(input)); + getLIRGen().append(SPARCOP3Op.newUnary(op3, input, result)); + return result; + } + + private Variable emitBinary(LIRKind resultKind, Opfs opf, Value a, Value b) { + return emitBinary(resultKind, opf, a, b, null); + } + + private Variable emitBinary(LIRKind resultKind, Opfs opf, Value a, Value b, LIRFrameState state) { + Variable result = getLIRGen().newVariable(resultKind); + if (opf.isCommutative() && isJavaConstant(a) && getLIRGen().canInlineConstant(asJavaConstant(a))) { + getLIRGen().append(new SPARCOPFOp(opf, b, a, result, state)); + } else { + getLIRGen().append(new SPARCOPFOp(opf, a, b, result, state)); + } + return result; + } + + private Variable emitBinary(LIRKind resultKind, Op3s op3, Value a, int b) { + return emitBinary(resultKind, op3, a, new ConstantValue(LIRKind.value(WORD), JavaConstant.forInt(b))); + } + + private Variable emitBinary(LIRKind resultKind, Op3s op3, Value a, Value b) { + return emitBinary(resultKind, op3, a, b, null); + } + + private Variable emitBinary(LIRKind resultKind, Op3s op3, Value a, Value b, LIRFrameState state) { + Variable result = getLIRGen().newVariable(resultKind); + if (op3.isCommutative() && isJavaConstant(a) && getLIRGen().canInlineConstant(asJavaConstant(a))) { + getLIRGen().append(new SPARCOP3Op(op3, getLIRGen().load(b), a, result, state)); + } else { + getLIRGen().append(new SPARCOP3Op(op3, getLIRGen().load(a), b, result, state)); + } + return result; + } + + @Override + protected boolean isNumericInteger(PlatformKind kind) { + return ((SPARCKind) kind).isInteger(); + } + + @Override + public Variable emitAdd(LIRKind resultKind, Value a, Value b, boolean setFlags) { + if (isNumericInteger(a.getPlatformKind())) { + return emitBinary(resultKind, setFlags ? Addcc : Add, a, b); + } else { + boolean isDouble = a.getPlatformKind().equals(DOUBLE); + return emitBinary(resultKind, isDouble ? Faddd : Fadds, a, b); + } + } + + @Override + public Variable emitSub(LIRKind resultKind, Value a, Value b, boolean setFlags) { + if (isNumericInteger(a.getPlatformKind())) { + return emitBinary(resultKind, setFlags ? Subcc : Sub, a, b); + } else { + boolean isDouble = a.getPlatformKind().equals(DOUBLE); + return emitBinary(resultKind, isDouble ? Opfs.Fsubd : Opfs.Fsubs, a, b); + } + } + + @Override + public Variable emitMul(Value a, Value b, boolean setFlags) { + LIRKind resultKind = LIRKind.combine(a, b); + PlatformKind aKind = a.getPlatformKind(); + if (isNumericInteger(aKind)) { + if (setFlags) { + Variable result = getLIRGen().newVariable(LIRKind.combine(a, b)); + if (aKind == XWORD) { + getLIRGen().append(new SPARCLMulccOp(result, getLIRGen().load(a), getLIRGen().load(b), getLIRGen())); + } else if (aKind == WORD) { + getLIRGen().append(new SPARCIMulccOp(result, getLIRGen().load(a), getLIRGen().load(b))); + } else { + throw JVMCIError.shouldNotReachHere(); + } + return result; + } else { + return emitBinary(resultKind, setFlags ? Op3s.Mulscc : Op3s.Mulx, a, b); + } + } else { + boolean isDouble = a.getPlatformKind().equals(DOUBLE); + return emitBinary(resultKind, isDouble ? Fmuld : Fmuls, a, b); + } + } + + @Override + public Value emitMulHigh(Value a, Value b) { + MulHigh opcode; + switch (((SPARCKind) a.getPlatformKind())) { + case WORD: + opcode = MulHigh.IMUL; + break; + case XWORD: + opcode = MulHigh.LMUL; + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return emitMulHigh(opcode, a, b); + } + + @Override + public Value emitUMulHigh(Value a, Value b) { + switch (((SPARCKind) a.getPlatformKind())) { + case WORD: + Value aExtended = emitBinary(LIRKind.combine(a), Srl, a, 0); + Value bExtended = emitBinary(LIRKind.combine(b), Srl, b, 0); + Value result = emitBinary(LIRKind.combine(a, b), Mulx, aExtended, bExtended); + return emitBinary(LIRKind.combine(a, b), Srax, result, WORD.getSizeInBits()); + case XWORD: + return emitBinary(LIRKind.combine(a, b), UMulxhi, a, b); + default: + throw JVMCIError.shouldNotReachHere(); + } + } + + private Value emitMulHigh(MulHigh opcode, Value a, Value b) { + Variable result = getLIRGen().newVariable(LIRKind.combine(a, b)); + MulHighOp mulHigh = new MulHighOp(opcode, getLIRGen().load(a), getLIRGen().load(b), result, getLIRGen().newVariable(LIRKind.combine(a, b))); + getLIRGen().append(mulHigh); + return result; + } + + @Override + public Value emitDiv(Value a, Value b, LIRFrameState state) { + LIRKind resultKind = LIRKind.combine(a, b); + PlatformKind aKind = a.getPlatformKind(); + PlatformKind bKind = b.getPlatformKind(); + if (isJavaConstant(b) && asJavaConstant(b).isDefaultForKind()) { // Div by zero + Value zero = SPARC.g0.asValue(LIRKind.value(SPARCKind.WORD)); + return emitBinary(resultKind, Op3s.Sdivx, zero, zero, state); + } else if (isNumericInteger(aKind)) { + Value fixedA = emitSignExtend(a, aKind.getSizeInBytes() * 8, 64); + Value fixedB = emitSignExtend(b, bKind.getSizeInBytes() * 8, 64); + return emitBinary(resultKind, Op3s.Sdivx, fixedA, fixedB, state); + } else { + boolean isDouble = a.getPlatformKind().equals(DOUBLE); + return emitBinary(resultKind, isDouble ? Opfs.Fdivd : Opfs.Fdivs, a, b, state); + } + } + + @Override + public Value emitRem(Value a, Value b, LIRFrameState state) { + Variable result = getLIRGen().newVariable(LIRKind.combine(a, b)); + Value aLoaded; + Value bLoaded; + Variable q1; // Intermediate values + Variable q2; + Variable q3; + Variable q4; + SPARCKind aKind = (SPARCKind) a.getPlatformKind(); + switch (aKind) { + case WORD: + q1 = emitBinary(result.getLIRKind(), Sra, a, g0.asValue(LIRKind.value(WORD))); + q2 = emitBinary(q1.getLIRKind(), Sdivx, q1, b, state); + q3 = emitBinary(q2.getLIRKind(), Op3s.Mulx, q2, b); + result = emitSub(q1, q3, false); + break; + case XWORD: + aLoaded = getLIRGen().load(a); // Reuse the loaded value + q1 = emitBinary(result.getLIRKind(), Sdivx, aLoaded, b, state); + q2 = emitBinary(result.getLIRKind(), Mulx, q1, b); + result = emitSub(aLoaded, q2, false); + break; + case SINGLE: + aLoaded = getLIRGen().load(a); + bLoaded = getLIRGen().load(b); + q1 = emitBinary(result.getLIRKind(), Fdivs, aLoaded, bLoaded, state); + q2 = getLIRGen().newVariable(LIRKind.value(aKind)); + getLIRGen().append(new FloatConvertOp(FloatConvertOp.FloatConvert.F2I, q1, q2)); + q3 = emitUnary(Fitos, q2); + q4 = emitBinary(LIRKind.value(aKind), Fmuls, q3, bLoaded); + result = emitSub(aLoaded, q4, false); + break; + case DOUBLE: + aLoaded = getLIRGen().load(a); + bLoaded = getLIRGen().load(b); + q1 = emitBinary(result.getLIRKind(), Fdivd, aLoaded, bLoaded, state); + q2 = getLIRGen().newVariable(LIRKind.value(aKind)); + getLIRGen().append(new FloatConvertOp(FloatConvertOp.FloatConvert.D2L, q1, q2)); + q3 = emitUnary(Fxtod, q2); + q4 = emitBinary(result.getLIRKind(), Fmuld, q3, bLoaded); + result = emitSub(aLoaded, q4, false); + break; + default: + throw JVMCIError.shouldNotReachHere("missing: " + a.getPlatformKind()); + } + return result; + } + + @Override + public Value emitURem(Value a, Value b, LIRFrameState state) { + Variable result = getLIRGen().newVariable(LIRKind.combine(a, b)); + Variable scratch1 = getLIRGen().newVariable(LIRKind.combine(a, b)); + Variable scratch2 = getLIRGen().newVariable(LIRKind.combine(a, b)); + Rem opcode; + switch (((SPARCKind) a.getPlatformKind())) { + case WORD: + opcode = Rem.IUREM; + break; + case XWORD: + opcode = Rem.LUREM; + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + getLIRGen().append(new RemOp(opcode, result, getLIRGen().load(a), getLIRGen().load(b), scratch1, scratch2, state)); + return result; + + } + + @Override + public Value emitUDiv(Value a, Value b, LIRFrameState state) { + Value actualA = a; + Value actualB = b; + switch (((SPARCKind) a.getPlatformKind())) { + case WORD: + actualA = emitZeroExtend(actualA, 32, 64); + actualB = emitZeroExtend(actualB, 32, 64); + break; + case XWORD: + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return emitBinary(LIRKind.combine(actualA, actualB), Udivx, actualA, actualB, state); + } + + @Override + public Variable emitAnd(Value a, Value b) { + LIRKind resultKind = LIRKind.combine(a, b); + return emitBinary(resultKind, Op3s.And, a, b); + } + + @Override + public Variable emitOr(Value a, Value b) { + LIRKind resultKind = LIRKind.combine(a, b); + return emitBinary(resultKind, Op3s.Or, a, b); + } + + @Override + public Variable emitXor(Value a, Value b) { + LIRKind resultKind = LIRKind.combine(a, b); + return emitBinary(resultKind, Op3s.Xor, a, b); + } + + @Override + public Variable emitShl(Value a, Value b) { + SPARCKind aKind = (SPARCKind) a.getPlatformKind(); + LIRKind resultKind = LIRKind.combine(a, b).changeType(aKind); + Op3s op; + switch (aKind) { + case WORD: + op = Op3s.Sll; + break; + case XWORD: + op = Op3s.Sllx; + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return emitBinary(resultKind, op, a, b); + } + + @Override + public Variable emitShr(Value a, Value b) { + SPARCKind aKind = (SPARCKind) a.getPlatformKind(); + LIRKind resultKind = LIRKind.combine(a, b).changeType(aKind); + Op3s op; + switch (aKind) { + case WORD: + op = Op3s.Sra; + break; + case XWORD: + op = Op3s.Srax; + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return emitBinary(resultKind, op, a, b); + } + + @Override + public Variable emitUShr(Value a, Value b) { + SPARCKind aKind = (SPARCKind) a.getPlatformKind(); + LIRKind resultKind = LIRKind.combine(a, b).changeType(aKind); + Op3s op; + switch (aKind) { + case WORD: + op = Op3s.Srl; + break; + case XWORD: + op = Op3s.Srlx; + break; + default: + throw JVMCIError.shouldNotReachHere(); + } + return emitBinary(resultKind, op, a, b); + } + + private AllocatableValue emitConvertMove(LIRKind kind, AllocatableValue input) { + Variable result = getLIRGen().newVariable(kind); + getLIRGen().emitMove(result, input); + return result; + } + + @Override + public Value emitFloatConvert(FloatConvert op, Value inputVal) { + AllocatableValue input = getLIRGen().asAllocatable(inputVal); + Value result; + switch (op) { + case D2F: + result = getLIRGen().newVariable(LIRKind.combine(inputVal).changeType(SINGLE)); + getLIRGen().append(new SPARCOPFOp(Fdtos, inputVal, result)); + break; + case F2D: + result = getLIRGen().newVariable(LIRKind.combine(inputVal).changeType(DOUBLE)); + getLIRGen().append(new SPARCOPFOp(Fstod, inputVal, result)); + break; + case I2F: { + AllocatableValue intEncodedFloatReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(SINGLE)); + result = getLIRGen().newVariable(intEncodedFloatReg.getLIRKind()); + moveBetweenFpGp(intEncodedFloatReg, input); + getLIRGen().append(new SPARCOPFOp(Fitos, intEncodedFloatReg, result)); + break; + } + case I2D: { + // Unfortunately we must do int -> float -> double because fitod has float + // and double encoding in one instruction + AllocatableValue convertedFloatReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(SINGLE)); + result = getLIRGen().newVariable(LIRKind.combine(input).changeType(DOUBLE)); + moveBetweenFpGp(convertedFloatReg, input); + getLIRGen().append(new SPARCOPFOp(Fitod, convertedFloatReg, result)); + break; + } + case L2D: { + AllocatableValue longEncodedDoubleReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(DOUBLE)); + moveBetweenFpGp(longEncodedDoubleReg, input); + AllocatableValue convertedDoubleReg = getLIRGen().newVariable(longEncodedDoubleReg.getLIRKind()); + getLIRGen().append(new SPARCOPFOp(Fxtod, longEncodedDoubleReg, convertedDoubleReg)); + result = convertedDoubleReg; + break; + } + case D2I: { + AllocatableValue convertedFloatReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(SINGLE)); + getLIRGen().append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.D2I, input, convertedFloatReg)); + AllocatableValue convertedIntReg = getLIRGen().newVariable(LIRKind.combine(convertedFloatReg).changeType(WORD)); + moveBetweenFpGp(convertedIntReg, convertedFloatReg); + result = convertedIntReg; + break; + } + case F2L: { + AllocatableValue convertedDoubleReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(DOUBLE)); + getLIRGen().append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.F2L, input, convertedDoubleReg)); + AllocatableValue convertedLongReg = getLIRGen().newVariable(LIRKind.combine(convertedDoubleReg).changeType(XWORD)); + moveBetweenFpGp(convertedLongReg, convertedDoubleReg); + result = convertedLongReg; + break; + } + case F2I: { + AllocatableValue convertedFloatReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(SINGLE)); + getLIRGen().append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.F2I, input, convertedFloatReg)); + AllocatableValue convertedIntReg = getLIRGen().newVariable(LIRKind.combine(convertedFloatReg).changeType(WORD)); + moveBetweenFpGp(convertedIntReg, convertedFloatReg); + result = convertedIntReg; + break; + } + case D2L: { + AllocatableValue convertedDoubleReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(DOUBLE)); + getLIRGen().append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.D2L, input, convertedDoubleReg)); + AllocatableValue convertedLongReg = getLIRGen().newVariable(LIRKind.combine(convertedDoubleReg).changeType(XWORD)); + moveBetweenFpGp(convertedLongReg, convertedDoubleReg); + result = convertedLongReg; + break; + } + case L2F: { + AllocatableValue convertedDoubleReg = getLIRGen().newVariable(LIRKind.combine(input).changeType(DOUBLE)); + result = getLIRGen().newVariable(LIRKind.combine(input).changeType(SINGLE)); + moveBetweenFpGp(convertedDoubleReg, input); + getLIRGen().append(new SPARCOPFOp(Opfs.Fxtos, convertedDoubleReg, result)); + break; + } + default: + throw JVMCIError.shouldNotReachHere(); + } + return result; + } + + private void moveBetweenFpGp(AllocatableValue dst, AllocatableValue src) { + AllocatableValue tempSlot; + if (getLIRGen().getArchitecture().getFeatures().contains(CPUFeature.VIS3)) { + tempSlot = AllocatableValue.ILLEGAL; + } else { + tempSlot = getLIRGen().getTempSlot(LIRKind.value(XWORD)); + } + getLIRGen().append(new MoveFpGp(dst, src, tempSlot)); + } + + @Override + public Value emitNarrow(Value inputVal, int bits) { + if (inputVal.getPlatformKind() == XWORD && bits <= 32) { + LIRKind resultKind = LIRKind.combine(inputVal).changeType(WORD); + Variable result = getLIRGen().newVariable(resultKind); + getLIRGen().emitMove(result, inputVal); + return result; + } else { + return inputVal; + } + } + + @Override + public Value emitSignExtend(Value inputVal, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= XWORD.getSizeInBits(); + LIRKind shiftKind = LIRKind.value(WORD); + LIRKind resultKind = LIRKind.combine(inputVal).changeType(toBits > 32 ? XWORD : WORD); + Value result; + int shiftCount = XWORD.getSizeInBits() - fromBits; + if (fromBits == toBits) { + result = inputVal; + } else if (isJavaConstant(inputVal)) { + JavaConstant javaConstant = asJavaConstant(inputVal); + long constant; + if (javaConstant.isNull()) { + constant = 0; + } else { + constant = javaConstant.asLong(); + } + return new ConstantValue(resultKind, JavaConstant.forLong((constant << shiftCount) >> shiftCount)); + } else if (fromBits == WORD.getSizeInBits() && toBits == XWORD.getSizeInBits()) { + result = getLIRGen().newVariable(resultKind); + getLIRGen().append(new SPARCOP3Op(Sra, inputVal, SPARC.g0.asValue(LIRKind.value(WORD)), result)); + } else { + Variable tmp = getLIRGen().newVariable(resultKind.changeType(XWORD)); + result = getLIRGen().newVariable(resultKind); + getLIRGen().append(new SPARCOP3Op(Sllx, inputVal, new ConstantValue(shiftKind, JavaConstant.forInt(shiftCount)), tmp)); + getLIRGen().append(new SPARCOP3Op(Srax, tmp, new ConstantValue(shiftKind, JavaConstant.forInt(shiftCount)), result)); + } + return result; + } + + @Override + public Value emitZeroExtend(Value inputVal, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= 64; + if (fromBits == toBits) { + return inputVal; + } + Variable result = getLIRGen().newVariable(LIRKind.combine(inputVal).changeType(toBits > WORD.getSizeInBits() ? XWORD : WORD)); + if (fromBits == 32) { + getLIRGen().append(new SPARCOP3Op(Srl, inputVal, g0.asValue(), result)); + } else { + Value mask = getLIRGen().emitConstant(LIRKind.value(XWORD), forLong(mask(fromBits))); + getLIRGen().append(new SPARCOP3Op(And, inputVal, mask, result)); + } + return result; + } + + @Override + public AllocatableValue emitReinterpret(LIRKind to, Value inputVal) { + SPARCKind fromKind = (SPARCKind) inputVal.getPlatformKind(); + SPARCKind toKind = (SPARCKind) to.getPlatformKind(); + AllocatableValue input = getLIRGen().asAllocatable(inputVal); + Variable result = getLIRGen().newVariable(to); + // These cases require a move between CPU and FPU registers: + if (fromKind.isFloat() != toKind.isFloat()) { + moveBetweenFpGp(result, input); + return result; + } else { + // Otherwise, just emit an ordinary move instruction. + // Instructions that move or generate 32-bit register values also set the upper 32 + // bits of the register to zero. + // Consequently, there is no need for a special zero-extension move. + return emitConvertMove(to, input); + } + } +}
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCImmediateAddressNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCImmediateAddressNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.compiler.sparc; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCIndexedAddressNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCIndexedAddressNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.compiler.sparc; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.lir.sparc.SPARCIndexedAddressValue;
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,61 +27,25 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.FMOVSCC; import static com.oracle.graal.asm.sparc.SPARCAssembler.MOVicc; import static com.oracle.graal.asm.sparc.SPARCAssembler.CC.Fcc0; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Add; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Addcc; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.And; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Mulx; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sdivx; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sllx; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sra; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Srax; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Srl; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Sub; import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Subcc; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Udivx; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Op3s.Xnor; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Faddd; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fadds; import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fcmpd; import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fcmps; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fdivd; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fdivs; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fdtos; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fitod; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fitos; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fmuld; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fmuls; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fnegd; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fnegs; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fstod; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.Fxtod; -import static com.oracle.graal.asm.sparc.SPARCAssembler.Opfs.UMulxhi; import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static com.oracle.graal.lir.sparc.SPARCBitManipulationOp.IntrinsicOpcode.BSF; -import static com.oracle.graal.lir.sparc.SPARCBitManipulationOp.IntrinsicOpcode.IBSR; -import static com.oracle.graal.lir.sparc.SPARCBitManipulationOp.IntrinsicOpcode.LBSR; -import static jdk.internal.jvmci.code.CodeUtil.mask; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.meta.JavaConstant.forLong; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARCKind.DOUBLE; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.SINGLE; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -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.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARC.CPUFeature; -import jdk.internal.jvmci.sparc.SPARCKind; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static jdk.vm.ci.sparc.SPARCKind.SINGLE; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCAssembler.CC; @@ -90,7 +54,6 @@ import com.oracle.graal.asm.sparc.SPARCAssembler.Op3s; import com.oracle.graal.asm.sparc.SPARCAssembler.Opfs; import com.oracle.graal.compiler.common.calc.Condition; -import com.oracle.graal.compiler.common.calc.FloatConvert; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.common.spi.LIRKindTool; import com.oracle.graal.lir.ConstantValue; @@ -102,20 +65,12 @@ import com.oracle.graal.lir.StandardOp.NoOp; import com.oracle.graal.lir.SwitchStrategy; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.gen.LIRGenerationResult; import com.oracle.graal.lir.gen.LIRGenerator; import com.oracle.graal.lir.gen.SpillMoveFactoryBase; import com.oracle.graal.lir.sparc.SPARCAddressValue; -import com.oracle.graal.lir.sparc.SPARCArithmetic; -import com.oracle.graal.lir.sparc.SPARCArithmetic.MulHighOp; -import com.oracle.graal.lir.sparc.SPARCArithmetic.MulHighOp.MulHigh; -import com.oracle.graal.lir.sparc.SPARCArithmetic.RemOp; -import com.oracle.graal.lir.sparc.SPARCArithmetic.RemOp.Rem; -import com.oracle.graal.lir.sparc.SPARCArithmetic.SPARCIMulccOp; -import com.oracle.graal.lir.sparc.SPARCArithmetic.SPARCLMulccOp; -import com.oracle.graal.lir.sparc.SPARCArithmetic.FloatConvertOp; import com.oracle.graal.lir.sparc.SPARCArrayEqualsOp; -import com.oracle.graal.lir.sparc.SPARCBitManipulationOp; import com.oracle.graal.lir.sparc.SPARCByteSwapOp; import com.oracle.graal.lir.sparc.SPARCCall; import com.oracle.graal.lir.sparc.SPARCControlFlow; @@ -134,11 +89,9 @@ import com.oracle.graal.lir.sparc.SPARCMove.LoadOp; import com.oracle.graal.lir.sparc.SPARCMove.MembarOp; import com.oracle.graal.lir.sparc.SPARCMove.Move; -import com.oracle.graal.lir.sparc.SPARCMove.MoveFpGp; import com.oracle.graal.lir.sparc.SPARCMove.NullCheckOp; import com.oracle.graal.lir.sparc.SPARCMove.StackLoadAddressOp; import com.oracle.graal.lir.sparc.SPARCOP3Op; -import com.oracle.graal.lir.sparc.SPARCOPFOp; import com.oracle.graal.phases.util.Providers; /** @@ -168,8 +121,8 @@ } } - public SPARCLIRGenerator(LIRKindTool lirKindTool, Providers providers, CallingConvention cc, LIRGenerationResult lirGenRes) { - super(lirKindTool, providers, cc, lirGenRes); + public SPARCLIRGenerator(LIRKindTool lirKindTool, SPARCArithmeticLIRGenerator arithmeticLIRGen, Providers providers, CallingConvention cc, LIRGenerationResult lirGenRes) { + super(lirKindTool, arithmeticLIRGen, providers, cc, lirGenRes); } public SpillMoveFactory getSpillMoveFactory() { @@ -207,7 +160,7 @@ return JavaConstant.forShort((short) dead); case WORD: return JavaConstant.forInt((int) dead); - case DWORD: + case XWORD: return JavaConstant.forLong(dead); case SINGLE: case V32_BYTE: @@ -304,9 +257,9 @@ } @Override - public Variable emitAddress(StackSlotValue address) { + public Variable emitAddress(AllocatableValue stackslot) { Variable result = newVariable(LIRKind.value(target().arch.getWordKind())); - append(new StackLoadAddressOp(result, address)); + append(new StackLoadAddressOp(result, stackslot)); return result; } @@ -373,7 +326,7 @@ if (from == to) { return v; } else { - return emitSignExtend(v, fromBytes, toBytes); + return arithmeticLIRGen.emitSignExtend(v, fromBytes, toBytes); } } } @@ -477,10 +430,10 @@ int compareBytes = cmpKind.getSizeInBytes(); // SPARC compares 32 or 64 bits if (compareBytes < left.getPlatformKind().getSizeInBytes()) { - left = emitSignExtend(left, compareBytes * 8, DWORD.getSizeInBytes() * 8); + left = arithmeticLIRGen.emitSignExtend(left, compareBytes * 8, XWORD.getSizeInBytes() * 8); } if (compareBytes < right.getPlatformKind().getSizeInBytes()) { - right = emitSignExtend(right, compareBytes * 8, DWORD.getSizeInBytes() * 8); + right = arithmeticLIRGen.emitSignExtend(right, compareBytes * 8, XWORD.getSizeInBytes() * 8); } append(SPARCOP3Op.newBinaryVoid(Subcc, left, right)); return mirrored; @@ -548,72 +501,12 @@ append(new TableSwitchOp(lowKey, defaultTarget, targets, tmp, newVariable(LIRKind.value(target().arch.getWordKind())))); } - @Override - public Variable emitBitCount(Value operand) { - Variable result = newVariable(LIRKind.combine(operand).changeType(SPARCKind.WORD)); - Value usedOperand = operand; - if (operand.getPlatformKind() == SPARCKind.WORD) { // Zero extend - usedOperand = newVariable(operand.getLIRKind()); - append(new SPARCOP3Op(Op3s.Srl, operand, SPARC.g0.asValue(), usedOperand)); - } - append(new SPARCOP3Op(Op3s.Popc, SPARC.g0.asValue(), usedOperand, result)); - return result; - } - - @Override - public Variable emitBitScanForward(Value operand) { - Variable result = newVariable(LIRKind.combine(operand).changeType(SPARCKind.WORD)); - append(new SPARCBitManipulationOp(BSF, result, asAllocatable(operand), this)); - return result; - } - - @Override - public Variable emitBitScanReverse(Value operand) { - Variable result = newVariable(LIRKind.combine(operand).changeType(SPARCKind.WORD)); - if (operand.getPlatformKind() == SPARCKind.DWORD) { - append(new SPARCBitManipulationOp(LBSR, result, asAllocatable(operand), this)); - } else { - append(new SPARCBitManipulationOp(IBSR, result, asAllocatable(operand), this)); - } - return result; + protected VirtualStackSlot getTempSlot(LIRKind kind) { + return getResult().getFrameMapBuilder().allocateSpillSlot(kind); } - @Override - public Value emitMathAbs(Value input) { - Variable result = newVariable(LIRKind.combine(input)); - SPARCKind kind = (SPARCKind) input.getPlatformKind(); - Opfs opf; - switch (kind) { - case SINGLE: - opf = Opfs.Fabss; - break; - case DOUBLE: - opf = Opfs.Fabsd; - break; - default: - throw JVMCIError.shouldNotReachHere("Input kind: " + kind); - } - append(new SPARCOPFOp(opf, g0.asValue(), input, result)); - return result; - } - - @Override - public Value emitMathSqrt(Value input) { - Variable result = newVariable(LIRKind.combine(input)); - SPARCKind kind = (SPARCKind) input.getPlatformKind(); - Opfs opf; - switch (kind) { - case SINGLE: - opf = Opfs.Fsqrts; - break; - case DOUBLE: - opf = Opfs.Fsqrtd; - break; - default: - throw JVMCIError.shouldNotReachHere("Input kind: " + kind); - } - append(new SPARCOPFOp(opf, g0.asValue(), input, result)); - return result; + protected SPARC getArchitecture() { + return (SPARC) target().arch; } @Override @@ -631,512 +524,6 @@ } @Override - public Value emitNegate(Value input) { - PlatformKind inputKind = input.getPlatformKind(); - if (isNumericInteger(inputKind)) { - return emitUnary(Sub, input); - } else { - return emitUnary(inputKind.equals(DOUBLE) ? Fnegd : Fnegs, input); - } - } - - @Override - public Value emitNot(Value input) { - return emitUnary(Xnor, input); - } - - private Variable emitUnary(Opfs opf, Value input) { - Variable result = newVariable(LIRKind.combine(input)); - append(new SPARCOPFOp(opf, g0.asValue(), input, result)); - return result; - } - - private Variable emitUnary(Op3s op3, Value input) { - Variable result = newVariable(LIRKind.combine(input)); - append(SPARCOP3Op.newUnary(op3, input, result)); - return result; - } - - private Variable emitBinary(LIRKind resultKind, Opfs opf, Value a, Value b) { - return emitBinary(resultKind, opf, a, b, null); - } - - private Variable emitBinary(LIRKind resultKind, Opfs opf, Value a, Value b, LIRFrameState state) { - Variable result = newVariable(resultKind); - if (opf.isCommutative() && isJavaConstant(a) && canInlineConstant(asJavaConstant(a))) { - append(new SPARCOPFOp(opf, b, a, result, state)); - } else { - append(new SPARCOPFOp(opf, a, b, result, state)); - } - return result; - } - - private Variable emitBinary(LIRKind resultKind, Op3s op3, Value a, int b) { - return emitBinary(resultKind, op3, a, new ConstantValue(LIRKind.value(WORD), JavaConstant.forInt(b))); - } - - private Variable emitBinary(LIRKind resultKind, Op3s op3, Value a, Value b) { - return emitBinary(resultKind, op3, a, b, null); - } - - private Variable emitBinary(LIRKind resultKind, Op3s op3, Value a, Value b, LIRFrameState state) { - Variable result = newVariable(resultKind); - if (op3.isCommutative() && isJavaConstant(a) && canInlineConstant(asJavaConstant(a))) { - append(new SPARCOP3Op(op3, load(b), a, result, state)); - } else { - append(new SPARCOP3Op(op3, load(a), b, result, state)); - } - return result; - } - - @Override - protected boolean isNumericInteger(PlatformKind kind) { - return ((SPARCKind) kind).isInteger(); - } - - @Override - public Variable emitAdd(LIRKind resultKind, Value a, Value b, boolean setFlags) { - if (isNumericInteger(a.getPlatformKind())) { - return emitBinary(resultKind, setFlags ? Addcc : Add, a, b); - } else { - boolean isDouble = a.getPlatformKind().equals(DOUBLE); - return emitBinary(resultKind, isDouble ? Faddd : Fadds, a, b); - } - } - - @Override - public Variable emitSub(LIRKind resultKind, Value a, Value b, boolean setFlags) { - if (isNumericInteger(a.getPlatformKind())) { - return emitBinary(resultKind, setFlags ? Subcc : Sub, a, b); - } else { - boolean isDouble = a.getPlatformKind().equals(DOUBLE); - return emitBinary(resultKind, isDouble ? Opfs.Fsubd : Opfs.Fsubs, a, b); - } - } - - @Override - public Variable emitMul(Value a, Value b, boolean setFlags) { - LIRKind resultKind = LIRKind.combine(a, b); - PlatformKind aKind = a.getPlatformKind(); - if (isNumericInteger(aKind)) { - if (setFlags) { - Variable result = newVariable(LIRKind.combine(a, b)); - if (aKind == DWORD) { - append(new SPARCLMulccOp(result, load(a), load(b), this)); - } else if (aKind == WORD) { - append(new SPARCIMulccOp(result, load(a), load(b))); - } else { - throw JVMCIError.shouldNotReachHere(); - } - return result; - } else { - return emitBinary(resultKind, setFlags ? Op3s.Mulscc : Op3s.Mulx, a, b); - } - } else { - boolean isDouble = a.getPlatformKind().equals(DOUBLE); - return emitBinary(resultKind, isDouble ? Fmuld : Fmuls, a, b); - } - } - - @Override - public Value emitMulHigh(Value a, Value b) { - MulHigh opcode; - switch (((SPARCKind) a.getPlatformKind())) { - case WORD: - opcode = MulHigh.IMUL; - break; - case DWORD: - opcode = MulHigh.LMUL; - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return emitMulHigh(opcode, a, b); - } - - @Override - public Value emitUMulHigh(Value a, Value b) { - switch (((SPARCKind) a.getPlatformKind())) { - case WORD: - Value aExtended = emitBinary(LIRKind.combine(a), Srl, a, 0); - Value bExtended = emitBinary(LIRKind.combine(b), Srl, b, 0); - Value result = emitBinary(LIRKind.combine(a, b), Mulx, aExtended, bExtended); - return emitBinary(LIRKind.combine(a, b), Srax, result, WORD.getSizeInBits()); - case DWORD: - return emitBinary(LIRKind.combine(a, b), UMulxhi, a, b); - default: - throw JVMCIError.shouldNotReachHere(); - } - } - - private Value emitMulHigh(MulHigh opcode, Value a, Value b) { - Variable result = newVariable(LIRKind.combine(a, b)); - MulHighOp mulHigh = new MulHighOp(opcode, load(a), load(b), result, newVariable(LIRKind.combine(a, b))); - append(mulHigh); - return result; - } - - @Override - public Value emitDiv(Value a, Value b, LIRFrameState state) { - LIRKind resultKind = LIRKind.combine(a, b); - PlatformKind aKind = a.getPlatformKind(); - PlatformKind bKind = b.getPlatformKind(); - if (isJavaConstant(b) && asJavaConstant(b).isDefaultForKind()) { // Div by zero - Value zero = SPARC.g0.asValue(LIRKind.value(SPARCKind.WORD)); - return emitBinary(resultKind, Op3s.Sdivx, zero, zero, state); - } else if (isNumericInteger(aKind)) { - Value fixedA = emitSignExtend(a, aKind.getSizeInBytes() * 8, 64); - Value fixedB = emitSignExtend(b, bKind.getSizeInBytes() * 8, 64); - return emitBinary(resultKind, Op3s.Sdivx, fixedA, fixedB, state); - } else { - boolean isDouble = a.getPlatformKind().equals(DOUBLE); - return emitBinary(resultKind, isDouble ? Opfs.Fdivd : Opfs.Fdivs, a, b, state); - } - } - - @Override - public Value emitRem(Value a, Value b, LIRFrameState state) { - Variable result = newVariable(LIRKind.combine(a, b)); - Value aLoaded; - Value bLoaded; - Variable q1; // Intermediate values - Variable q2; - Variable q3; - Variable q4; - SPARCKind aKind = (SPARCKind) a.getPlatformKind(); - switch (aKind) { - case WORD: - q1 = emitBinary(result.getLIRKind(), Sra, a, g0.asValue(LIRKind.value(WORD))); - q2 = emitBinary(q1.getLIRKind(), Sdivx, q1, b, state); - q3 = emitBinary(q2.getLIRKind(), Op3s.Mulx, q2, b); - result = emitSub(q1, q3, false); - break; - case DWORD: - aLoaded = load(a); // Reuse the loaded value - q1 = emitBinary(result.getLIRKind(), Sdivx, aLoaded, b, state); - q2 = emitBinary(result.getLIRKind(), Mulx, q1, b); - result = emitSub(aLoaded, q2, false); - break; - case SINGLE: - aLoaded = load(a); - bLoaded = load(b); - q1 = emitBinary(result.getLIRKind(), Fdivs, aLoaded, bLoaded, state); - q2 = newVariable(LIRKind.value(aKind)); - append(new FloatConvertOp(FloatConvertOp.FloatConvert.F2I, q1, q2)); - q3 = emitUnary(Fitos, q2); - q4 = emitBinary(LIRKind.value(aKind), Fmuls, q3, bLoaded); - result = emitSub(aLoaded, q4, false); - break; - case DOUBLE: - aLoaded = load(a); - bLoaded = load(b); - q1 = emitBinary(result.getLIRKind(), Fdivd, aLoaded, bLoaded, state); - q2 = newVariable(LIRKind.value(aKind)); - append(new FloatConvertOp(FloatConvertOp.FloatConvert.D2L, q1, q2)); - q3 = emitUnary(Fxtod, q2); - q4 = emitBinary(result.getLIRKind(), Fmuld, q3, bLoaded); - result = emitSub(aLoaded, q4, false); - break; - default: - throw JVMCIError.shouldNotReachHere("missing: " + a.getPlatformKind()); - } - return result; - } - - @Override - public Value emitURem(Value a, Value b, LIRFrameState state) { - Variable result = newVariable(LIRKind.combine(a, b)); - Variable scratch1 = newVariable(LIRKind.combine(a, b)); - Variable scratch2 = newVariable(LIRKind.combine(a, b)); - Rem opcode; - switch (((SPARCKind) a.getPlatformKind())) { - case WORD: - opcode = Rem.IUREM; - break; - case DWORD: - opcode = Rem.LUREM; - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - append(new RemOp(opcode, result, load(a), load(b), scratch1, scratch2, state)); - return result; - - } - - @Override - public Value emitUDiv(Value a, Value b, LIRFrameState state) { - Value actualA = a; - Value actualB = b; - switch (((SPARCKind) a.getPlatformKind())) { - case WORD: - actualA = emitZeroExtend(actualA, 32, 64); - actualB = emitZeroExtend(actualB, 32, 64); - break; - case DWORD: - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return emitBinary(LIRKind.combine(actualA, actualB), Udivx, actualA, actualB, state); - } - - @Override - public Variable emitAnd(Value a, Value b) { - LIRKind resultKind = LIRKind.combine(a, b); - return emitBinary(resultKind, Op3s.And, a, b); - } - - @Override - public Variable emitOr(Value a, Value b) { - LIRKind resultKind = LIRKind.combine(a, b); - return emitBinary(resultKind, Op3s.Or, a, b); - } - - @Override - public Variable emitXor(Value a, Value b) { - LIRKind resultKind = LIRKind.combine(a, b); - return emitBinary(resultKind, Op3s.Xor, a, b); - } - - @Override - public Variable emitShl(Value a, Value b) { - SPARCKind aKind = (SPARCKind) a.getPlatformKind(); - LIRKind resultKind = LIRKind.combine(a, b).changeType(aKind); - Op3s op; - switch (aKind) { - case WORD: - op = Op3s.Sll; - break; - case DWORD: - op = Op3s.Sllx; - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return emitBinary(resultKind, op, a, b); - } - - @Override - public Variable emitShr(Value a, Value b) { - SPARCKind aKind = (SPARCKind) a.getPlatformKind(); - LIRKind resultKind = LIRKind.combine(a, b).changeType(aKind); - Op3s op; - switch (aKind) { - case WORD: - op = Op3s.Sra; - break; - case DWORD: - op = Op3s.Srax; - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return emitBinary(resultKind, op, a, b); - } - - @Override - public Variable emitUShr(Value a, Value b) { - SPARCKind aKind = (SPARCKind) a.getPlatformKind(); - LIRKind resultKind = LIRKind.combine(a, b).changeType(aKind); - Op3s op; - switch (aKind) { - case WORD: - op = Op3s.Srl; - break; - case DWORD: - op = Op3s.Srlx; - break; - default: - throw JVMCIError.shouldNotReachHere(); - } - return emitBinary(resultKind, op, a, b); - } - - private AllocatableValue emitConvertMove(LIRKind kind, AllocatableValue input) { - Variable result = newVariable(kind); - emitMove(result, input); - return result; - } - - @Override - public Value emitFloatConvert(FloatConvert op, Value inputVal) { - AllocatableValue input = asAllocatable(inputVal); - Value result; - switch (op) { - case D2F: - result = newVariable(LIRKind.combine(inputVal).changeType(SINGLE)); - append(new SPARCOPFOp(Fdtos, inputVal, result)); - break; - case F2D: - result = newVariable(LIRKind.combine(inputVal).changeType(DOUBLE)); - append(new SPARCOPFOp(Fstod, inputVal, result)); - break; - case I2F: { - AllocatableValue intEncodedFloatReg = newVariable(LIRKind.combine(input).changeType(SINGLE)); - result = newVariable(intEncodedFloatReg.getLIRKind()); - moveBetweenFpGp(intEncodedFloatReg, input); - append(new SPARCOPFOp(Fitos, intEncodedFloatReg, result)); - break; - } - case I2D: { - // Unfortunately we must do int -> float -> double because fitod has float - // and double encoding in one instruction - AllocatableValue convertedFloatReg = newVariable(LIRKind.combine(input).changeType(SINGLE)); - result = newVariable(LIRKind.combine(input).changeType(DOUBLE)); - moveBetweenFpGp(convertedFloatReg, input); - append(new SPARCOPFOp(Fitod, convertedFloatReg, result)); - break; - } - case L2D: { - AllocatableValue longEncodedDoubleReg = newVariable(LIRKind.combine(input).changeType(DOUBLE)); - moveBetweenFpGp(longEncodedDoubleReg, input); - AllocatableValue convertedDoubleReg = newVariable(longEncodedDoubleReg.getLIRKind()); - append(new SPARCOPFOp(Fxtod, longEncodedDoubleReg, convertedDoubleReg)); - result = convertedDoubleReg; - break; - } - case D2I: { - AllocatableValue convertedFloatReg = newVariable(LIRKind.combine(input).changeType(SINGLE)); - append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.D2I, input, convertedFloatReg)); - AllocatableValue convertedIntReg = newVariable(LIRKind.combine(convertedFloatReg).changeType(WORD)); - moveBetweenFpGp(convertedIntReg, convertedFloatReg); - result = convertedIntReg; - break; - } - case F2L: { - AllocatableValue convertedDoubleReg = newVariable(LIRKind.combine(input).changeType(DOUBLE)); - append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.F2L, input, convertedDoubleReg)); - AllocatableValue convertedLongReg = newVariable(LIRKind.combine(convertedDoubleReg).changeType(DWORD)); - moveBetweenFpGp(convertedLongReg, convertedDoubleReg); - result = convertedLongReg; - break; - } - case F2I: { - AllocatableValue convertedFloatReg = newVariable(LIRKind.combine(input).changeType(SINGLE)); - append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.F2I, input, convertedFloatReg)); - AllocatableValue convertedIntReg = newVariable(LIRKind.combine(convertedFloatReg).changeType(WORD)); - moveBetweenFpGp(convertedIntReg, convertedFloatReg); - result = convertedIntReg; - break; - } - case D2L: { - AllocatableValue convertedDoubleReg = newVariable(LIRKind.combine(input).changeType(DOUBLE)); - append(new SPARCArithmetic.FloatConvertOp(FloatConvertOp.FloatConvert.D2L, input, convertedDoubleReg)); - AllocatableValue convertedLongReg = newVariable(LIRKind.combine(convertedDoubleReg).changeType(DWORD)); - moveBetweenFpGp(convertedLongReg, convertedDoubleReg); - result = convertedLongReg; - break; - } - case L2F: { - AllocatableValue convertedDoubleReg = newVariable(LIRKind.combine(input).changeType(DOUBLE)); - result = newVariable(LIRKind.combine(input).changeType(SINGLE)); - moveBetweenFpGp(convertedDoubleReg, input); - append(new SPARCOPFOp(Opfs.Fxtos, convertedDoubleReg, result)); - break; - } - default: - throw JVMCIError.shouldNotReachHere(); - } - return result; - } - - private void moveBetweenFpGp(AllocatableValue dst, AllocatableValue src) { - AllocatableValue tempSlot; - if (getArchitecture().getFeatures().contains(CPUFeature.VIS3)) { - tempSlot = AllocatableValue.ILLEGAL; - } else { - tempSlot = getTempSlot(LIRKind.value(DWORD)); - } - append(new MoveFpGp(dst, src, tempSlot)); - } - - protected StackSlotValue getTempSlot(LIRKind kind) { - return getResult().getFrameMapBuilder().allocateSpillSlot(kind); - } - - protected SPARC getArchitecture() { - return (SPARC) target().arch; - } - - @Override - public Value emitNarrow(Value inputVal, int bits) { - if (inputVal.getPlatformKind() == DWORD && bits <= 32) { - LIRKind resultKind = LIRKind.combine(inputVal).changeType(WORD); - Variable result = newVariable(resultKind); - emitMove(result, inputVal); - return result; - } else { - return inputVal; - } - } - - @Override - public Value emitSignExtend(Value inputVal, int fromBits, int toBits) { - assert fromBits <= toBits && toBits <= DWORD.getSizeInBits(); - LIRKind shiftKind = LIRKind.value(WORD); - LIRKind resultKind = LIRKind.combine(inputVal).changeType(toBits > 32 ? DWORD : WORD); - Value result; - int shiftCount = DWORD.getSizeInBits() - fromBits; - if (fromBits == toBits) { - result = inputVal; - } else if (isJavaConstant(inputVal)) { - JavaConstant javaConstant = asJavaConstant(inputVal); - long constant; - if (javaConstant.isNull()) { - constant = 0; - } else { - constant = javaConstant.asLong(); - } - return new ConstantValue(resultKind, JavaConstant.forLong((constant << shiftCount) >> shiftCount)); - } else if (fromBits == WORD.getSizeInBits() && toBits == DWORD.getSizeInBits()) { - result = newVariable(resultKind); - append(new SPARCOP3Op(Sra, inputVal, SPARC.g0.asValue(LIRKind.value(WORD)), result)); - } else { - Variable tmp = newVariable(resultKind.changeType(DWORD)); - result = newVariable(resultKind); - append(new SPARCOP3Op(Sllx, inputVal, new ConstantValue(shiftKind, JavaConstant.forInt(shiftCount)), tmp)); - append(new SPARCOP3Op(Srax, tmp, new ConstantValue(shiftKind, JavaConstant.forInt(shiftCount)), result)); - } - return result; - } - - @Override - public Value emitZeroExtend(Value inputVal, int fromBits, int toBits) { - assert fromBits <= toBits && toBits <= 64; - if (fromBits == toBits) { - return inputVal; - } - Variable result = newVariable(LIRKind.combine(inputVal).changeType(toBits > WORD.getSizeInBits() ? DWORD : WORD)); - if (fromBits == 32) { - append(new SPARCOP3Op(Srl, inputVal, g0.asValue(), result)); - } else { - Value mask = emitConstant(LIRKind.value(DWORD), forLong(mask(fromBits))); - append(new SPARCOP3Op(And, inputVal, mask, result)); - } - return result; - } - - @Override - public AllocatableValue emitReinterpret(LIRKind to, Value inputVal) { - SPARCKind fromKind = (SPARCKind) inputVal.getPlatformKind(); - SPARCKind toKind = (SPARCKind) to.getPlatformKind(); - AllocatableValue input = asAllocatable(inputVal); - Variable result = newVariable(to); - // These cases require a move between CPU and FPU registers: - if (fromKind.isFloat() != toKind.isFloat()) { - moveBetweenFpGp(result, input); - return result; - } else { - // Otherwise, just emit an ordinary move instruction. - // Instructions that move or generate 32-bit register values also set the upper 32 - // bits of the register to zero. - // Consequently, there is no need for a special zero-extension move. - return emitConvertMove(to, input); - } - } - - @Override public void emitMembar(int barriers) { int necessaryBarriers = target().arch.requiredBarriers(barriers); if (target().isMP && necessaryBarriers != 0) { @@ -1158,12 +545,12 @@ public void emitNullCheck(Value address, LIRFrameState state) { PlatformKind kind = address.getPlatformKind(); - assert kind == DWORD : address + " - " + kind + " not an object!"; + assert kind == XWORD : address + " - " + kind + " not an object!"; append(new NullCheckOp(asAddressValue(address), state)); } public void emitLoadConstantTableBase() { - constantTableBase = newVariable(LIRKind.value(DWORD)); + constantTableBase = newVariable(LIRKind.value(XWORD)); int nextPosition = getResult().getLIR().getLIRforBlock(getCurrentBlock()).size(); NoOp placeHolder = append(new NoOp(getCurrentBlock(), nextPosition)); loadConstantTableBaseOp = new SPARCLoadConstantTableBaseOp(constantTableBase, placeHolder);
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRKindTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRKindTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.sparc; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.compiler.common.spi.LIRKindTool; @@ -39,7 +39,7 @@ return LIRKind.value(SPARCKind.WORD); } else { assert bits <= 64; - return LIRKind.value(SPARCKind.DWORD); + return LIRKind.value(SPARCKind.XWORD); } } @@ -55,10 +55,10 @@ } public LIRKind getObjectKind() { - return LIRKind.reference(SPARCKind.DWORD); + return LIRKind.reference(SPARCKind.XWORD); } public LIRKind getWordKind() { - return LIRKind.value(SPARCKind.DWORD); + return LIRKind.value(SPARCKind.XWORD); } }
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeLIRBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,41 +23,27 @@ package com.oracle.graal.compiler.sparc; -import static jdk.internal.jvmci.sparc.SPARCKind.BYTE; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.HWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.gen.NodeLIRBuilder; -import com.oracle.graal.compiler.match.ComplexMatchResult; -import com.oracle.graal.compiler.match.MatchRule; -import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LabelRef; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.lir.sparc.SPARCBreakpointOp; import com.oracle.graal.lir.sparc.SPARCJumpOp; import com.oracle.graal.nodes.BreakpointNode; -import com.oracle.graal.nodes.DeoptimizingNode; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.calc.SignExtendNode; -import com.oracle.graal.nodes.calc.ZeroExtendNode; -import com.oracle.graal.nodes.memory.Access; /** * This class implements the SPARC specific portion of the LIR generator. */ public abstract class SPARCNodeLIRBuilder extends NodeLIRBuilder { - public SPARCNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { - super(graph, lirGen); + public SPARCNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen, SPARCNodeMatchRules nodeMatchRules) { + super(graph, lirGen, nodeMatchRules); } @Override @@ -83,94 +69,6 @@ return new SPARCJumpOp(ref); } - protected LIRFrameState getState(Access access) { - if (access instanceof DeoptimizingNode) { - return state((DeoptimizingNode) access); - } - return null; - } - - private ComplexMatchResult emitSignExtendMemory(Access access, int fromBits, int toBits) { - assert fromBits <= toBits && toBits <= 64; - SPARCKind toKind = null; - SPARCKind fromKind = null; - if (fromBits == toBits) { - return null; - } else if (toBits > WORD.getSizeInBits()) { - toKind = DWORD; - } else if (toBits > HWORD.getSizeInBits()) { - toKind = WORD; - } else if (toBits > BYTE.getSizeInBits()) { - toKind = HWORD; - } - switch (fromBits) { - case 8: - fromKind = BYTE; - break; - case 16: - fromKind = HWORD; - break; - case 32: - fromKind = WORD; - break; - default: - throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); - } - SPARCKind localFromKind = fromKind; - SPARCKind localToKind = toKind; - return builder -> { - Value v = getLIRGeneratorTool().emitSignExtendLoad(LIRKind.value(localFromKind), operand(access.getAddress()), getState(access)); - return getLIRGeneratorTool().emitReinterpret(LIRKind.value(localToKind), v); - }; - } - - private ComplexMatchResult emitZeroExtendMemory(Access access, int fromBits, int toBits) { - assert fromBits <= toBits && toBits <= 64; - SPARCKind toKind = null; - SPARCKind fromKind = null; - if (fromBits == toBits) { - return null; - } else if (toBits > WORD.getSizeInBits()) { - toKind = DWORD; - } else if (toBits > HWORD.getSizeInBits()) { - toKind = WORD; - } else if (toBits > BYTE.getSizeInBits()) { - toKind = HWORD; - } - switch (fromBits) { - case 8: - fromKind = BYTE; - break; - case 16: - fromKind = HWORD; - break; - case 32: - fromKind = WORD; - break; - default: - throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); - } - SPARCKind localFromKind = fromKind; - SPARCKind localToKind = toKind; - return builder -> { - // Loads are always zero extending load - Value v = getLIRGeneratorTool().emitLoad(LIRKind.value(localFromKind), operand(access.getAddress()), getState(access)); - return getLIRGeneratorTool().emitReinterpret(LIRKind.value(localToKind), v); - }; - } - - @MatchRule("(SignExtend Read=access)") - @MatchRule("(SignExtend FloatingRead=access)") - public ComplexMatchResult signExtend(SignExtendNode root, Access access) { - return emitSignExtendMemory(access, root.getInputBits(), root.getResultBits()); - } - - @MatchRule("(ZeroExtend Read=access)") - @MatchRule("(ZeroExtend FloatingRead=access)") - public ComplexMatchResult zeroExtend(ZeroExtendNode root, Access access) { - return emitZeroExtendMemory(access, root.getInputBits(), root.getResultBits()); - } - @Override public SPARCLIRGenerator getLIRGeneratorTool() { return (SPARCLIRGenerator) super.getLIRGeneratorTool();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCNodeMatchRules.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2009, 2015, 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.compiler.sparc; + +import static jdk.vm.ci.sparc.SPARCKind.BYTE; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import static jdk.vm.ci.sparc.SPARCKind.HWORD; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARCKind; + +import com.oracle.graal.compiler.gen.NodeMatchRules; +import com.oracle.graal.compiler.match.ComplexMatchResult; +import com.oracle.graal.compiler.match.MatchRule; +import com.oracle.graal.lir.LIRFrameState; +import com.oracle.graal.lir.gen.LIRGeneratorTool; +import com.oracle.graal.nodes.DeoptimizingNode; +import com.oracle.graal.nodes.calc.SignExtendNode; +import com.oracle.graal.nodes.calc.ZeroExtendNode; +import com.oracle.graal.nodes.memory.Access; + +/** + * This class implements the SPARC specific portion of the LIR generator. + */ +public class SPARCNodeMatchRules extends NodeMatchRules { + + public SPARCNodeMatchRules(LIRGeneratorTool gen) { + super(gen); + } + + protected LIRFrameState getState(Access access) { + if (access instanceof DeoptimizingNode) { + return state((DeoptimizingNode) access); + } + return null; + } + + private ComplexMatchResult emitSignExtendMemory(Access access, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= 64; + SPARCKind toKind = null; + SPARCKind fromKind = null; + if (fromBits == toBits) { + return null; + } else if (toBits > WORD.getSizeInBits()) { + toKind = XWORD; + } else if (toBits > HWORD.getSizeInBits()) { + toKind = WORD; + } else if (toBits > BYTE.getSizeInBits()) { + toKind = HWORD; + } + switch (fromBits) { + case 8: + fromKind = BYTE; + break; + case 16: + fromKind = HWORD; + break; + case 32: + fromKind = WORD; + break; + default: + throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + } + SPARCKind localFromKind = fromKind; + SPARCKind localToKind = toKind; + return builder -> { + Value v = getLIRGeneratorTool().emitSignExtendLoad(LIRKind.value(localFromKind), operand(access.getAddress()), getState(access)); + return getArithmeticLIRGenerator().emitReinterpret(LIRKind.value(localToKind), v); + }; + } + + private ComplexMatchResult emitZeroExtendMemory(Access access, int fromBits, int toBits) { + assert fromBits <= toBits && toBits <= 64; + SPARCKind toKind = null; + SPARCKind fromKind = null; + if (fromBits == toBits) { + return null; + } else if (toBits > WORD.getSizeInBits()) { + toKind = XWORD; + } else if (toBits > HWORD.getSizeInBits()) { + toKind = WORD; + } else if (toBits > BYTE.getSizeInBits()) { + toKind = HWORD; + } + switch (fromBits) { + case 8: + fromKind = BYTE; + break; + case 16: + fromKind = HWORD; + break; + case 32: + fromKind = WORD; + break; + default: + throw JVMCIError.unimplemented("unsupported sign extension (" + fromBits + " bit -> " + toBits + " bit)"); + } + SPARCKind localFromKind = fromKind; + SPARCKind localToKind = toKind; + return builder -> { + // Loads are always zero extending load + Value v = getLIRGeneratorTool().emitLoad(LIRKind.value(localFromKind), operand(access.getAddress()), getState(access)); + return getArithmeticLIRGenerator().emitReinterpret(LIRKind.value(localToKind), v); + }; + } + + @MatchRule("(SignExtend Read=access)") + @MatchRule("(SignExtend FloatingRead=access)") + public ComplexMatchResult signExtend(SignExtendNode root, Access access) { + return emitSignExtendMemory(access, root.getInputBits(), root.getResultBits()); + } + + @MatchRule("(ZeroExtend Read=access)") + @MatchRule("(ZeroExtend FloatingRead=access)") + public ComplexMatchResult zeroExtend(ZeroExtendNode root, Access access) { + return emitZeroExtendMemory(access, root.getInputBits(), root.getResultBits()); + } + + @Override + public SPARCLIRGenerator getLIRGeneratorTool() { + return (SPARCLIRGenerator) super.getLIRGeneratorTool(); + } + + protected SPARCArithmeticLIRGenerator getArithmeticLIRGenerator() { + return (SPARCArithmeticLIRGenerator) getLIRGeneratorTool().getArithmetic(); + } +}
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CheckGraalInvariants.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -40,24 +40,24 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.Register.RegisterCategory; -import jdk.internal.jvmci.meta.JavaField; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.LIRKind; -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.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.Register.RegisterCategory; +import jdk.vm.ci.meta.JavaField; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Value; import org.junit.Assert; import org.junit.Assume; import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.CompilerThreadFactory; import com.oracle.graal.compiler.CompilerThreadFactory.DebugConfigAccess; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; @@ -98,7 +98,7 @@ private static boolean shouldVerifyEquals(ResolvedJavaMethod m) { if (m.getName().equals("identityEquals")) { ResolvedJavaType c = m.getDeclaringClass(); - if (c.getName().equals("Ljdk/internal/jvmci/meta/AbstractValue;") || c.getName().equals("jdk/internal/jvmci/meta/Value")) { + if (c.getName().equals("Ljdk/vm/ci/meta/AbstractValue;") || c.getName().equals("jdk/vm/ci/meta/Value")) { return false; } }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CommonedConstantsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CommonedConstantsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.lang.reflect.Array; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConcreteSubtypeTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConcreteSubtypeTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.meta.Assumptions.Assumption; -import jdk.internal.jvmci.meta.Assumptions.ConcreteSubtype; +import jdk.vm.ci.meta.Assumptions.Assumption; +import jdk.vm.ci.meta.Assumptions.ConcreteSubtype; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.Random; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import org.junit.Test;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest11.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2015, 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.compiler.test; + +import org.junit.Ignore; +import org.junit.Test; + +import com.oracle.graal.api.directives.GraalDirectives; + +/** + * Collection of tests for + * {@link com.oracle.graal.phases.common.DominatorConditionalEliminationPhase} including those that + * triggered bugs in this phase. + */ +public class ConditionalEliminationTest11 extends ConditionalEliminationTestBase { + public ConditionalEliminationTest11() { + // Don't disable simplification + super(false); + } + + @SuppressWarnings("all") + public static int referenceSnippet(int a) { + if ((a & 15) != 15) { + GraalDirectives.deoptimize(); + } + return 0; + } + + @Test + public void test1() { + testConditionalElimination("test1Snippet", "referenceSnippet"); + } + + @SuppressWarnings("all") + public static int test1Snippet(int a) { + if ((a & 8) != 8) { + GraalDirectives.deoptimize(); + } + if ((a & 15) != 15) { + GraalDirectives.deoptimize(); + } + return 0; + } + + @SuppressWarnings("all") + public static int test2Snippet(int a) { + if ((a & 8) == 0) { + GraalDirectives.deoptimize(); + } + if ((a & 15) != 15) { + GraalDirectives.deoptimize(); + } + return 0; + } + + @Test + public void test2() { + testConditionalElimination("test2Snippet", "referenceSnippet"); + } + + @SuppressWarnings("all") + public static int test3Snippet(int a) { + if ((a & 15) != 15) { + GraalDirectives.deoptimize(); + } + if ((a & 8) != 8) { + GraalDirectives.deoptimize(); + } + return 0; + } + + @Test + public void test3() { + // Test forward elimination of bitwise tests + testConditionalElimination("test3Snippet", "referenceSnippet"); + } + + @SuppressWarnings("all") + public static int test4Snippet(int a) { + if ((a & 15) != 15) { + GraalDirectives.deoptimize(); + } + if ((a & 8) == 0) { + GraalDirectives.deoptimize(); + } + return 0; + } + + @Test + public void test4() { + // Test forward elimination of bitwise tests + testConditionalElimination("test4Snippet", "referenceSnippet"); + } + + @SuppressWarnings("all") + public static int reference5Snippet(int a) { + if ((a & 15) == 15) { + GraalDirectives.deoptimize(); + } + if (a > 0) { + a |= 32; + } + return a; + } + + @SuppressWarnings("all") + public static int test5Snippet(int a) { + if ((a & 8) != 8) { + GraalDirectives.deoptimize(); + } + if (a > 0) { + a |= 32; + } + if ((a & 15) == 15) { + GraalDirectives.deoptimize(); + } + return a; + } + + @Ignore + @Test + public void test5() { + testConditionalElimination("test5Snippet", "test5Snippet"); + } + + public static int test6Snippet(int a) { + if ((a & 8) != 0) { + GraalDirectives.deoptimize(); + } + if ((a & 15) != 15) { + GraalDirectives.deoptimize(); + } + return 0; + } + + public static int reference6Snippet(int a) { + if ((a & 8) != 0) { + GraalDirectives.deoptimize(); + } + GraalDirectives.deoptimize(); + return 0; + } + + @Test + public void test6() { + // Shouldn't be able to optimize this + testConditionalElimination("test6Snippet", "reference6Snippet"); + } +}
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTestBase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTestBase.java Fri Oct 30 20:56:28 2015 +0100 @@ -43,31 +43,56 @@ */ public class ConditionalEliminationTestBase extends GraalCompilerTest { + private final boolean disableSimplification; + + protected ConditionalEliminationTestBase() { + disableSimplification = true; + } + + protected ConditionalEliminationTestBase(boolean disableSimplification) { + this.disableSimplification = disableSimplification; + } + protected void testConditionalElimination(String snippet, String referenceSnippet) { testConditionalElimination(snippet, referenceSnippet, false); } + @SuppressWarnings("try") protected void testConditionalElimination(String snippet, String referenceSnippet, boolean applyConditionalEliminationOnReference) { StructuredGraph graph = parseEager(snippet, AllowAssumptions.YES); Debug.dump(graph, "Graph"); PhaseContext context = new PhaseContext(getProviders()); CanonicalizerPhase canonicalizer1 = new CanonicalizerPhase(); - canonicalizer1.disableSimplification(); - canonicalizer1.apply(graph, context); - new ConvertDeoptimizeToGuardPhase().apply(graph, context); + if (disableSimplification) { + /** + * Some tests break if simplification is done so only do it when needed. + */ + canonicalizer1.disableSimplification(); + } CanonicalizerPhase canonicalizer = new CanonicalizerPhase(); - new DominatorConditionalEliminationPhase(true).apply(graph, context); - canonicalizer.apply(graph, context); - canonicalizer.apply(graph, context); - new ConvertDeoptimizeToGuardPhase().apply(graph, context); + try (Debug.Scope scope = Debug.scope("ConditionalEliminationTest", graph)) { + canonicalizer1.apply(graph, context); + new ConvertDeoptimizeToGuardPhase().apply(graph, context); + new DominatorConditionalEliminationPhase(true).apply(graph, context); + canonicalizer.apply(graph, context); + canonicalizer.apply(graph, context); + new ConvertDeoptimizeToGuardPhase().apply(graph, context); + } catch (Throwable t) { + Debug.handle(t); + } StructuredGraph referenceGraph = parseEager(referenceSnippet, AllowAssumptions.YES); - new ConvertDeoptimizeToGuardPhase().apply(referenceGraph, context); - if (applyConditionalEliminationOnReference) { - new DominatorConditionalEliminationPhase(true).apply(referenceGraph, context); - canonicalizer.apply(referenceGraph, context); - canonicalizer.apply(referenceGraph, context); - } else { - canonicalizer.apply(referenceGraph, context); + try (Debug.Scope scope = Debug.scope("ConditionalEliminationTest.ReferenceGraph", graph)) { + + new ConvertDeoptimizeToGuardPhase().apply(referenceGraph, context); + if (applyConditionalEliminationOnReference) { + new DominatorConditionalEliminationPhase(true).apply(referenceGraph, context); + canonicalizer.apply(referenceGraph, context); + canonicalizer.apply(referenceGraph, context); + } else { + canonicalizer.apply(referenceGraph, context); + } + } catch (Throwable t) { + Debug.handle(t); } assertEquals(referenceGraph, graph); }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FinalizableSubclassTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FinalizableSubclassTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,10 +28,10 @@ import java.lang.reflect.Constructor; import java.util.HashMap; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.Assumption; -import jdk.internal.jvmci.meta.Assumptions.NoFinalizableSubclass; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.Assumption; +import jdk.vm.ci.meta.Assumptions.NoFinalizableSubclass; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FindUniqueConcreteMethodBugTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FindUniqueConcreteMethodBugTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Assert; import org.junit.Ignore;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FindUniqueDefaultMethodTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FindUniqueDefaultMethodTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Ignore; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerAssumptionsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerAssumptionsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.Assumptions.Assumption; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.Assumptions.Assumption; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.compiler.test; import static com.oracle.graal.compiler.GraalCompiler.getProfilingInfo; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintCompilation; import static com.oracle.graal.nodes.ConstantNode.getConstantNodes; -import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention; -import static jdk.internal.jvmci.compiler.Compiler.PrintCompilation; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -41,24 +41,24 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.CallingConvention; -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.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ProfilingInfo; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.SpeculationLog; -import jdk.internal.jvmci.options.DerivedOptionValue; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ProfilingInfo; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.SpeculationLog; +import jdk.vm.ci.options.DerivedOptionValue; import org.junit.After; import org.junit.Assert; @@ -69,7 +69,7 @@ import com.oracle.graal.api.directives.GraalDirectives; import com.oracle.graal.api.replacements.SnippetReflectionProvider; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.GraalCompiler; import com.oracle.graal.compiler.GraalCompiler.Request; import com.oracle.graal.compiler.target.Backend; @@ -763,13 +763,18 @@ * be obtained from {@code installedCodeOwner} via * {@link #parseForCompile(ResolvedJavaMethod)}. */ + @SuppressWarnings("try") protected CompilationResult compile(ResolvedJavaMethod installedCodeOwner, StructuredGraph graph) { StructuredGraph graphToCompile = graph == null ? parseForCompile(installedCodeOwner) : graph; lastCompiledGraph = graphToCompile; - CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graphToCompile.method(), false); - Request<CompilationResult> request = new Request<>(graphToCompile, cc, installedCodeOwner, getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, - getProfilingInfo(graphToCompile), getSuites(), getLIRSuites(), new CompilationResult(), CompilationResultBuilderFactory.Default); - return GraalCompiler.compile(request); + try (Scope s = Debug.scope("Compile", graphToCompile)) { + CallingConvention cc = getCallingConvention(getCodeCache(), Type.JavaCallee, graphToCompile.method(), false); + Request<CompilationResult> request = new Request<>(graphToCompile, cc, installedCodeOwner, getProviders(), getBackend(), getDefaultGraphBuilderSuite(), OptimisticOptimizations.ALL, + getProfilingInfo(graphToCompile), getSuites(), getLIRSuites(), new CompilationResult(), CompilationResultBuilderFactory.Default); + return GraalCompiler.compile(request); + } catch (Throwable e) { + throw Debug.handle(e); + } } protected StructuredGraph lastCompiledGraph; @@ -869,8 +874,8 @@ @SuppressWarnings("try") private StructuredGraph parse1(ResolvedJavaMethod javaMethod, PhaseSuite<HighTierContext> graphBuilderSuite, AllowAssumptions allowAssumptions) { assert javaMethod.getAnnotation(Test.class) == null : "shouldn't parse method with @Test annotation: " + javaMethod; - try (Scope ds = Debug.scope("Parsing", javaMethod)) { - StructuredGraph graph = new StructuredGraph(javaMethod, allowAssumptions, getSpeculationLog()); + StructuredGraph graph = new StructuredGraph(javaMethod, allowAssumptions, getSpeculationLog()); + try (Scope ds = Debug.scope("Parsing", javaMethod, graph)) { graphBuilderSuite.apply(graph, getDefaultHighTierContext()); return graph; } catch (Throwable e) {
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraphEncoderTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraphEncoderTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GuardEliminationCornerCasesTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GuardEliminationCornerCasesTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -94,7 +94,7 @@ for (Node n : graph.getNodes()) { if (n instanceof GuardNode) { GuardNode guardNode = (GuardNode) n; - LogicNode condition = guardNode.condition(); + LogicNode condition = guardNode.getCondition(); if (condition instanceof InstanceOfNode) { InstanceOfNode instanceOfNode = (InstanceOfNode) condition; if (instanceOfNode.getValue() instanceof ValueProxy) {
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InfopointReasonTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,15 +25,15 @@ import static com.oracle.graal.compiler.GraalCompiler.compileGraph; import static com.oracle.graal.compiler.GraalCompiler.getProfilingInfo; import static com.oracle.graal.compiler.common.GraalOptions.OptAssumptions; -import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import static org.junit.Assert.assertNotNull; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CallingConvention.Type; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.Call; -import jdk.internal.jvmci.code.CompilationResult.Infopoint; -import jdk.internal.jvmci.code.InfopointReason; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.Call; +import jdk.vm.ci.code.CompilationResult.Infopoint; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InstalledCodeInvalidationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InstalledCodeInvalidationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerEqualsCanonicalizerTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -145,6 +145,19 @@ field = array1Length == (-array2Length) ? 1 : 0; } + public static boolean testNormalIntegerTest(int a) { + return (a & 8) != 0; + } + + public static boolean testAlternateIntegerTest(int a) { + return (a & 8) == 8; + } + + @Test + public void testIntegerTest() { + test("testNormalIntegerTest", "testAlternateIntegerTest"); + } + private void test(String snippet, String referenceSnippet) { StructuredGraph graph = getCanonicalizedGraph(snippet); StructuredGraph referenceGraph = getCanonicalizedGraph(referenceSnippet);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/InterfaceMethodHandleTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2015, 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.compiler.test; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.Label; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.org.objectweb.asm.Opcodes; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; + +import org.junit.Test; + +public final class InterfaceMethodHandleTest extends GraalCompilerTest implements Opcodes { + private static final MethodHandle INTERFACE_HANDLE_M; + private static final MethodHandle INTERFACE_HANDLE_M2; + + public interface I { + int m(); + + int m2(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j); + } + + static class A implements I { + public int m() { + return 0; + } + + public int m2(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) { + return 1; + } + + } + + static class M2Thrower implements I { + public int m() { + return 0; + } + + public int m2(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) { + throw new InternalError(); + } + + } + + static { + try { + MethodType type = MethodType.fromMethodDescriptorString("()I", I.class.getClassLoader()); + INTERFACE_HANDLE_M = MethodHandles.lookup().findVirtual(I.class, "m", type); + MethodType type2 = MethodType.fromMethodDescriptorString("(IIIIIIIIII)I", I.class.getClassLoader()); + INTERFACE_HANDLE_M2 = MethodHandles.lookup().findVirtual(I.class, "m2", type2); + } catch (IllegalAccessException | NoSuchMethodException e) { + throw new RuntimeException("unable to initialize method handle", e); + } + } + + public static Object invokeInterfaceHandle(I o) throws Throwable { + return (int) INTERFACE_HANDLE_M.invokeExact(o); + } + + @Test + public void testInvokeInterface01() { + test("invokeInterfaceHandle", new A()); + + } + + @Test + public void testInvokeInterface02() throws InstantiationException, IllegalAccessException, ClassNotFoundException { + test("invokeInterfaceHandle", loader.findClass(NAME).newInstance()); + } + + public static Object invokeInterfaceHandle2(I o, int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) throws Throwable { + return (int) INTERFACE_HANDLE_M2.invokeExact(o, a, b, c, d, e, f, g, h, i, j); + } + + @Override + protected InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult) { + if (method.getDeclaringClass().equals(getMetaAccess().lookupJavaType(M2Thrower.class))) { + // Make sure M2Thrower.m2 is invoked from normal code + return getCodeCache().setDefaultCode(method, compResult); + } + return super.addMethod(method, compResult); + } + + /** + * Try to exercise a mixed calling sequence with regular JIT code calling a method handle that + * can't be inlined with an implementation compiled by Graal that throws an exception. + */ + @Test + public void testInvokeInterface03() throws Throwable { + A goodInstance = new A(); + I badInstance = new M2Thrower(); + getCode(getMetaAccess().lookupJavaMethod(getMethod(M2Thrower.class, "m2"))); + final int limit = 20000; + for (int i = 0; i <= limit; i++) { + try { + invokeInterfaceHandle2(i < limit - 1 ? goodInstance : badInstance, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); + } catch (InternalError e) { + + } + } + } + + private static final String BASENAME = InterfaceMethodHandleTest.class.getName(); + private static final String NAME = BASENAME + "_B"; + private AsmLoader loader = new AsmLoader(UnbalancedMonitorsTest.class.getClassLoader()); + + /** + * Construct a type which claims to implement {@link I} but with incorrect access on {@link I#m} + * so that an exception must be thrown. + */ + public static byte[] bytesForB() { + + ClassWriter cw = new ClassWriter(0); + MethodVisitor mv; + String jvmName = NAME.replace('.', '/'); + cw.visit(52, ACC_SUPER | ACC_PUBLIC, jvmName, null, "java/lang/Object", new String[]{BASENAME.replace('.', '/') + "$I"}); + + mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); + mv.visitCode(); + Label l0 = new Label(); + mv.visitLabel(l0); + mv.visitVarInsn(ALOAD, 0); + mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); + mv.visitInsn(RETURN); + Label l1 = new Label(); + mv.visitLabel(l1); + mv.visitMaxs(1, 1); + mv.visitEnd(); + + mv = cw.visitMethod(ACC_PRIVATE, "m", "()I", null, null); + mv.visitCode(); + l0 = new Label(); + mv.visitLabel(l0); + mv.visitInsn(ICONST_0); + mv.visitInsn(IRETURN); + l1 = new Label(); + mv.visitLabel(l1); + mv.visitMaxs(1, 1); + mv.visitEnd(); + + cw.visitEnd(); + + mv = cw.visitMethod(ACC_PRIVATE, "m2", "(IIIIIIIIII)I", null, null); + mv.visitCode(); + l0 = new Label(); + mv.visitLabel(l0); + mv.visitInsn(ICONST_0); + mv.visitInsn(IRETURN); + l1 = new Label(); + mv.visitLabel(l1); + mv.visitMaxs(1, 11); + mv.visitEnd(); + + cw.visitEnd(); + + return cw.toByteArray(); + } + + public static class AsmLoader extends ClassLoader { + Class<?> loaded; + + public AsmLoader(ClassLoader parent) { + super(parent); + } + + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + if (name.equals(NAME)) { + if (loaded != null) { + return loaded; + } + byte[] bytes = bytesForB(); + return (loaded = defineClass(name, bytes, 0, bytes.length)); + } else { + return super.findClass(name); + } + } + } +}
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LockEliminationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LockEliminationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LongNodeChainTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/LongNodeChainTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MarkUnsafeAccessTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MarkUnsafeAccessTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -33,10 +33,10 @@ import java.nio.file.Files; import java.nio.file.Path; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Assert; import org.junit.Assume;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryArithmeticTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryArithmeticTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,8 +31,8 @@ import java.util.ArrayList; import java.util.List; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/OptionsVerifierTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/OptionsVerifierTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,12 +24,15 @@ import static java.lang.String.format; -import java.io.DataInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Executable; import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; import java.nio.file.Files; import java.util.Arrays; import java.util.HashSet; @@ -38,19 +41,16 @@ import java.util.Objects; import java.util.ServiceLoader; import java.util.Set; -import java.util.zip.ZipEntry; -import java.util.zip.ZipException; -import java.util.zip.ZipFile; -import jdk.internal.jvmci.options.OptionDescriptor; -import jdk.internal.jvmci.options.OptionDescriptors; -import jdk.internal.jvmci.options.OptionValue; import jdk.internal.org.objectweb.asm.ClassReader; import jdk.internal.org.objectweb.asm.ClassVisitor; import jdk.internal.org.objectweb.asm.Label; import jdk.internal.org.objectweb.asm.MethodVisitor; import jdk.internal.org.objectweb.asm.Opcodes; import jdk.internal.org.objectweb.asm.Type; +import jdk.vm.ci.options.OptionDescriptor; +import jdk.vm.ci.options.OptionDescriptors; +import jdk.vm.ci.options.OptionValue; import org.junit.Test; @@ -76,15 +76,19 @@ static class Classpath implements AutoCloseable { private final Map<String, Object> entries = new LinkedHashMap<>(); - public Classpath() throws ZipException, IOException { + public Classpath() throws IOException { String[] names = (System.getProperty("sun.boot.class.path") + File.pathSeparatorChar + System.getProperty("java.class.path")).split(File.pathSeparator); for (String n : names) { File path = new File(n); if (path.exists()) { if (path.isDirectory()) { entries.put(n, path); + } else if (n.endsWith(".jimage")) { + URL url = path.toURI().toURL(); + entries.put(n, new URLClassLoader(new URL[]{url})); } else if (n.endsWith(".jar") || n.endsWith(".zip")) { - entries.put(n, new ZipFile(path)); + URL url = new URL("jar", "", "file:" + n + "!/"); + entries.put(n, new URLClassLoader(new URL[]{url})); } } } @@ -92,8 +96,8 @@ public void close() throws IOException { for (Object e : entries.values()) { - if (e instanceof ZipFile) { - ((ZipFile) e).close(); + if (e instanceof URLClassLoader) { + ((URLClassLoader) e).close(); } } } @@ -105,15 +109,17 @@ if (path.exists()) { return Files.readAllBytes(path.toPath()); } - } else if (e instanceof ZipFile) { - ZipFile zf = (ZipFile) e; - ZipEntry ze = zf.getEntry(classFilePath); - if (ze != null) { - byte[] res = new byte[(int) ze.getSize()]; - DataInputStream dis = new DataInputStream(zf.getInputStream(ze)); - dis.readFully(res); - dis.close(); - return res; + } else { + assert e instanceof URLClassLoader; + URLClassLoader ucl = (URLClassLoader) e; + try (InputStream in = ucl.getResourceAsStream(classFilePath)) { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int nRead; + byte[] data = new byte[1024]; + while ((nRead = in.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + return buffer.toByteArray(); } } }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import java.io.Serializable; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.ProfilingInfo; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.ProfilingInfo; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.TriState; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/PushNodesThroughPiTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StaticInterfaceFieldTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/StaticInterfaceFieldTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,13 +26,13 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assume; import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugConfigScope; import com.oracle.graal.debug.DelegatingDebugConfig;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/UnbalancedMonitorsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/UnbalancedMonitorsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.test; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.meta.ResolvedJavaMethod; import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.Label; import jdk.internal.org.objectweb.asm.MethodVisitor;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/AllocatorTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.HashSet; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.meta.Value; import org.junit.Assert; @@ -35,6 +35,7 @@ import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.LIRValueUtil; import com.oracle.graal.lir.StandardOp.ValueMoveOp; import com.oracle.graal.lir.ValueProcedure; import com.oracle.graal.nodes.StructuredGraph; @@ -95,7 +96,7 @@ if (ValueUtil.isRegister(use)) { regRegMoves++; } - } else if (ValueUtil.isStackSlotValue(def)) { + } else if (LIRValueUtil.isStackSlotValue(def)) { spillMoves++; } }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/backend/BackendTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.compiler.test.backend; -import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CallingConvention.Type; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; import com.oracle.graal.compiler.GraalCompiler; import com.oracle.graal.compiler.test.GraalCompilerTest;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.compiler.test.deopt; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/MonitorDeoptTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/MonitorDeoptTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ */ package com.oracle.graal.compiler.test.deopt; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test; @@ -36,7 +36,6 @@ import com.oracle.graal.nodes.FixedNode; import com.oracle.graal.nodes.FixedWithNextNode; import com.oracle.graal.nodes.LoopBeginNode; -import com.oracle.graal.nodes.LoopEndNode; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; @@ -134,9 +133,7 @@ */ private static void removeLoopSafepoint(StructuredGraph graph) { LoopBeginNode loopBegin = findFirstLoop(graph); - for (LoopEndNode end : loopBegin.loopEnds()) { - end.disableSafepoint(); - } + loopBegin.disableSafepoint(); } @Test
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EATestBase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EATestBase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.List; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.test.ea; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAAssertionsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAAssertionsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.test.ea; -import jdk.internal.jvmci.code.SourceStackTrace; +import jdk.vm.ci.code.SourceStackTrace; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/UnsafeEATest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/UnsafeEATest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.test.ea; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/inlining/InliningTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.test.inlining; -import jdk.internal.jvmci.code.InfopointReason; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Ignore; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/GraalTutorial.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/GraalTutorial.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.test.tutorial; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/InvokeGraal.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,17 +25,17 @@ import java.lang.reflect.Method; import java.util.concurrent.atomic.AtomicInteger; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CallingConvention.Type; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ProfilingInfo; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ProfilingInfo; +import jdk.vm.ci.meta.ResolvedJavaMethod; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.GraalCompiler; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/StaticAnalysis.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/StaticAnalysis.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,13 +30,13 @@ import java.util.Map; import java.util.Set; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/StaticAnalysisTests.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/tutorial/StaticAnalysisTests.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,15 +27,15 @@ import java.util.Arrays; import java.util.Collection; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Assert; import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.compiler.test.tutorial.StaticAnalysis.MethodState; import com.oracle.graal.compiler.test.tutorial.StaticAnalysis.TypeFlow;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,24 +29,23 @@ import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.Optional; import java.util.List; -import java.util.Set; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.ConstantReference; -import jdk.internal.jvmci.code.CompilationResult.DataPatch; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.DefaultProfilingInfo; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ProfilingInfo; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.TriState; -import jdk.internal.jvmci.meta.VMConstant; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.ConstantReference; +import jdk.vm.ci.code.CompilationResult.DataPatch; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.DefaultProfilingInfo; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ProfilingInfo; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.TriState; +import jdk.vm.ci.meta.VMConstant; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import com.oracle.graal.compiler.LIRGenerationPhase.LIRGenerationContext; import com.oracle.graal.compiler.common.alloc.ComputeBlockOrder; @@ -337,7 +336,7 @@ } @SuppressWarnings("try") - public static void emitCode(Backend backend, Assumptions assumptions, ResolvedJavaMethod rootMethod, Set<ResolvedJavaMethod> inlinedMethods, int bytecodeSize, LIRGenerationResult lirGenRes, + public static void emitCode(Backend backend, Assumptions assumptions, ResolvedJavaMethod rootMethod, List<ResolvedJavaMethod> inlinedMethods, int bytecodeSize, LIRGenerationResult lirGenRes, CompilationResult compilationResult, ResolvedJavaMethod installedCodeOwner, CompilationResultBuilderFactory factory) { try (DebugCloseable a = EmitCode.start()) { FrameMap frameMap = lirGenRes.getFrameMap(); @@ -347,7 +346,7 @@ if (assumptions != null && !assumptions.isEmpty()) { compilationResult.setAssumptions(assumptions.toArray()); } - if (inlinedMethods != null) { + if (rootMethod != null) { compilationResult.setMethods(rootMethod, inlinedMethods); compilationResult.setBytecodeSize(bytecodeSize); }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompilerOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompilerOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,21 +22,32 @@ */ package com.oracle.graal.compiler; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; /** * Options related to {@link GraalCompiler}. - * - * Note: This must be a top level class to work around for <a - * href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=477597">Eclipse bug 477597</a>. */ -class GraalCompilerOptions { +public class GraalCompilerOptions { // @formatter:off @Option(help = "Repeatedly run the LIR code generation pass to improve statistical profiling results.", type = OptionType.Debug) public static final OptionValue<Integer> EmitLIRRepeatCount = new OptionValue<>(0); + @Option(help = "", type = OptionType.Debug) + public static final OptionValue<String> PrintFilter = new OptionValue<>(null); + @Option(help = "", type = OptionType.Debug) + public static final OptionValue<Boolean> PrintCompilation = new OptionValue<>(false); + @Option(help = "", type = OptionType.Debug) + public static final OptionValue<Boolean> PrintAfterCompilation = new OptionValue<>(false); + @Option(help = "", type = OptionType.Debug) + public static final OptionValue<Boolean> PrintBailout = new OptionValue<>(false); + @Option(help = "", type = OptionType.Debug) + public static final OptionValue<Boolean> ExitVMOnBailout = new OptionValue<>(false); + @Option(help = "", type = OptionType.Debug) + public static final OptionValue<Boolean> ExitVMOnException = new OptionValue<>(false); + @Option(help = "", type = OptionType.Debug) + public static final OptionValue<Boolean> PrintStackTraceOnException = new OptionValue<>(false); // @formatter:on }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalDebugInitializationPropertyProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalDebugInitializationPropertyProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugInitializationPropertyProvider;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/LIRGenerationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/LIRGenerationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.BlockMap;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeLIRBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeLIRBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,15 +22,15 @@ */ package com.oracle.graal.compiler.gen; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Signature; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.gen.LIRGeneratorTool;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeParserTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeParserTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.gen; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; /** * visible interface of bytecode parsers.
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,20 +27,20 @@ import java.util.Map; import java.util.Queue; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.VirtualObject; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.JavaValue; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.VirtualObject; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.JavaValue; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric; import com.oracle.graal.graph.Node; +import com.oracle.graal.lir.ConstantValue; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LabelRef; import com.oracle.graal.lir.Variable; @@ -289,8 +289,12 @@ } else if (value != null) { STATE_VARIABLES.increment(); Value operand = nodeValueMap.operand(value); - assert operand != null && (operand instanceof Variable || operand instanceof JavaConstant) : operand + " for " + value; - return (JavaValue) operand; + if (operand instanceof ConstantValue && ((ConstantValue) operand).isJavaConstant()) { + return ((ConstantValue) operand).getJavaConstant(); + } else { + assert operand instanceof Variable : operand + " for " + value; + return (JavaValue) operand; + } } else { // return a dummy value because real value not needed
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeLIRBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,9 +26,9 @@ import static com.oracle.graal.compiler.common.GraalOptions.MatchExpressions; import static com.oracle.graal.debug.GraalDebugConfig.Options.LogVerbose; import static com.oracle.graal.lir.LIR.verifyBlock; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isLegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.ArrayList; import java.util.Collection; @@ -36,25 +36,25 @@ import java.util.Map; import java.util.Map.Entry; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.common.JVMCIError; -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.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; +import com.oracle.graal.compiler.common.BackendOptions; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.cfg.BlockMap; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.match.ComplexMatchValue; import com.oracle.graal.compiler.match.MatchRuleRegistry; import com.oracle.graal.compiler.match.MatchStatement; -import com.oracle.graal.compiler.match.MatchableNode; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.debug.TTY; @@ -95,42 +95,18 @@ import com.oracle.graal.nodes.LoweredCallTargetNode; import com.oracle.graal.nodes.ParameterNode; import com.oracle.graal.nodes.PhiNode; -import com.oracle.graal.nodes.PiNode; import com.oracle.graal.nodes.SimpleInfopointNode; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.ValuePhiNode; -import com.oracle.graal.nodes.calc.AddNode; -import com.oracle.graal.nodes.calc.AndNode; import com.oracle.graal.nodes.calc.CompareNode; import com.oracle.graal.nodes.calc.ConditionalNode; -import com.oracle.graal.nodes.calc.FloatConvertNode; -import com.oracle.graal.nodes.calc.FloatEqualsNode; -import com.oracle.graal.nodes.calc.FloatLessThanNode; -import com.oracle.graal.nodes.calc.IntegerBelowNode; -import com.oracle.graal.nodes.calc.IntegerEqualsNode; -import com.oracle.graal.nodes.calc.IntegerLessThanNode; import com.oracle.graal.nodes.calc.IntegerTestNode; import com.oracle.graal.nodes.calc.IsNullNode; -import com.oracle.graal.nodes.calc.LeftShiftNode; -import com.oracle.graal.nodes.calc.MulNode; -import com.oracle.graal.nodes.calc.NarrowNode; -import com.oracle.graal.nodes.calc.ObjectEqualsNode; -import com.oracle.graal.nodes.calc.OrNode; -import com.oracle.graal.nodes.calc.ReinterpretNode; -import com.oracle.graal.nodes.calc.SignExtendNode; -import com.oracle.graal.nodes.calc.SubNode; -import com.oracle.graal.nodes.calc.UnsignedRightShiftNode; -import com.oracle.graal.nodes.calc.XorNode; -import com.oracle.graal.nodes.calc.ZeroExtendNode; import com.oracle.graal.nodes.cfg.Block; import com.oracle.graal.nodes.cfg.ControlFlowGraph; import com.oracle.graal.nodes.extended.IntegerSwitchNode; import com.oracle.graal.nodes.extended.SwitchNode; -import com.oracle.graal.nodes.memory.FloatingReadNode; -import com.oracle.graal.nodes.memory.ReadNode; -import com.oracle.graal.nodes.memory.WriteNode; -import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; import com.oracle.graal.nodes.spi.LIRLowerable; import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; import com.oracle.graal.nodes.spi.NodeValueMap; @@ -139,34 +115,9 @@ /** * This class traverses the HIR instructions and generates LIR instructions from them. */ -@MatchableNode(nodeClass = ConstantNode.class, shareable = true) -@MatchableNode(nodeClass = FloatConvertNode.class, inputs = {"value"}) -@MatchableNode(nodeClass = FloatingReadNode.class, inputs = {"address"}) -@MatchableNode(nodeClass = IfNode.class, inputs = {"condition"}) -@MatchableNode(nodeClass = SubNode.class, inputs = {"x", "y"}) -@MatchableNode(nodeClass = LeftShiftNode.class, inputs = {"x", "y"}) -@MatchableNode(nodeClass = NarrowNode.class, inputs = {"value"}) -@MatchableNode(nodeClass = ReadNode.class, inputs = {"address"}) -@MatchableNode(nodeClass = ReinterpretNode.class, inputs = {"value"}) -@MatchableNode(nodeClass = SignExtendNode.class, inputs = {"value"}) -@MatchableNode(nodeClass = UnsignedRightShiftNode.class, inputs = {"x", "y"}) -@MatchableNode(nodeClass = WriteNode.class, inputs = {"address", "value"}) -@MatchableNode(nodeClass = ZeroExtendNode.class, inputs = {"value"}) -@MatchableNode(nodeClass = AndNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = FloatEqualsNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = FloatLessThanNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = AddNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = IntegerBelowNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = IntegerEqualsNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = IntegerLessThanNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = MulNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = IntegerTestNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = ObjectEqualsNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = OrNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = XorNode.class, inputs = {"x", "y"}, commutative = true) -@MatchableNode(nodeClass = PiNode.class, inputs = {"object"}) public abstract class NodeLIRBuilder implements NodeLIRBuilderTool, LIRGenerationDebugContext { + private final boolean allowObjectConstantToStackMove; private final NodeMap<Value> nodeOperands; private final DebugInfoBuilder debugInfoBuilder; @@ -175,15 +126,25 @@ private ValueNode currentInstruction; private ValueNode lastInstructionPrinted; // Debugging only + private final NodeMatchRules nodeMatchRules; private Map<Class<? extends Node>, List<MatchStatement>> matchRules; - public NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen) { + public NodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen, NodeMatchRules nodeMatchRules) { this.gen = gen; + this.nodeMatchRules = nodeMatchRules; this.nodeOperands = graph.createNodeMap(); this.debugInfoBuilder = createDebugInfoBuilder(graph, this); if (MatchExpressions.getValue()) { - matchRules = MatchRuleRegistry.lookup(getClass()); + matchRules = MatchRuleRegistry.lookup(nodeMatchRules.getClass()); } + + assert nodeMatchRules.lirBuilder == null; + nodeMatchRules.lirBuilder = this; + allowObjectConstantToStackMove = BackendOptions.UserOptions.AllowObjectConstantToStackMove.getValue(); + } + + public NodeMatchRules getNodeMatchRules() { + return nodeMatchRules; } @SuppressWarnings({"unused"}) @@ -322,7 +283,8 @@ private Value[] createPhiOut(AbstractMergeNode merge, AbstractEndNode pred) { List<Value> values = new ArrayList<>(); for (PhiNode phi : merge.valuePhis()) { - Value value = operand(phi.valueAt(pred)); + ValueNode node = phi.valueAt(pred); + Value value = operand(node); assert value != null; if (isRegister(value)) { /* @@ -330,6 +292,14 @@ * new Variable. */ value = gen.emitMove(value); + } else if (!allowObjectConstantToStackMove && node instanceof ConstantNode && !value.getLIRKind().isValue()) { + /* + * Object constants are not allowed as inputs for PHIs. Explicitly create a copy of + * this value to force it into a register. The new variable is only used in the PHI. + */ + Variable result = gen.newVariable(value.getLIRKind()); + gen.emitMove(result, value); + value = result; } values.add(value); } @@ -469,8 +439,6 @@ } if (node instanceof LIRLowerable) { ((LIRLowerable) node).generate(this); - } else if (node instanceof ArithmeticLIRLowerable) { - ((ArithmeticLIRLowerable) node).generate(this, gen); } else { throw JVMCIError.shouldNotReachHere("node is not LIRLowerable: " + node); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/NodeMatchRules.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2009, 2015, 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.compiler.gen; + +import jdk.vm.ci.meta.Value; + +import com.oracle.graal.compiler.match.MatchableNode; +import com.oracle.graal.graph.Node; +import com.oracle.graal.lir.LIRFrameState; +import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.LabelRef; +import com.oracle.graal.lir.gen.LIRGeneratorTool; +import com.oracle.graal.nodes.ConstantNode; +import com.oracle.graal.nodes.DeoptimizingNode; +import com.oracle.graal.nodes.FixedNode; +import com.oracle.graal.nodes.IfNode; +import com.oracle.graal.nodes.PiNode; +import com.oracle.graal.nodes.calc.AddNode; +import com.oracle.graal.nodes.calc.AndNode; +import com.oracle.graal.nodes.calc.FloatConvertNode; +import com.oracle.graal.nodes.calc.FloatEqualsNode; +import com.oracle.graal.nodes.calc.FloatLessThanNode; +import com.oracle.graal.nodes.calc.IntegerBelowNode; +import com.oracle.graal.nodes.calc.IntegerEqualsNode; +import com.oracle.graal.nodes.calc.IntegerLessThanNode; +import com.oracle.graal.nodes.calc.IntegerTestNode; +import com.oracle.graal.nodes.calc.LeftShiftNode; +import com.oracle.graal.nodes.calc.MulNode; +import com.oracle.graal.nodes.calc.NarrowNode; +import com.oracle.graal.nodes.calc.ObjectEqualsNode; +import com.oracle.graal.nodes.calc.OrNode; +import com.oracle.graal.nodes.calc.ReinterpretNode; +import com.oracle.graal.nodes.calc.SignExtendNode; +import com.oracle.graal.nodes.calc.SubNode; +import com.oracle.graal.nodes.calc.UnsignedRightShiftNode; +import com.oracle.graal.nodes.calc.XorNode; +import com.oracle.graal.nodes.calc.ZeroExtendNode; +import com.oracle.graal.nodes.memory.FloatingReadNode; +import com.oracle.graal.nodes.memory.ReadNode; +import com.oracle.graal.nodes.memory.WriteNode; + +@MatchableNode(nodeClass = ConstantNode.class, shareable = true) +@MatchableNode(nodeClass = FloatConvertNode.class, inputs = {"value"}) +@MatchableNode(nodeClass = FloatingReadNode.class, inputs = {"address"}) +@MatchableNode(nodeClass = IfNode.class, inputs = {"condition"}) +@MatchableNode(nodeClass = SubNode.class, inputs = {"x", "y"}) +@MatchableNode(nodeClass = LeftShiftNode.class, inputs = {"x", "y"}) +@MatchableNode(nodeClass = NarrowNode.class, inputs = {"value"}) +@MatchableNode(nodeClass = ReadNode.class, inputs = {"address"}) +@MatchableNode(nodeClass = ReinterpretNode.class, inputs = {"value"}) +@MatchableNode(nodeClass = SignExtendNode.class, inputs = {"value"}) +@MatchableNode(nodeClass = UnsignedRightShiftNode.class, inputs = {"x", "y"}) +@MatchableNode(nodeClass = WriteNode.class, inputs = {"address", "value"}) +@MatchableNode(nodeClass = ZeroExtendNode.class, inputs = {"value"}) +@MatchableNode(nodeClass = AndNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = FloatEqualsNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = FloatLessThanNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = AddNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = IntegerBelowNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = IntegerEqualsNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = IntegerLessThanNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = MulNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = IntegerTestNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = ObjectEqualsNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = OrNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = XorNode.class, inputs = {"x", "y"}, commutative = true) +@MatchableNode(nodeClass = PiNode.class, inputs = {"object"}) +public abstract class NodeMatchRules { + + NodeLIRBuilder lirBuilder; + protected final LIRGeneratorTool gen; + + protected NodeMatchRules(LIRGeneratorTool gen) { + this.gen = gen; + } + + protected LIRGeneratorTool getLIRGeneratorTool() { + return gen; + } + + /* + * For now we do not want to expose the full lirBuilder to subclasses, so we delegate the few + * methods that are actually needed. If the list grows too long, exposing lirBuilder might be + * the better approach. + */ + + protected final Value operand(Node node) { + return lirBuilder.operand(node); + } + + protected final LIRFrameState state(DeoptimizingNode deopt) { + return lirBuilder.state(deopt); + } + + protected final LabelRef getLIRBlock(FixedNode b) { + return lirBuilder.getLIRBlock(b); + } + + protected final void append(LIRInstruction op) { + lirBuilder.append(op); + } +}
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/ComplexMatchResult.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/ComplexMatchResult.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.match; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.gen.NodeLIRBuilder;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/ComplexMatchValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/ComplexMatchValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.compiler.match; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.gen.NodeLIRBuilder;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,7 +30,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.gen.NodeLIRBuilder; import com.oracle.graal.compiler.match.MatchPattern.Result;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.compiler.match; -import com.oracle.graal.compiler.gen.NodeLIRBuilder; +import com.oracle.graal.compiler.gen.NodeMatchRules; /** * Code generator for complex match patterns. @@ -32,7 +32,7 @@ * @returns null if the match can't be generated or a {@link ComplexMatchResult} that can be * evaluated during LIR generation to produce the final LIR value. */ - ComplexMatchResult match(NodeLIRBuilder gen, Object... args); + ComplexMatchResult match(NodeMatchRules matchRules, Object... args); /** * @return a descriptive name meaningful to the user.
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchRuleRegistry.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchRuleRegistry.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,10 +30,10 @@ import java.util.Map; import java.util.Map.Entry; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.service.Services; -import com.oracle.graal.compiler.gen.NodeLIRBuilder; +import com.oracle.graal.compiler.gen.NodeMatchRules; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.graph.Edges; @@ -68,7 +68,7 @@ return result; } - private static final HashMap<Class<? extends NodeLIRBuilder>, Map<Class<? extends Node>, List<MatchStatement>>> registry = new HashMap<>(); + private static final HashMap<Class<? extends NodeMatchRules>, Map<Class<? extends Node>, List<MatchStatement>>> registry = new HashMap<>(); /** * Collect all the {@link MatchStatement}s defined by the superclass chain of theClass. @@ -77,7 +77,7 @@ * @return the set of {@link MatchStatement}s applicable to theClass. */ @SuppressWarnings("try") - public static synchronized Map<Class<? extends Node>, List<MatchStatement>> lookup(Class<? extends NodeLIRBuilder> theClass) { + public static synchronized Map<Class<? extends Node>, List<MatchStatement>> lookup(Class<? extends NodeMatchRules> theClass) { Map<Class<? extends Node>, List<MatchStatement>> result = registry.get(theClass); if (result == null) { @@ -109,8 +109,8 @@ * This is a separate, public method so that external clients can create rules with a custom * lookup and without the default caching behavior. */ - public static Map<Class<? extends Node>, List<MatchStatement>> createRules(Class<? extends NodeLIRBuilder> theClass) { - HashMap<Class<? extends NodeLIRBuilder>, MatchStatementSet> matchSets = new HashMap<>(); + public static Map<Class<? extends Node>, List<MatchStatement>> createRules(Class<? extends NodeMatchRules> theClass) { + HashMap<Class<? extends NodeMatchRules>, MatchStatementSet> matchSets = new HashMap<>(); Iterable<MatchStatementSet> sl = Services.load(MatchStatementSet.class); for (MatchStatementSet rules : sl) { matchSets.put(rules.forClass(), rules); @@ -135,7 +135,7 @@ } } currentClass = currentClass.getSuperclass(); - } while (currentClass != NodeLIRBuilder.class); + } while (currentClass != NodeMatchRules.class); return rules; } }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchStatement.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchStatement.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.gen.NodeLIRBuilder; import com.oracle.graal.compiler.match.MatchPattern.MatchResultCode; @@ -94,7 +94,7 @@ result = pattern.matchUsage(node, context); if (result == Result.OK) { // Invoke the generator method and set the result if it's non null. - ComplexMatchResult value = generatorMethod.match(builder, buildArgList(context)); + ComplexMatchResult value = generatorMethod.match(builder.getNodeMatchRules(), buildArgList(context)); if (value != null) { context.setResult(value); MatchStatementSuccess.increment();
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchStatementSet.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchStatementSet.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,13 +25,14 @@ import java.util.List; import com.oracle.graal.compiler.gen.NodeLIRBuilder; +import com.oracle.graal.compiler.gen.NodeMatchRules; public interface MatchStatementSet { /** * @return the {@link NodeLIRBuilder} subclass which defined this set of {@link MatchStatement} * instances. */ - Class<? extends NodeLIRBuilder> forClass(); + Class<? extends NodeMatchRules> forClass(); /** * @return the {@link MatchStatement}s available for this {@link NodeLIRBuilder} subclass.
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java Fri Oct 30 20:56:28 2015 +0100 @@ -33,9 +33,9 @@ import static com.oracle.graal.compiler.common.GraalOptions.PartialEscapeAnalysis; import static com.oracle.graal.compiler.common.GraalOptions.UseGraalInstrumentation; import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.Optional; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.loop.phases.LoopFullUnrollPhase; import com.oracle.graal.loop.phases.LoopPeelingPhase;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LowTier.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,9 +27,9 @@ import static com.oracle.graal.compiler.common.GraalOptions.OptCanonicalizer; import static com.oracle.graal.compiler.common.GraalOptions.UseGraalInstrumentation; import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.Required; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.nodes.spi.LoweringTool; import com.oracle.graal.phases.PhaseSuite;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/target/Backend.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,15 +22,15 @@ */ package com.oracle.graal.compiler.target; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.asm.Assembler; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/Debug.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/Debug.java Fri Oct 30 20:56:28 2015 +0100 @@ -40,7 +40,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.service.Services; import com.oracle.graal.debug.DelegatingDebugConfig.Level; import com.oracle.graal.debug.internal.DebugHistogramImpl;
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/DebugEnvironment.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/DebugEnvironment.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,8 +34,8 @@ import java.util.ArrayList; import java.util.List; -import jdk.internal.jvmci.runtime.JVMCI; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.runtime.JVMCI; +import jdk.vm.ci.service.Services; public class DebugEnvironment {
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/GraalDebugConfig.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/GraalDebugConfig.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,11 +29,11 @@ import java.util.List; import java.util.Set; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; public class GraalDebugConfig implements DebugConfig { @SuppressWarnings("all") @@ -278,13 +278,16 @@ } Debug.setConfig(Debug.fixedConfig(Debug.DEFAULT_LOG_LEVEL, Debug.DEFAULT_LOG_LEVEL, false, false, false, false, dumpHandlers, verifyHandlers, output)); Debug.log(String.format("Exception occurred in scope: %s", Debug.currentScope())); + HashSet<Object> firstSeen = new HashSet<>(); for (Object o : Debug.context()) { - if (Options.DumpOnError.getValue()) { - Debug.dump(o, "Exception: " + e.toString()); - } else { - Debug.log("Context obj %s", o); + // Only dump a context object once. + if (firstSeen.add(o)) { + if (Options.DumpOnError.getValue()) { + Debug.dump(o, "Exception: " + e.toString()); + } else { + Debug.log("Context obj %s", o); + } } - } return null; }
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/JavaMethodContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/JavaMethodContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.debug; -import jdk.internal.jvmci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaMethod; /** * Interface for objects used in Debug {@linkplain Debug#context() context} that can provide a
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/MethodFilter.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/MethodFilter.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ import java.util.Arrays; import java.util.regex.Pattern; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.Signature; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.Signature; /** * This class implements a method filter that can filter based on class name, method name and
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/TTY.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/TTY.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,7 +30,7 @@ import java.util.Map; import java.util.regex.Pattern; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.service.Services; /** * A collection of static methods for printing debug and informational output to a global
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import org.junit.Before; import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.graph.Graph; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/GraalGraphJVMCIError.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/GraalGraphJVMCIError.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.graph; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; /** * This error is the graph/node aware extension of JVMCIError.
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,10 +31,10 @@ import java.util.Map; import java.util.function.Consumer; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import static com.oracle.graal.graph.Node.WithAllEdges; import static com.oracle.graal.graph.Node.newIdentityMap; import static com.oracle.graal.graph.UnsafeAccess.UNSAFE; -import static jdk.internal.jvmci.common.JVMCIError.shouldNotReachHere; +import static jdk.vm.ci.common.JVMCIError.shouldNotReachHere; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; @@ -40,7 +40,7 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.FieldIntrospection; import com.oracle.graal.compiler.common.Fields;
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/Canonicalizable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/Canonicalizable.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.graph.spi; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.graph.Graph; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/CanonicalizerTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/CanonicalizerTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.graph.spi; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/util/CollectionsAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2014, 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.graph.util; - -import java.util.Map; -import java.util.Set; - -import com.oracle.graal.api.collections.CollectionsProvider; -import com.oracle.graal.api.runtime.Graal; -import com.oracle.graal.api.runtime.GraalRuntime; -import com.oracle.graal.graph.Node; -import com.oracle.graal.graph.NodeCollectionsProvider; - -/** - * Static methods for accessing the methods in the installed {@link GraalRuntime}'s - * {@link CollectionsProvider} and {@link NodeCollectionsProvider}. - */ -public class CollectionsAccess { - - private static final NodeCollectionsProvider provider = Graal.getRequiredCapability(NodeCollectionsProvider.class); - - /** - * @see CollectionsProvider#newIdentityMap() - */ - public static <K, V> Map<K, V> newIdentityMap() { - return provider.newIdentityMap(); - } - - /** - * @see CollectionsProvider#newIdentityMap() - */ - public static <K, V> Map<K, V> newIdentityMap(int expectedMaxSize) { - return provider.newIdentityMap(expectedMaxSize); - } - - /** - * @see CollectionsProvider#newIdentityMap(Map) - */ - public static <K, V> Map<K, V> newIdentityMap(Map<K, V> initFrom) { - return provider.newIdentityMap(initFrom); - } - - /** - * @see NodeCollectionsProvider#newNodeIdentitySet() - */ - public static <E extends Node> Set<E> newNodeIdentitySet() { - return provider.newNodeIdentitySet(); - } - - /** - * @see NodeCollectionsProvider#newNodeIdentityMap() - */ - public static <K extends Node, V> Map<K, V> newNodeIdentityMap() { - return provider.newNodeIdentityMap(); - } - - /** - * @see NodeCollectionsProvider#newNodeIdentityMap(int) - */ - public static <K extends Node, V> Map<K, V> newNodeIdentityMap(int expectedMaxSize) { - return provider.newNodeIdentityMap(expectedMaxSize); - } - - /** - * @see NodeCollectionsProvider#newNodeIdentityMap(Map) - */ - public static <K extends Node, V> Map<K, V> newNodeIdentityMap(Map<K, V> initFrom) { - return provider.newNodeIdentityMap(initFrom); - } - - /** - * Creates an identity set. - */ - public static <E> Set<E> newIdentitySet() { - return provider.newIdentitySet(); - } -}
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/ForeignCallPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/ForeignCallPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.graphbuilderconf; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/GraphBuilderConfiguration.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/GraphBuilderConfiguration.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Arrays; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.GraalOptions; import com.oracle.graal.nodes.FullInfopointNode;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/GraphBuilderContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/GraphBuilderContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,16 +23,16 @@ package com.oracle.graal.graphbuilderconf; import static com.oracle.graal.compiler.common.type.StampFactory.objectNonNull; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.NullCheckException; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.NullCheckException; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InlineInvokePlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InlineInvokePlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.graphbuilderconf; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.Invoke; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/IntrinsicContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/IntrinsicContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,10 +24,10 @@ import static com.oracle.graal.graphbuilderconf.IntrinsicContext.CompilationContext.INLINE_AFTER_PARSING; import static com.oracle.graal.graphbuilderconf.IntrinsicContext.CompilationContext.ROOT_COMPILATION; -import static jdk.internal.jvmci.code.BytecodeFrame.AFTER_BCI; -import static jdk.internal.jvmci.code.BytecodeFrame.BEFORE_BCI; -import static jdk.internal.jvmci.code.BytecodeFrame.INVALID_FRAMESTATE_BCI; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import static jdk.vm.ci.code.BytecodeFrame.AFTER_BCI; +import static jdk.vm.ci.code.BytecodeFrame.BEFORE_BCI; +import static jdk.vm.ci.code.BytecodeFrame.INVALID_FRAMESTATE_BCI; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.AbstractMergeNode; import com.oracle.graal.nodes.FrameState;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ import java.lang.invoke.MethodHandle; import java.lang.reflect.Method; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.Invoke; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugins.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/InvocationPlugins.java Fri Oct 30 20:56:28 2015 +0100 @@ -35,9 +35,9 @@ import java.util.Map; import java.util.stream.Collectors; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.iterators.NodeIterable;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/LoopExplosionPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/LoopExplosionPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.graphbuilderconf; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; public interface LoopExplosionPlugin extends GraphBuilderPlugin { boolean shouldExplodeLoops(ResolvedJavaMethod method);
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/MethodSubstitutionPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,9 +27,9 @@ import java.util.Arrays; import java.util.stream.Collectors; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import sun.misc.Launcher; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/NodePlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.graphbuilderconf/src/com/oracle/graal/graphbuilderconf/NodePlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.graphbuilderconf; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Signature; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/AMD64HotSpotFrameOmissionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/AMD64HotSpotFrameOmissionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,17 +22,17 @@ */ package com.oracle.graal.hotspot.amd64.test; -import static jdk.internal.jvmci.amd64.AMD64.rax; +import static jdk.vm.ci.amd64.AMD64.rax; import java.util.Arrays; -import jdk.internal.jvmci.code.CallingConvention; -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.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Ignore;
--- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/CompressedNullCheckTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/CompressedNullCheckTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.amd64.test; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import org.junit.Assert; import org.junit.Assume;
--- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,10 +25,10 @@ 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 static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; import org.junit.Assume; import org.junit.Before;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64DeoptimizationStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64DeoptimizationStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,22 +22,22 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.amd64.AMD64.r10; -import static jdk.internal.jvmci.amd64.AMD64.r11; -import static jdk.internal.jvmci.amd64.AMD64.r13; -import static jdk.internal.jvmci.amd64.AMD64.r14; -import static jdk.internal.jvmci.amd64.AMD64.r8; -import static jdk.internal.jvmci.amd64.AMD64.r9; -import static jdk.internal.jvmci.amd64.AMD64.rbx; -import static jdk.internal.jvmci.amd64.AMD64.rcx; -import static jdk.internal.jvmci.amd64.AMD64.rdi; -import static jdk.internal.jvmci.amd64.AMD64.rdx; -import static jdk.internal.jvmci.amd64.AMD64.rsi; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.hotspot.amd64.AMD64HotSpotRegisterConfig; +import static jdk.vm.ci.amd64.AMD64.r10; +import static jdk.vm.ci.amd64.AMD64.r11; +import static jdk.vm.ci.amd64.AMD64.r13; +import static jdk.vm.ci.amd64.AMD64.r14; +import static jdk.vm.ci.amd64.AMD64.r8; +import static jdk.vm.ci.amd64.AMD64.r9; +import static jdk.vm.ci.amd64.AMD64.rbx; +import static jdk.vm.ci.amd64.AMD64.rcx; +import static jdk.vm.ci.amd64.AMD64.rdi; +import static jdk.vm.ci.amd64.AMD64.rdx; +import static jdk.vm.ci.amd64.AMD64.rsi; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.amd64.AMD64HotSpotRegisterConfig; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; import com.oracle.graal.hotspot.meta.HotSpotProviders;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotAddressLowering.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotAddressLowering.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,10 +23,10 @@ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.asm.amd64.AMD64Address.Scale;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,25 +24,25 @@ import static com.oracle.graal.compiler.common.GraalOptions.CanOmitFrame; import static com.oracle.graal.compiler.common.GraalOptions.ZapStackOnMethodEntry; -import static jdk.internal.jvmci.amd64.AMD64.r10; -import static jdk.internal.jvmci.amd64.AMD64.rax; -import static jdk.internal.jvmci.amd64.AMD64.rsp; -import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCallee; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.amd64.AMD64.r10; +import static jdk.vm.ci.amd64.AMD64.rax; +import static jdk.vm.ci.amd64.AMD64.rsp; +import static jdk.vm.ci.code.CallingConvention.Type.JavaCallee; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; import java.lang.reflect.Field; import java.util.Set; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import sun.misc.Unsafe; import com.oracle.graal.asm.Assembler; @@ -50,6 +50,8 @@ 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.amd64.AMD64ArithmeticLIRGenerator; +import com.oracle.graal.compiler.amd64.AMD64NodeMatchRules; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.gen.BytecodeLIRBuilder; import com.oracle.graal.compiler.gen.BytecodeParserTool; @@ -95,7 +97,7 @@ @Override public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { - return new AMD64HotSpotLIRGenerator(getProviders(), config(), cc, lirGenRes); + return new AMD64HotSpotLIRGenerator(new AMD64ArithmeticLIRGenerator(), getProviders(), config(), cc, lirGenRes); } @Override @@ -105,7 +107,7 @@ @Override public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { - return new AMD64HotSpotNodeLIRBuilder(graph, lirGen); + return new AMD64HotSpotNodeLIRBuilder(graph, lirGen, new AMD64NodeMatchRules(lirGen)); } @Override
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,27 +22,26 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.inittimer.InitTimer.timer; +import static jdk.vm.ci.inittimer.InitTimer.timer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.hotspot.HotSpotMetaAccessProvider; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.inittimer.InitTimer; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.runtime.JVMCIBackend; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotMetaAccessProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.inittimer.InitTimer; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.runtime.JVMCIBackend; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.amd64.AMD64SuitesProvider; @@ -167,12 +166,12 @@ registers.getHeapBaseRegister())); } - protected HotSpotSnippetReflectionProvider createSnippetReflection(HotSpotGraalRuntimeProvider runtime, ConstantReflectionProvider constantReflection) { + protected HotSpotSnippetReflectionProvider createSnippetReflection(HotSpotGraalRuntimeProvider runtime, HotSpotConstantReflectionProvider constantReflection) { return new HotSpotSnippetReflectionProvider(runtime, constantReflection); } protected HotSpotLoweringProvider createLowerer(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotForeignCallsProvider foreignCalls, - HotSpotRegistersProvider registers, ConstantReflectionProvider constantReflection, TargetDescription target) { + HotSpotRegistersProvider registers, HotSpotConstantReflectionProvider constantReflection, TargetDescription target) { return new AMD64HotSpotLoweringProvider(runtime, metaAccess, foreignCalls, registers, constantReflection, target); }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBinaryConsumer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBinaryConsumer.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.DWORD; -import jdk.internal.jvmci.hotspot.HotSpotConstant; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.vm.ci.hotspot.HotSpotConstant; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MIOp; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,19 +22,19 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaField; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Signature; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.amd64.AMD64.rbp; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaField; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.gen.BytecodeLIRBuilder; import com.oracle.graal.compiler.gen.BytecodeParserTool;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCRuntimeCallEpilogueOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCRuntimeCallEpilogueOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.Register; +import jdk.vm.ci.code.Register; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCRuntimeCallPrologueOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCRuntimeCallPrologueOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.amd64.AMD64.rsp; -import jdk.internal.jvmci.code.Register; +import static jdk.vm.ci.amd64.AMD64.rsp; +import jdk.vm.ci.code.Register; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableAddressOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableAddressOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.amd64; -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.PlatformKind; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.PlatformKind; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableShiftOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCardTableShiftOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.hotspot.amd64; -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 jdk.internal.jvmci.meta.PlatformKind; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.PlatformKind; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCounterOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotCounterOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,16 +24,16 @@ import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.amd64.AMD64.rax; -import static jdk.internal.jvmci.amd64.AMD64.rbx; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.common.JVMCIError.unimplemented; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.amd64.AMD64.rax; +import static jdk.vm.ci.amd64.AMD64.rbx; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.common.JVMCIError.unimplemented; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; @@ -41,20 +41,21 @@ import com.oracle.graal.hotspot.meta.HotSpotRegistersProvider; import com.oracle.graal.lir.LIRInstructionClass; import com.oracle.graal.lir.Opcode; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.asm.CompilationResultBuilder; @Opcode("BenchMarkCounter") public class AMD64HotSpotCounterOp extends HotSpotCounterOp { public static final LIRInstructionClass<AMD64HotSpotCounterOp> TYPE = LIRInstructionClass.create(AMD64HotSpotCounterOp.class); - @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private StackSlotValue backupSlot; + @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private AllocatableValue backupSlot; - public AMD64HotSpotCounterOp(String name, String group, Value increment, HotSpotRegistersProvider registers, HotSpotVMConfig config, StackSlotValue backupSlot) { + public AMD64HotSpotCounterOp(String name, String group, Value increment, HotSpotRegistersProvider registers, HotSpotVMConfig config, VirtualStackSlot backupSlot) { super(TYPE, name, group, increment, registers, config); this.backupSlot = backupSlot; } - public AMD64HotSpotCounterOp(String[] names, String[] groups, Value[] increments, HotSpotRegistersProvider registers, HotSpotVMConfig config, StackSlotValue backupSlot) { + public AMD64HotSpotCounterOp(String[] names, String[] groups, Value[] increments, HotSpotRegistersProvider registers, HotSpotVMConfig config, VirtualStackSlot backupSlot) { super(TYPE, names, groups, increments, registers, config); this.backupSlot = backupSlot; }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotDirectStaticCallOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotDirectStaticCallOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRFrameState;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEnterUnpackFramesStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEnterUnpackFramesStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,15 +23,15 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.amd64.AMD64.rax; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import static jdk.internal.jvmci.amd64.AMD64.rip; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaKind; +import static jdk.vm.ci.amd64.AMD64.rax; +import static jdk.vm.ci.amd64.AMD64.rbp; +import static jdk.vm.ci.amd64.AMD64.rip; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueBlockEndOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueBlockEndOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; -import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotEpilogueOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.amd64.AMD64.rbp; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotForeignCallsProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotForeignCallsProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -32,21 +32,21 @@ 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.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.amd64.AMD64.rax; +import static jdk.vm.ci.amd64.AMD64.rdx; +import static jdk.vm.ci.code.CallingConvention.Type.NativeCall; +import static jdk.vm.ci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.Value.ILLEGAL; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.hotspot.HotSpotForeignCallLinkageImpl; import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotJumpToExceptionHandlerInCallerOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotJumpToExceptionHandlerInCallerOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import static jdk.internal.jvmci.amd64.AMD64.rsp; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.amd64.AMD64.rbp; +import static jdk.vm.ci.amd64.AMD64.rsp; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; @@ -67,10 +67,12 @@ // Discard the return address, thus completing restoration of caller frame masm.incrementq(rsp, 8); - // Restore rsp from rbp if the exception PC is a method handle call site. - AMD64Address dst = new AMD64Address(thread, isMethodHandleReturnOffset); - masm.cmpl(dst, 0); - masm.cmovq(ConditionFlag.NotEqual, rsp, rbp); + if (System.getProperty("java.specification.version").compareTo("1.9") < 0) { + // Restore rsp from rbp if the exception PC is a method handle call site. + AMD64Address dst = new AMD64Address(thread, isMethodHandleReturnOffset); + masm.cmpl(dst, 0); + masm.cmovq(ConditionFlag.NotEqual, rsp, rbp); + } masm.jmp(asRegister(handlerInCallerPc)); }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerationResult.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerationResult.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Map; -import jdk.internal.jvmci.code.StackSlot; +import jdk.vm.ci.code.StackSlot; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.hotspot.stubs.Stub;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,42 +30,41 @@ import static com.oracle.graal.hotspot.HotSpotBackend.UNCOMMON_TRAP; import static com.oracle.graal.lir.LIRValueUtil.asConstant; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; -import static jdk.internal.jvmci.amd64.AMD64.rbp; +import static jdk.vm.ci.amd64.AMD64.rbp; import java.util.ArrayList; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotCompressedNullConstant; -import jdk.internal.jvmci.hotspot.HotSpotConstant; -import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant; +import jdk.vm.ci.hotspot.HotSpotConstant; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address.Scale; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MIOp; import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize; +import com.oracle.graal.compiler.amd64.AMD64ArithmeticLIRGenerator; import com.oracle.graal.compiler.amd64.AMD64LIRGenerator; import com.oracle.graal.compiler.common.GraalOptions; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; @@ -88,6 +87,7 @@ import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.SwitchStrategy; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.amd64.AMD64AddressValue; import com.oracle.graal.lir.amd64.AMD64BinaryConsumer; import com.oracle.graal.lir.amd64.AMD64CCall; @@ -112,12 +112,13 @@ final HotSpotVMConfig config; private HotSpotLockStack lockStack; - protected AMD64HotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { - this(new AMD64HotSpotLIRKindTool(), providers, config, cc, lirGenRes); + protected AMD64HotSpotLIRGenerator(AMD64ArithmeticLIRGenerator arithmeticLIRGen, HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { + this(new AMD64HotSpotLIRKindTool(), arithmeticLIRGen, providers, config, cc, lirGenRes); } - protected AMD64HotSpotLIRGenerator(LIRKindTool lirKindTool, HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { - super(lirKindTool, providers, cc, lirGenRes); + protected AMD64HotSpotLIRGenerator(LIRKindTool lirKindTool, AMD64ArithmeticLIRGenerator arithmeticLIRGen, HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, + LIRGenerationResult lirGenRes) { + super(lirKindTool, arithmeticLIRGen, providers, cc, lirGenRes); assert config.basicLockSize == 8; this.config = config; } @@ -184,14 +185,14 @@ private static final class RescueSlotDummyOp extends LIRInstruction { public static final LIRInstructionClass<RescueSlotDummyOp> TYPE = LIRInstructionClass.create(RescueSlotDummyOp.class); - @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private StackSlotValue slot; + @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private AllocatableValue slot; public RescueSlotDummyOp(FrameMapBuilder frameMapBuilder, LIRKind kind) { super(TYPE); slot = frameMapBuilder.allocateSpillSlot(kind); } - public StackSlotValue getSlot() { + public AllocatableValue getSlot() { return slot; } @@ -202,9 +203,9 @@ private RescueSlotDummyOp rescueSlotOp; - private StackSlotValue getOrInitRescueSlot() { + private VirtualStackSlot getOrInitRescueSlot() { RescueSlotDummyOp op = getOrInitRescueSlotOp(); - return op.getSlot(); + return (VirtualStackSlot) op.getSlot(); } private RescueSlotDummyOp getOrInitRescueSlotOp() { @@ -230,7 +231,7 @@ } @Override - public StackSlotValue getLockSlot(int lockDepth) { + public VirtualStackSlot getLockSlot(int lockDepth) { return getLockStack().makeLockSlot(lockDepth); } @@ -331,7 +332,7 @@ * @param savedRegisterLocations the slots to which the registers are saved * @param supportsRemove determines if registers can be pruned */ - protected AMD64SaveRegistersOp emitSaveRegisters(Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove) { + protected AMD64SaveRegistersOp emitSaveRegisters(Register[] savedRegisters, AllocatableValue[] savedRegisterLocations, boolean supportsRemove) { AMD64SaveRegistersOp save = new AMD64SaveRegistersOp(savedRegisters, savedRegisterLocations, supportsRemove); append(save); return save; @@ -340,7 +341,7 @@ /** * Allocate a stack slot for saving a register. */ - protected StackSlotValue allocateSaveRegisterLocation(Register register) { + protected VirtualStackSlot allocateSaveRegisterLocation(Register register) { PlatformKind kind = target().arch.getLargestStorableKind(register.getRegisterCategory()); if (kind.getVectorLength() > 1) { // we don't use vector registers, so there is no need to save them @@ -356,11 +357,9 @@ * @return the register save node */ private AMD64SaveRegistersOp emitSaveAllRegisters(Register[] savedRegisters, boolean supportsRemove) { - StackSlotValue[] savedRegisterLocations = new StackSlotValue[savedRegisters.length]; + AllocatableValue[] savedRegisterLocations = new AllocatableValue[savedRegisters.length]; for (int i = 0; i < savedRegisters.length; i++) { - PlatformKind kind = target().arch.getLargestStorableKind(savedRegisters[i].getRegisterCategory()); - VirtualStackSlot spillSlot = getResult().getFrameMapBuilder().allocateSpillSlot(LIRKind.value(kind)); - savedRegisterLocations[i] = spillSlot; + savedRegisterLocations[i] = allocateSaveRegisterLocation(savedRegisters[i]); } return emitSaveRegisters(savedRegisters, savedRegisterLocations, supportsRemove); }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRKindTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRKindTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.compiler.amd64.AMD64LIRKindTool; import com.oracle.graal.hotspot.nodes.type.HotSpotLIRKindTool;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLeaveCurrentStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLeaveCurrentStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.amd64.AMD64.rdx; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.meta.JavaKind; +import static jdk.vm.ci.amd64.AMD64.rdx; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLeaveDeoptimizedStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLeaveDeoptimizedStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,10 +23,10 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.amd64.AMD64.rbp; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLeaveUnpackFramesStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLeaveUnpackFramesStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLoweringProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLoweringProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; import com.oracle.graal.graph.Node; @@ -42,7 +42,7 @@ private AMD64ConvertSnippets.Templates convertSnippets; public AMD64HotSpotLoweringProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers, - ConstantReflectionProvider constantReflection, TargetDescription target) { + HotSpotConstantReflectionProvider constantReflection, TargetDescription target) { super(runtime, metaAccess, foreignCalls, registers, constantReflection, target); }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotMove.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,17 +26,17 @@ 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.amd64.AMD64Kind; -import jdk.internal.jvmci.code.Register; -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.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; import com.oracle.graal.asm.Label; import com.oracle.graal.asm.amd64.AMD64Address;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,23 +23,24 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.hotspot.HotSpotBackend.EXCEPTION_HANDLER_IN_CALLER; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.amd64.AMD64.rbp; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.amd64.AMD64NodeLIRBuilder; +import com.oracle.graal.compiler.amd64.AMD64NodeMatchRules; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.gen.DebugInfoBuilder; import com.oracle.graal.debug.Debug; @@ -68,8 +69,8 @@ */ public class AMD64HotSpotNodeLIRBuilder extends AMD64NodeLIRBuilder implements HotSpotNodeLIRBuilder { - public AMD64HotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen) { - super(graph, gen); + public AMD64HotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool gen, AMD64NodeMatchRules nodeMatchRules) { + super(graph, gen, nodeMatchRules); assert gen instanceof AMD64HotSpotLIRGenerator; assert getDebugInfoBuilder() instanceof HotSpotDebugInfoBuilder; ((AMD64HotSpotLIRGenerator) gen).setLockStack(((HotSpotDebugInfoBuilder) getDebugInfoBuilder()).lockStack());
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotPatchReturnAddressOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotPatchReturnAddressOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.amd64.AMD64.rsp; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.amd64.AMD64.rsp; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotPushInterpreterFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotPushInterpreterFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.amd64.AMD64.rsp; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.amd64.AMD64.rsp; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterAllocationConfig.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterAllocationConfig.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,42 +22,42 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.amd64.AMD64.r10; -import static jdk.internal.jvmci.amd64.AMD64.r11; -import static jdk.internal.jvmci.amd64.AMD64.r12; -import static jdk.internal.jvmci.amd64.AMD64.r13; -import static jdk.internal.jvmci.amd64.AMD64.r14; -import static jdk.internal.jvmci.amd64.AMD64.r8; -import static jdk.internal.jvmci.amd64.AMD64.r9; -import static jdk.internal.jvmci.amd64.AMD64.rax; -import static jdk.internal.jvmci.amd64.AMD64.rbp; -import static jdk.internal.jvmci.amd64.AMD64.rbx; -import static jdk.internal.jvmci.amd64.AMD64.rcx; -import static jdk.internal.jvmci.amd64.AMD64.rdi; -import static jdk.internal.jvmci.amd64.AMD64.rdx; -import static jdk.internal.jvmci.amd64.AMD64.rsi; -import static jdk.internal.jvmci.amd64.AMD64.xmm0; -import static jdk.internal.jvmci.amd64.AMD64.xmm1; -import static jdk.internal.jvmci.amd64.AMD64.xmm10; -import static jdk.internal.jvmci.amd64.AMD64.xmm11; -import static jdk.internal.jvmci.amd64.AMD64.xmm12; -import static jdk.internal.jvmci.amd64.AMD64.xmm13; -import static jdk.internal.jvmci.amd64.AMD64.xmm14; -import static jdk.internal.jvmci.amd64.AMD64.xmm15; -import static jdk.internal.jvmci.amd64.AMD64.xmm2; -import static jdk.internal.jvmci.amd64.AMD64.xmm3; -import static jdk.internal.jvmci.amd64.AMD64.xmm4; -import static jdk.internal.jvmci.amd64.AMD64.xmm5; -import static jdk.internal.jvmci.amd64.AMD64.xmm6; -import static jdk.internal.jvmci.amd64.AMD64.xmm7; -import static jdk.internal.jvmci.amd64.AMD64.xmm8; -import static jdk.internal.jvmci.amd64.AMD64.xmm9; +import static jdk.vm.ci.amd64.AMD64.r10; +import static jdk.vm.ci.amd64.AMD64.r11; +import static jdk.vm.ci.amd64.AMD64.r12; +import static jdk.vm.ci.amd64.AMD64.r13; +import static jdk.vm.ci.amd64.AMD64.r14; +import static jdk.vm.ci.amd64.AMD64.r8; +import static jdk.vm.ci.amd64.AMD64.r9; +import static jdk.vm.ci.amd64.AMD64.rax; +import static jdk.vm.ci.amd64.AMD64.rbp; +import static jdk.vm.ci.amd64.AMD64.rbx; +import static jdk.vm.ci.amd64.AMD64.rcx; +import static jdk.vm.ci.amd64.AMD64.rdi; +import static jdk.vm.ci.amd64.AMD64.rdx; +import static jdk.vm.ci.amd64.AMD64.rsi; +import static jdk.vm.ci.amd64.AMD64.xmm0; +import static jdk.vm.ci.amd64.AMD64.xmm1; +import static jdk.vm.ci.amd64.AMD64.xmm10; +import static jdk.vm.ci.amd64.AMD64.xmm11; +import static jdk.vm.ci.amd64.AMD64.xmm12; +import static jdk.vm.ci.amd64.AMD64.xmm13; +import static jdk.vm.ci.amd64.AMD64.xmm14; +import static jdk.vm.ci.amd64.AMD64.xmm15; +import static jdk.vm.ci.amd64.AMD64.xmm2; +import static jdk.vm.ci.amd64.AMD64.xmm3; +import static jdk.vm.ci.amd64.AMD64.xmm4; +import static jdk.vm.ci.amd64.AMD64.xmm5; +import static jdk.vm.ci.amd64.AMD64.xmm6; +import static jdk.vm.ci.amd64.AMD64.xmm7; +import static jdk.vm.ci.amd64.AMD64.xmm8; +import static jdk.vm.ci.amd64.AMD64.xmm9; import java.util.ArrayList; import java.util.BitSet; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRestoreRbpOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRestoreRbpOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.lir.Variable;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotReturnOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.ILLEGAL; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,17 +24,17 @@ import static com.oracle.graal.asm.NumUtil.isInt; import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; -import static jdk.internal.jvmci.amd64.AMD64.rax; -import static jdk.internal.jvmci.amd64.AMD64.rip; -import jdk.internal.jvmci.code.InfopointReason; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -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 jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.amd64.AMD64.rax; +import static jdk.vm.ci.amd64.AMD64.rip; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotStrategySwitchOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotStrategySwitchOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotUnwindOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotUnwindOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import static com.oracle.graal.hotspot.HotSpotBackend.UNWIND_EXCEPTION_TO_CALLER; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.amd64.AMD64.rsp; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; +import static jdk.vm.ci.amd64.AMD64.rsp; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotspotDirectVirtualCallOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotspotDirectVirtualCallOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRFrameState;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64IndirectCallOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64IndirectCallOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,12 +23,12 @@ package com.oracle.graal.hotspot.amd64; 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.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRFrameState;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64PrefetchOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64PrefetchOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ package com.oracle.graal.hotspot.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.COMPOSITE; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.hotspot.amd64; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CallingConvention.Type; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.amd64.AMD64NodeLIRBuilder; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64TailcallOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64TailcallOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64UncommonTrapStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64UncommonTrapStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,22 +22,22 @@ */ package com.oracle.graal.hotspot.amd64; -import static jdk.internal.jvmci.amd64.AMD64.r10; -import static jdk.internal.jvmci.amd64.AMD64.r11; -import static jdk.internal.jvmci.amd64.AMD64.r13; -import static jdk.internal.jvmci.amd64.AMD64.r14; -import static jdk.internal.jvmci.amd64.AMD64.r8; -import static jdk.internal.jvmci.amd64.AMD64.r9; -import static jdk.internal.jvmci.amd64.AMD64.rbx; -import static jdk.internal.jvmci.amd64.AMD64.rcx; -import static jdk.internal.jvmci.amd64.AMD64.rdi; -import static jdk.internal.jvmci.amd64.AMD64.rdx; -import static jdk.internal.jvmci.amd64.AMD64.rsi; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.hotspot.amd64.AMD64HotSpotRegisterConfig; +import static jdk.vm.ci.amd64.AMD64.r10; +import static jdk.vm.ci.amd64.AMD64.r11; +import static jdk.vm.ci.amd64.AMD64.r13; +import static jdk.vm.ci.amd64.AMD64.r14; +import static jdk.vm.ci.amd64.AMD64.r8; +import static jdk.vm.ci.amd64.AMD64.r9; +import static jdk.vm.ci.amd64.AMD64.rbx; +import static jdk.vm.ci.amd64.AMD64.rcx; +import static jdk.vm.ci.amd64.AMD64.rdi; +import static jdk.vm.ci.amd64.AMD64.rdx; +import static jdk.vm.ci.amd64.AMD64.rsi; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.amd64.AMD64HotSpotRegisterConfig; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; import com.oracle.graal.hotspot.meta.HotSpotProviders;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizationStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizationStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,19 +22,20 @@ */ package com.oracle.graal.hotspot.sparc; -import static jdk.internal.jvmci.sparc.SPARC.g1; -import static jdk.internal.jvmci.sparc.SPARC.g3; -import static jdk.internal.jvmci.sparc.SPARC.g4; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import static jdk.internal.jvmci.sparc.SPARC.o0; -import static jdk.internal.jvmci.sparc.SPARC.o1; -import static jdk.internal.jvmci.sparc.SPARC.o2; -import static jdk.internal.jvmci.sparc.SPARC.o3; -import static jdk.internal.jvmci.sparc.SPARC.o4; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.sparc.SPARCHotSpotRegisterConfig; +import static jdk.vm.ci.sparc.SPARC.g1; +import static jdk.vm.ci.sparc.SPARC.g3; +import static jdk.vm.ci.sparc.SPARC.g4; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import static jdk.vm.ci.sparc.SPARC.o2; +import static jdk.vm.ci.sparc.SPARC.o3; +import static jdk.vm.ci.sparc.SPARC.o4; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.sparc.SPARCHotSpotRegisterConfig; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; import com.oracle.graal.hotspot.meta.HotSpotProviders; @@ -44,11 +45,11 @@ private RegisterConfig registerConfig; - public SPARCDeoptimizationStub(HotSpotProviders providers, TargetDescription target, HotSpotForeignCallLinkage linkage) { + public SPARCDeoptimizationStub(HotSpotProviders providers, TargetDescription target, HotSpotForeignCallLinkage linkage, HotSpotVMConfig config) { super(providers, target, linkage); // This is basically the maximum we can spare. All other G and O register are used. Register[] allocatable = new Register[]{g1, g3, g4, g5, o0, o1, o2, o3, o4}; - registerConfig = new SPARCHotSpotRegisterConfig(target, allocatable); + registerConfig = new SPARCHotSpotRegisterConfig(target.arch, allocatable, config); } @Override
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizeOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCDeoptimizeOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,10 +23,10 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.hotspot.HotSpotHostBackend.UNCOMMON_TRAP_HANDLER; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.sparc.SPARC; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.sparc.SPARC; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRFrameState;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,19 +22,19 @@ */ package com.oracle.graal.hotspot.sparc; +import static com.oracle.graal.asm.sparc.SPARCAssembler.isGlobalRegister; import static com.oracle.graal.asm.sparc.SPARCAssembler.Annul.NOT_ANNUL; 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.NotEqual; import static com.oracle.graal.compiler.common.GraalOptions.ZapStackOnMethodEntry; -import static jdk.internal.jvmci.code.CallingConvention.Type.JavaCall; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import static jdk.internal.jvmci.sparc.SPARC.isGlobalRegister; -import static jdk.internal.jvmci.sparc.SPARC.sp; +import static jdk.vm.ci.code.CallingConvention.Type.JavaCall; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARC.sp; import java.lang.reflect.Field; import java.util.HashSet; @@ -43,16 +43,16 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.DataSection; -import jdk.internal.jvmci.code.DataSection.Data; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.DataSection; +import jdk.vm.ci.code.DataSection.Data; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import sun.misc.Unsafe; import com.oracle.graal.asm.Assembler; @@ -61,9 +61,10 @@ import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; +import com.oracle.graal.compiler.sparc.SPARCArithmeticLIRGenerator; +import com.oracle.graal.compiler.sparc.SPARCNodeMatchRules; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric; import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; @@ -134,7 +135,7 @@ @Override public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes) { - return new SPARCHotSpotLIRGenerator(getProviders(), config(), cc, lirGenRes); + return new SPARCHotSpotLIRGenerator(new SPARCArithmeticLIRGenerator(), getProviders(), config(), cc, lirGenRes); } @Override @@ -144,7 +145,7 @@ @Override public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { - return new SPARCHotSpotNodeLIRBuilder(graph, lirGen); + return new SPARCHotSpotNodeLIRBuilder(graph, lirGen, new SPARCNodeMatchRules(lirGen)); } /** @@ -174,7 +175,7 @@ try (ScratchRegister sc = masm.getScratchRegister()) { Register scratch = sc.getRegister(); assert afterFrameInit || isGlobalRegister(scratch) : "Only global (g1-g7) registers are allowed if the frame was not initialized here. Got register " + scratch; - new Setx(address.getDisplacement(), scratch).emit(masm); + masm.setx(address.getDisplacement(), scratch, false); masm.stx(g0, new SPARCAddress(sp, scratch)); } } @@ -210,7 +211,7 @@ try (ScratchRegister sc = masm.getScratchRegister()) { Register scratch = sc.getRegister(); assert isGlobalRegister(scratch) : "Only global registers are allowed before save. Got register " + scratch; - new Setx(stackpoinerChange, scratch).emit(masm); + masm.setx(stackpoinerChange, scratch, false); masm.save(sp, scratch, sp); } } @@ -506,7 +507,7 @@ @Override public RegisterAllocationConfig newRegisterAllocationConfig(RegisterConfig registerConfig) { RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig; - return new RegisterAllocationConfig(registerConfigNonNull); + return new SPARCHotSpotRegisterAllocationConfig(registerConfigNonNull); } private static final Unsafe UNSAFE = initUnsafe();
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,20 +26,19 @@ import java.util.HashSet; import java.util.Set; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.hotspot.HotSpotMetaAccessProvider; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.runtime.JVMCIBackend; -import jdk.internal.jvmci.service.ServiceProvider; -import jdk.internal.jvmci.sparc.SPARC; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotMetaAccessProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.runtime.JVMCIBackend; +import jdk.vm.ci.service.ServiceProvider; +import jdk.vm.ci.sparc.SPARC; import com.oracle.graal.compiler.sparc.SPARCAddressLowering; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; @@ -117,7 +116,7 @@ } protected HotSpotLoweringProvider createLowerer(HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess, HotSpotForeignCallsProvider foreignCalls, - HotSpotRegistersProvider registers, ConstantReflectionProvider constantReflection, TargetDescription target) { + HotSpotRegistersProvider registers, HotSpotConstantReflectionProvider constantReflection, TargetDescription target) { return new SPARCHotSpotLoweringProvider(runtime, metaAccess, foreignCalls, registers, constantReflection, target); } @@ -129,7 +128,8 @@ private static Value[] createNativeABICallerSaveRegisters(HotSpotVMConfig config, RegisterConfig regConfig) { Set<Register> callerSavedRegisters = new HashSet<>(); Collections.addAll(callerSavedRegisters, regConfig.getCalleeSaveRegisters()); - Collections.addAll(callerSavedRegisters, SPARC.fpuRegisters); + Collections.addAll(callerSavedRegisters, SPARC.fpusRegisters); + Collections.addAll(callerSavedRegisters, SPARC.fpudRegisters); callerSavedRegisters.add(SPARC.g1); callerSavedRegisters.add(SPARC.g4); callerSavedRegisters.add(SPARC.g5);
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCRuntimeCallEpilogueOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCRuntimeCallEpilogueOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; @@ -63,7 +63,7 @@ public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { // Restore the thread register when coming back from the runtime. - SPARCMove.move(crb, masm, thread.asValue(LIRKind.value(DWORD)), threadTemp, SPARCDelayedControlTransfer.DUMMY); + SPARCMove.move(crb, masm, thread.asValue(LIRKind.value(XWORD)), threadTemp, SPARCDelayedControlTransfer.DUMMY); // Reset last Java frame, last Java PC and flags. masm.stx(g0, new SPARCAddress(thread, threadLastJavaSpOffset));
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCRuntimeCallPrologueOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCRuntimeCallPrologueOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,13 +24,13 @@ 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.sparc.SPARC.STACK_BIAS; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.STACK_BIAS; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; @@ -69,6 +69,6 @@ masm.stx(scratchRegister, new SPARCAddress(thread, threadLastJavaSpOffset)); // Save the thread register when calling out to the runtime. - SPARCMove.move(crb, masm, threadTemp, thread.asValue(LIRKind.value(DWORD)), getDelayedControlTransfer()); + SPARCMove.move(crb, masm, threadTemp, thread.asValue(LIRKind.value(XWORD)), getDelayedControlTransfer()); } }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCounterOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotCounterOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,18 +25,17 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.isSimm13; import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.hotspot.HotSpotCounterOp; import com.oracle.graal.hotspot.meta.HotSpotRegistersProvider; import com.oracle.graal.lir.LIRInstructionClass; @@ -132,7 +131,7 @@ } else { try (ScratchRegister scratch = masm.getScratchRegister()) { Register tempOffsetRegister = scratch.getRegister(); - new Setx(relativeDisplacement, tempOffsetRegister, false).emit(masm); + masm.setx(relativeDisplacement, tempOffsetRegister, false); masm.add(countersArrayReg, tempOffsetRegister, countersArrayReg); } lastDisplacement = displacement;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotDeoptimizeCallerOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotDeoptimizeCallerOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.hotspot.HotSpotHostBackend.UNCOMMON_TRAP_HANDLER; -import jdk.internal.jvmci.code.Register; +import jdk.vm.ci.code.Register; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEnterUnpackFramesStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotEnterUnpackFramesStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,27 +23,27 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.meta.LIRKind.value; -import static jdk.internal.jvmci.sparc.SPARC.STACK_BIAS; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARC.i0; -import static jdk.internal.jvmci.sparc.SPARC.i1; -import static jdk.internal.jvmci.sparc.SPARC.i2; -import static jdk.internal.jvmci.sparc.SPARC.i3; -import static jdk.internal.jvmci.sparc.SPARC.i4; -import static jdk.internal.jvmci.sparc.SPARC.l7; -import static jdk.internal.jvmci.sparc.SPARC.o0; -import static jdk.internal.jvmci.sparc.SPARC.o1; -import static jdk.internal.jvmci.sparc.SPARC.o2; -import static jdk.internal.jvmci.sparc.SPARC.o3; -import static jdk.internal.jvmci.sparc.SPARC.o4; -import static jdk.internal.jvmci.sparc.SPARC.o5; -import static jdk.internal.jvmci.sparc.SPARC.o7; -import static jdk.internal.jvmci.sparc.SPARC.sp; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.PlatformKind; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.meta.LIRKind.value; +import static jdk.vm.ci.sparc.SPARC.STACK_BIAS; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.i1; +import static jdk.vm.ci.sparc.SPARC.i2; +import static jdk.vm.ci.sparc.SPARC.i3; +import static jdk.vm.ci.sparc.SPARC.i4; +import static jdk.vm.ci.sparc.SPARC.l7; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import static jdk.vm.ci.sparc.SPARC.o2; +import static jdk.vm.ci.sparc.SPARC.o3; +import static jdk.vm.ci.sparc.SPARC.o4; +import static jdk.vm.ci.sparc.SPARC.o5; +import static jdk.vm.ci.sparc.SPARC.o7; +import static jdk.vm.ci.sparc.SPARC.sp; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.PlatformKind; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCMacroAssembler;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotForeignCallsProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotForeignCallsProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,22 +31,23 @@ 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.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.Value.ILLEGAL; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.i1; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.hotspot.HotSpotForeignCallLinkageImpl; import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; @@ -65,6 +66,7 @@ @Override public void initialize(HotSpotProviders providers) { + HotSpotVMConfig config = jvmciRuntime.getConfig(); TargetDescription target = providers.getCodeCache().getTarget(); PlatformKind word = target.arch.getWordKind(); @@ -81,8 +83,8 @@ register(new HotSpotForeignCallLinkageImpl(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))); + link(new SPARCDeoptimizationStub(providers, target, registerStubCall(DEOPTIMIZATION_HANDLER, REEXECUTABLE, LEAF, NO_LOCATIONS), config)); + link(new SPARCUncommonTrapStub(providers, target, registerStubCall(UNCOMMON_TRAP_HANDLER, REEXECUTABLE, LEAF, NO_LOCATIONS), config)); } super.initialize(providers);
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotJumpToExceptionHandlerInCallerOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotJumpToExceptionHandlerInCallerOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,15 +23,15 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARC.i0; -import static jdk.internal.jvmci.sparc.SPARC.i1; -import static jdk.internal.jvmci.sparc.SPARC.i2; -import static jdk.internal.jvmci.sparc.SPARC.l7; -import static jdk.internal.jvmci.sparc.SPARC.sp; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.i1; +import static jdk.vm.ci.sparc.SPARC.i2; +import static jdk.vm.ci.sparc.SPARC.l7; +import static jdk.vm.ci.sparc.SPARC.sp; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCAssembler.CC;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotJumpToExceptionHandlerOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotJumpToExceptionHandlerOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,10 +23,10 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.sparc.SPARCKind; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass; @@ -56,7 +56,7 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - Register addrRegister = asRegister(address, SPARCKind.DWORD); + Register addrRegister = asRegister(address, SPARCKind.XWORD); masm.jmp(addrRegister); masm.restoreWindow(); }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerationResult.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerationResult.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.code.StackSlot; +import jdk.vm.ci.code.StackSlot; import com.oracle.graal.hotspot.stubs.Stub; import com.oracle.graal.lir.LIR;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,76 +28,76 @@ import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.hotspot.HotSpotCompressedNullConstant.COMPRESSED_NULL; -import static jdk.internal.jvmci.meta.JavaConstant.INT_0; -import static jdk.internal.jvmci.sparc.SPARC.d32; -import static jdk.internal.jvmci.sparc.SPARC.d34; -import static jdk.internal.jvmci.sparc.SPARC.d36; -import static jdk.internal.jvmci.sparc.SPARC.d38; -import static jdk.internal.jvmci.sparc.SPARC.d40; -import static jdk.internal.jvmci.sparc.SPARC.d42; -import static jdk.internal.jvmci.sparc.SPARC.d44; -import static jdk.internal.jvmci.sparc.SPARC.d46; -import static jdk.internal.jvmci.sparc.SPARC.d48; -import static jdk.internal.jvmci.sparc.SPARC.d50; -import static jdk.internal.jvmci.sparc.SPARC.d52; -import static jdk.internal.jvmci.sparc.SPARC.d54; -import static jdk.internal.jvmci.sparc.SPARC.d56; -import static jdk.internal.jvmci.sparc.SPARC.d58; -import static jdk.internal.jvmci.sparc.SPARC.d60; -import static jdk.internal.jvmci.sparc.SPARC.d62; -import static jdk.internal.jvmci.sparc.SPARC.f0; -import static jdk.internal.jvmci.sparc.SPARC.f10; -import static jdk.internal.jvmci.sparc.SPARC.f12; -import static jdk.internal.jvmci.sparc.SPARC.f14; -import static jdk.internal.jvmci.sparc.SPARC.f16; -import static jdk.internal.jvmci.sparc.SPARC.f18; -import static jdk.internal.jvmci.sparc.SPARC.f2; -import static jdk.internal.jvmci.sparc.SPARC.f20; -import static jdk.internal.jvmci.sparc.SPARC.f22; -import static jdk.internal.jvmci.sparc.SPARC.f24; -import static jdk.internal.jvmci.sparc.SPARC.f26; -import static jdk.internal.jvmci.sparc.SPARC.f28; -import static jdk.internal.jvmci.sparc.SPARC.f30; -import static jdk.internal.jvmci.sparc.SPARC.f4; -import static jdk.internal.jvmci.sparc.SPARC.f6; -import static jdk.internal.jvmci.sparc.SPARC.f8; -import static jdk.internal.jvmci.sparc.SPARC.g1; -import static jdk.internal.jvmci.sparc.SPARC.g3; -import static jdk.internal.jvmci.sparc.SPARC.g4; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.hotspot.HotSpotCompressedNullConstant.COMPRESSED_NULL; +import static jdk.vm.ci.meta.JavaConstant.INT_0; +import static jdk.vm.ci.meta.JavaConstant.LONG_0; +import static jdk.vm.ci.sparc.SPARC.d32; +import static jdk.vm.ci.sparc.SPARC.d34; +import static jdk.vm.ci.sparc.SPARC.d36; +import static jdk.vm.ci.sparc.SPARC.d38; +import static jdk.vm.ci.sparc.SPARC.d40; +import static jdk.vm.ci.sparc.SPARC.d42; +import static jdk.vm.ci.sparc.SPARC.d44; +import static jdk.vm.ci.sparc.SPARC.d46; +import static jdk.vm.ci.sparc.SPARC.d48; +import static jdk.vm.ci.sparc.SPARC.d50; +import static jdk.vm.ci.sparc.SPARC.d52; +import static jdk.vm.ci.sparc.SPARC.d54; +import static jdk.vm.ci.sparc.SPARC.d56; +import static jdk.vm.ci.sparc.SPARC.d58; +import static jdk.vm.ci.sparc.SPARC.d60; +import static jdk.vm.ci.sparc.SPARC.d62; +import static jdk.vm.ci.sparc.SPARC.f0; +import static jdk.vm.ci.sparc.SPARC.f10; +import static jdk.vm.ci.sparc.SPARC.f12; +import static jdk.vm.ci.sparc.SPARC.f14; +import static jdk.vm.ci.sparc.SPARC.f16; +import static jdk.vm.ci.sparc.SPARC.f18; +import static jdk.vm.ci.sparc.SPARC.f2; +import static jdk.vm.ci.sparc.SPARC.f20; +import static jdk.vm.ci.sparc.SPARC.f22; +import static jdk.vm.ci.sparc.SPARC.f24; +import static jdk.vm.ci.sparc.SPARC.f26; +import static jdk.vm.ci.sparc.SPARC.f28; +import static jdk.vm.ci.sparc.SPARC.f30; +import static jdk.vm.ci.sparc.SPARC.f4; +import static jdk.vm.ci.sparc.SPARC.f6; +import static jdk.vm.ci.sparc.SPARC.f8; +import static jdk.vm.ci.sparc.SPARC.g1; +import static jdk.vm.ci.sparc.SPARC.g3; +import static jdk.vm.ci.sparc.SPARC.g4; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; import java.util.Map; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotCompressedNullConstant; -import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant; +import jdk.vm.ci.hotspot.HotSpotConstant; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.common.spi.LIRKindTool; +import com.oracle.graal.compiler.sparc.SPARCArithmeticLIRGenerator; import com.oracle.graal.compiler.sparc.SPARCLIRGenerator; import com.oracle.graal.hotspot.HotSpotBackend; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; @@ -113,12 +113,12 @@ import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.SwitchStrategy; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.gen.LIRGenerationResult; import com.oracle.graal.lir.sparc.SPARCAddressValue; import com.oracle.graal.lir.sparc.SPARCControlFlow.StrategySwitchOp; import com.oracle.graal.lir.sparc.SPARCFrameMapBuilder; import com.oracle.graal.lir.sparc.SPARCImmediateAddressValue; -import com.oracle.graal.lir.sparc.SPARCMove; import com.oracle.graal.lir.sparc.SPARCMove.CompareAndSwapOp; import com.oracle.graal.lir.sparc.SPARCMove.LoadOp; import com.oracle.graal.lir.sparc.SPARCMove.NullCheckOp; @@ -132,12 +132,13 @@ private HotSpotLockStack lockStack; private LIRFrameState currentRuntimeCallInfo; - public SPARCHotSpotLIRGenerator(HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { - this(new SPARCHotSpotLIRKindTool(), providers, config, cc, lirGenRes); + public SPARCHotSpotLIRGenerator(SPARCArithmeticLIRGenerator arithmeticLIRGen, HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { + this(new SPARCHotSpotLIRKindTool(), arithmeticLIRGen, providers, config, cc, lirGenRes); } - protected SPARCHotSpotLIRGenerator(LIRKindTool lirKindTool, HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, LIRGenerationResult lirGenRes) { - super(lirKindTool, providers, cc, lirGenRes); + protected SPARCHotSpotLIRGenerator(LIRKindTool lirKindTool, SPARCArithmeticLIRGenerator arithmeticLIRGen, HotSpotProviders providers, HotSpotVMConfig config, CallingConvention cc, + LIRGenerationResult lirGenRes) { + super(lirKindTool, arithmeticLIRGen, providers, cc, lirGenRes); assert config.basicLockSize == 8; this.config = config; } @@ -160,7 +161,7 @@ private AllocatableValue safepointAddressValue; @Override - public StackSlotValue getLockSlot(int lockDepth) { + public VirtualStackSlot getLockSlot(int lockDepth) { return getLockStack().makeLockSlot(lockDepth); } @@ -212,7 +213,7 @@ if (linkage.destroysRegisters() || hotspotLinkage.needsJavaFrameAnchor()) { HotSpotRegistersProvider registers = getProviders().getRegisters(); Register thread = registers.getThreadRegister(); - Value threadTemp = newVariable(LIRKind.value(SPARCKind.DWORD)); + Value threadTemp = newVariable(LIRKind.value(SPARCKind.XWORD)); Register stackPointer = registers.getStackPointerRegister(); Variable spScratch = newVariable(LIRKind.value(target().arch.getWordKind())); append(new SPARCHotSpotCRuntimeCallPrologueOp(config.threadLastJavaSpOffset(), thread, stackPointer, threadTemp, spScratch)); @@ -332,11 +333,18 @@ Constant usedSource; if (COMPRESSED_NULL.equals(src)) { usedSource = INT_0; + } else if (src instanceof HotSpotObjectConstant && ((HotSpotObjectConstant) src).isNull()) { + usedSource = LONG_0; } else { usedSource = src; } - if (usedSource instanceof HotSpotMetaspaceConstant) { - return new SPARCMove.LoadConstantFromTable(usedSource, getConstantTableBase(), dst); + if (usedSource instanceof HotSpotConstant) { + HotSpotConstant constant = (HotSpotConstant) usedSource; + if (constant.isCompressed()) { + return new SPARCHotSpotMove.LoadHotSpotObjectConstantInline(constant, dst); + } else { + return new SPARCHotSpotMove.LoadHotSpotObjectConstantFromTable(constant, dst, getConstantTableBase()); + } } else { return super.createMoveConstant(dst, usedSource); } @@ -382,7 +390,7 @@ @Override public Value emitCompress(Value pointer, CompressEncoding encoding, boolean nonNull) { LIRKind inputKind = pointer.getLIRKind(); - assert inputKind.getPlatformKind() == DWORD : inputKind; + assert inputKind.getPlatformKind() == XWORD : inputKind; if (inputKind.isReference(0)) { // oop Variable result = newVariable(LIRKind.reference(WORD)); @@ -393,7 +401,7 @@ Variable result = newVariable(LIRKind.value(WORD)); AllocatableValue base = Value.ILLEGAL; if (encoding.base != 0) { - base = emitLoadConstant(LIRKind.value(DWORD), JavaConstant.forLong(encoding.base)); + base = emitLoadConstant(LIRKind.value(XWORD), JavaConstant.forLong(encoding.base)); } append(new SPARCHotSpotMove.CompressPointer(result, asAllocatable(pointer), base, encoding, nonNull)); return result; @@ -406,15 +414,15 @@ assert inputKind.getPlatformKind() == WORD; if (inputKind.isReference(0)) { // oop - Variable result = newVariable(LIRKind.reference(DWORD)); + Variable result = newVariable(LIRKind.reference(XWORD)); append(new SPARCHotSpotMove.UncompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull)); return result; } else { // metaspace pointer - Variable result = newVariable(LIRKind.value(DWORD)); + Variable result = newVariable(LIRKind.value(XWORD)); AllocatableValue base = Value.ILLEGAL; if (encoding.base != 0) { - base = emitLoadConstant(LIRKind.value(DWORD), JavaConstant.forLong(encoding.base)); + base = emitLoadConstant(LIRKind.value(XWORD), JavaConstant.forLong(encoding.base)); } append(new SPARCHotSpotMove.UncompressPointer(result, asAllocatable(pointer), base, encoding, nonNull)); return result; @@ -426,7 +434,7 @@ * @param savedRegisterLocations the slots to which the registers are saved * @param supportsRemove determines if registers can be pruned */ - protected SPARCSaveRegistersOp emitSaveRegisters(Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove) { + protected SPARCSaveRegistersOp emitSaveRegisters(Register[] savedRegisters, AllocatableValue[] savedRegisterLocations, boolean supportsRemove) { SPARCSaveRegistersOp save = new SPARCSaveRegistersOp(savedRegisters, savedRegisterLocations, supportsRemove); append(save); return save; @@ -449,7 +457,7 @@ d56, d58, d60, d62 }; // @formatter:on - StackSlotValue[] savedRegisterLocations = new StackSlotValue[savedRegisters.length]; + AllocatableValue[] savedRegisterLocations = new AllocatableValue[savedRegisters.length]; for (int i = 0; i < savedRegisters.length; i++) { PlatformKind kind = target().arch.getLargestStorableKind(savedRegisters[i].getRegisterCategory()); VirtualStackSlot spillSlot = getResult().getFrameMapBuilder().allocateSpillSlot(LIRKind.value(kind));
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRKindTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLIRKindTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.sparc; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.compiler.sparc.SPARCLIRKindTool; import com.oracle.graal.hotspot.nodes.type.HotSpotLIRKindTool;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveCurrentStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveCurrentStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,16 +22,16 @@ */ package com.oracle.graal.hotspot.sparc; -import static jdk.internal.jvmci.sparc.SPARC.i0; -import static jdk.internal.jvmci.sparc.SPARC.i1; -import static jdk.internal.jvmci.sparc.SPARC.i2; -import static jdk.internal.jvmci.sparc.SPARC.i3; -import static jdk.internal.jvmci.sparc.SPARC.i4; -import static jdk.internal.jvmci.sparc.SPARC.o0; -import static jdk.internal.jvmci.sparc.SPARC.o1; -import static jdk.internal.jvmci.sparc.SPARC.o2; -import static jdk.internal.jvmci.sparc.SPARC.o3; -import static jdk.internal.jvmci.sparc.SPARC.o4; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.i1; +import static jdk.vm.ci.sparc.SPARC.i2; +import static jdk.vm.ci.sparc.SPARC.i3; +import static jdk.vm.ci.sparc.SPARC.i4; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import static jdk.vm.ci.sparc.SPARC.o2; +import static jdk.vm.ci.sparc.SPARC.o3; +import static jdk.vm.ci.sparc.SPARC.o4; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveDeoptimizedStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveDeoptimizedStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,16 +22,16 @@ */ package com.oracle.graal.hotspot.sparc; -import static jdk.internal.jvmci.sparc.SPARC.i0; -import static jdk.internal.jvmci.sparc.SPARC.i1; -import static jdk.internal.jvmci.sparc.SPARC.i2; -import static jdk.internal.jvmci.sparc.SPARC.i3; -import static jdk.internal.jvmci.sparc.SPARC.i4; -import static jdk.internal.jvmci.sparc.SPARC.o0; -import static jdk.internal.jvmci.sparc.SPARC.o1; -import static jdk.internal.jvmci.sparc.SPARC.o2; -import static jdk.internal.jvmci.sparc.SPARC.o3; -import static jdk.internal.jvmci.sparc.SPARC.o4; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.i1; +import static jdk.vm.ci.sparc.SPARC.i2; +import static jdk.vm.ci.sparc.SPARC.i3; +import static jdk.vm.ci.sparc.SPARC.i4; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import static jdk.vm.ci.sparc.SPARC.o2; +import static jdk.vm.ci.sparc.SPARC.o3; +import static jdk.vm.ci.sparc.SPARC.o4; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveUnpackFramesStackFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLeaveUnpackFramesStackFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.sparc; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARC.i0; -import static jdk.internal.jvmci.sparc.SPARC.l7; -import jdk.internal.jvmci.code.Register; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.l7; +import jdk.vm.ci.code.Register; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCMacroAssembler;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLoweringProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotLoweringProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.sparc; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; import com.oracle.graal.graph.Node; @@ -37,7 +37,7 @@ public class SPARCHotSpotLoweringProvider extends DefaultHotSpotLoweringProvider { public SPARCHotSpotLoweringProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers, - ConstantReflectionProvider constantReflection, TargetDescription target) { + HotSpotConstantReflectionProvider constantReflection, TargetDescription target) { super(runtime, metaAccess, foreignCalls, registers, constantReflection, target); }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotMove.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotMove.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,23 +24,102 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.ILLEGAL; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.AllocatableValue; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; +import static com.oracle.graal.lir.sparc.SPARCMove.loadFromConstantTable; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotConstant; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; import com.oracle.graal.asm.Label; +import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCAssembler.Annul; import com.oracle.graal.asm.sparc.SPARCAssembler.BranchPredict; import com.oracle.graal.asm.sparc.SPARCAssembler.CC; import com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag; import com.oracle.graal.asm.sparc.SPARCAssembler.RCondition; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister; import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.StandardOp.LoadConstantOp; import com.oracle.graal.lir.asm.CompilationResultBuilder; +import com.oracle.graal.lir.sparc.SPARCDelayedControlTransfer; import com.oracle.graal.lir.sparc.SPARCLIRInstruction; +import com.oracle.graal.lir.sparc.SPARCTailDelayedLIRInstruction; public class SPARCHotSpotMove { + + public static class LoadHotSpotObjectConstantInline extends SPARCLIRInstruction implements SPARCTailDelayedLIRInstruction, LoadConstantOp { + public static final LIRInstructionClass<LoadHotSpotObjectConstantInline> TYPE = LIRInstructionClass.create(LoadHotSpotObjectConstantInline.class); + + public static final SizeEstimate SIZE = SizeEstimate.create(8); + private HotSpotConstant constant; + @Def({REG, STACK}) AllocatableValue result; + + public LoadHotSpotObjectConstantInline(HotSpotConstant constant, AllocatableValue result) { + super(TYPE, SIZE); + this.constant = constant; + this.result = result; + } + + @Override + protected void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + crb.recordInlineDataInCode(constant); + if (constant.isCompressed()) { + masm.setw(0, asRegister(result), true); + } else { + masm.setx(0, asRegister(result), true); + } + } + + @Override + public AllocatableValue getResult() { + return result; + } + + @Override + public Constant getConstant() { + return constant; + } + } + + public static class LoadHotSpotObjectConstantFromTable extends SPARCLIRInstruction implements SPARCTailDelayedLIRInstruction { + public static final LIRInstructionClass<LoadHotSpotObjectConstantFromTable> TYPE = LIRInstructionClass.create(LoadHotSpotObjectConstantFromTable.class); + + public static final SizeEstimate SIZE = SizeEstimate.create(2, 8); + private final HotSpotConstant constant; + @Use({REG}) private AllocatableValue constantTableBase; + @Def({REG, STACK}) AllocatableValue result; + + public LoadHotSpotObjectConstantFromTable(HotSpotConstant constant, AllocatableValue result, AllocatableValue constantTableBase) { + super(TYPE, SIZE); + this.constant = constant; + this.result = result; + this.constantTableBase = constantTableBase; + } + + @Override + protected void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + try (ScratchRegister scratch = masm.getScratchRegister()) { + boolean isStack = ValueUtil.isStackSlot(result); + Register register; + if (isStack) { + register = scratch.getRegister(); + } else { + register = asRegister(result); + } + int bytes = result.getPlatformKind().getSizeInBytes(); + loadFromConstantTable(crb, masm, bytes, asRegister(constantTableBase), constant, register, SPARCDelayedControlTransfer.DUMMY); + if (isStack) { + masm.st(register, (SPARCAddress) crb.asAddress(result), bytes); + } + } + } + } + public static final class CompressPointer extends SPARCLIRInstruction { public static final LIRInstructionClass<CompressPointer> TYPE = LIRInstructionClass.create(CompressPointer.class); public static final SizeEstimate SIZE = SizeEstimate.create(5);
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,22 +23,23 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.hotspot.HotSpotBackend.EXCEPTION_HANDLER_IN_CALLER; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import static jdk.internal.jvmci.sparc.SPARC.o7; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARCKind; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARC.o7; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.gen.DebugInfoBuilder; import com.oracle.graal.compiler.sparc.SPARCNodeLIRBuilder; +import com.oracle.graal.compiler.sparc.SPARCNodeMatchRules; import com.oracle.graal.debug.Debug; import com.oracle.graal.hotspot.HotSpotDebugInfoBuilder; import com.oracle.graal.hotspot.HotSpotLockStack; @@ -61,8 +62,8 @@ public class SPARCHotSpotNodeLIRBuilder extends SPARCNodeLIRBuilder implements HotSpotNodeLIRBuilder { - public SPARCHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { - super(graph, lirGen); + public SPARCHotSpotNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen, SPARCNodeMatchRules nodeMatchRules) { + super(graph, lirGen, nodeMatchRules); assert gen instanceof SPARCHotSpotLIRGenerator; assert getDebugInfoBuilder() instanceof HotSpotDebugInfoBuilder; ((SPARCHotSpotLIRGenerator) gen).setLockStack(((HotSpotDebugInfoBuilder) getDebugInfoBuilder()).lockStack()); @@ -70,7 +71,7 @@ @Override protected DebugInfoBuilder createDebugInfoBuilder(StructuredGraph graph, NodeValueMap nodeValueMap) { - HotSpotLockStack lockStack = new HotSpotLockStack(gen.getResult().getFrameMapBuilder(), LIRKind.value(SPARCKind.DWORD)); + HotSpotLockStack lockStack = new HotSpotLockStack(gen.getResult().getFrameMapBuilder(), LIRKind.value(SPARCKind.XWORD)); return new HotSpotDebugInfoBuilder(nodeValueMap, lockStack); }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotPatchReturnAddressOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotPatchReturnAddressOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.i7; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.i7; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; @@ -53,7 +53,7 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - Register addrRegister = asRegister(address, DWORD); + Register addrRegister = asRegister(address, XWORD); masm.sub(addrRegister, SPARCAssembler.PC_RETURN_OFFSET, i7); } }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotPushInterpreterFrameOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotPushInterpreterFrameOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,22 +23,22 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.i0; -import static jdk.internal.jvmci.sparc.SPARC.i1; -import static jdk.internal.jvmci.sparc.SPARC.i2; -import static jdk.internal.jvmci.sparc.SPARC.i3; -import static jdk.internal.jvmci.sparc.SPARC.i4; -import static jdk.internal.jvmci.sparc.SPARC.i7; -import static jdk.internal.jvmci.sparc.SPARC.o0; -import static jdk.internal.jvmci.sparc.SPARC.o1; -import static jdk.internal.jvmci.sparc.SPARC.o2; -import static jdk.internal.jvmci.sparc.SPARC.o3; -import static jdk.internal.jvmci.sparc.SPARC.o4; -import static jdk.internal.jvmci.sparc.SPARC.o5; -import static jdk.internal.jvmci.sparc.SPARC.sp; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.i1; +import static jdk.vm.ci.sparc.SPARC.i2; +import static jdk.vm.ci.sparc.SPARC.i3; +import static jdk.vm.ci.sparc.SPARC.i4; +import static jdk.vm.ci.sparc.SPARC.i7; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import static jdk.vm.ci.sparc.SPARC.o2; +import static jdk.vm.ci.sparc.SPARC.o3; +import static jdk.vm.ci.sparc.SPARC.o4; +import static jdk.vm.ci.sparc.SPARC.o5; +import static jdk.vm.ci.sparc.SPARC.sp; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotRegisterAllocationConfig.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2015, 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.hotspot.sparc; + +import static jdk.vm.ci.sparc.SPARC.d32; +import static jdk.vm.ci.sparc.SPARC.d34; +import static jdk.vm.ci.sparc.SPARC.d36; +import static jdk.vm.ci.sparc.SPARC.d38; +import static jdk.vm.ci.sparc.SPARC.d40; +import static jdk.vm.ci.sparc.SPARC.d42; +import static jdk.vm.ci.sparc.SPARC.d44; +import static jdk.vm.ci.sparc.SPARC.d46; +import static jdk.vm.ci.sparc.SPARC.d48; +import static jdk.vm.ci.sparc.SPARC.d50; +import static jdk.vm.ci.sparc.SPARC.d52; +import static jdk.vm.ci.sparc.SPARC.d54; +import static jdk.vm.ci.sparc.SPARC.d56; +import static jdk.vm.ci.sparc.SPARC.d58; +import static jdk.vm.ci.sparc.SPARC.d60; +import static jdk.vm.ci.sparc.SPARC.d62; +import static jdk.vm.ci.sparc.SPARC.f10; +import static jdk.vm.ci.sparc.SPARC.f11; +import static jdk.vm.ci.sparc.SPARC.f12; +import static jdk.vm.ci.sparc.SPARC.f13; +import static jdk.vm.ci.sparc.SPARC.f14; +import static jdk.vm.ci.sparc.SPARC.f15; +import static jdk.vm.ci.sparc.SPARC.f16; +import static jdk.vm.ci.sparc.SPARC.f17; +import static jdk.vm.ci.sparc.SPARC.f18; +import static jdk.vm.ci.sparc.SPARC.f19; +import static jdk.vm.ci.sparc.SPARC.f20; +import static jdk.vm.ci.sparc.SPARC.f21; +import static jdk.vm.ci.sparc.SPARC.f22; +import static jdk.vm.ci.sparc.SPARC.f23; +import static jdk.vm.ci.sparc.SPARC.f24; +import static jdk.vm.ci.sparc.SPARC.f25; +import static jdk.vm.ci.sparc.SPARC.f26; +import static jdk.vm.ci.sparc.SPARC.f27; +import static jdk.vm.ci.sparc.SPARC.f28; +import static jdk.vm.ci.sparc.SPARC.f29; +import static jdk.vm.ci.sparc.SPARC.f30; +import static jdk.vm.ci.sparc.SPARC.f31; +import static jdk.vm.ci.sparc.SPARC.f8; +import static jdk.vm.ci.sparc.SPARC.f9; +import static jdk.vm.ci.sparc.SPARC.g1; +import static jdk.vm.ci.sparc.SPARC.g4; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.i1; +import static jdk.vm.ci.sparc.SPARC.i2; +import static jdk.vm.ci.sparc.SPARC.i3; +import static jdk.vm.ci.sparc.SPARC.i4; +import static jdk.vm.ci.sparc.SPARC.i5; +import static jdk.vm.ci.sparc.SPARC.l0; +import static jdk.vm.ci.sparc.SPARC.l1; +import static jdk.vm.ci.sparc.SPARC.l2; +import static jdk.vm.ci.sparc.SPARC.l3; +import static jdk.vm.ci.sparc.SPARC.l4; +import static jdk.vm.ci.sparc.SPARC.l5; +import static jdk.vm.ci.sparc.SPARC.l6; +import static jdk.vm.ci.sparc.SPARC.l7; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import static jdk.vm.ci.sparc.SPARC.o2; +import static jdk.vm.ci.sparc.SPARC.o3; +import static jdk.vm.ci.sparc.SPARC.o4; +import static jdk.vm.ci.sparc.SPARC.o5; + +import java.util.ArrayList; +import java.util.BitSet; + +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; + +import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; + +public class SPARCHotSpotRegisterAllocationConfig extends RegisterAllocationConfig { + + // @formatter:off + static final Register[] registerAllocationOrder = { + g1, g4, g5, + o0, o1, o2, o3, o4, o5, /*o6, o7,*/ + l0, l1, l2, l3, l4, l5, l6, l7, + i0, i1, i2, i3, i4, i5, /*i6,*/ /*i7,*/ + // f0, f1, f2, f3, f4, f5, f6, f7 + f8, f9, f10, f11, f12, f13, f14, f15, + f16, f17, f18, f19, f20, f21, f22, f23, + f24, f25, f26, f27, f28, f29, f30, f31, + d32, d34, d36, d38, d40, d42, d44, d46, + d48, d50, d52, d54, d56, d58, d60, d62 + }; + // @formatter:on + + public SPARCHotSpotRegisterAllocationConfig(RegisterConfig registerConfig) { + super(registerConfig); + } + + @Override + protected Register[] initAllocatable(Register[] registers) { + BitSet regMap = new BitSet(registerConfig.getAllocatableRegisters().length); + for (Register reg : registers) { + regMap.set(reg.number); + } + + ArrayList<Register> allocatableRegisters = new ArrayList<>(registers.length); + for (Register reg : registerAllocationOrder) { + if (regMap.get(reg.number)) { + allocatableRegisters.add(reg); + } + } + + return super.initAllocatable(allocatableRegisters.toArray(new Register[allocatableRegisters.size()])); + } + + @Override + protected AllocatableRegisters createAllocatableRegisters(Register[] registers) { + int min = Integer.MAX_VALUE; + int max = Integer.MIN_VALUE; + for (Register reg : registers) { + int number = reg.number; + if (number < min) { + min = number; + } + if (number > max) { + max = number; + } + } + assert min < max; + return new AllocatableRegisters(registers, min, max); + } +}
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotReturnOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotReturnOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.ILLEGAL; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,17 +22,16 @@ */ package com.oracle.graal.hotspot.sparc; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import jdk.internal.jvmci.code.InfopointReason; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.g0; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LIRInstructionClass; import com.oracle.graal.lir.Opcode; @@ -89,7 +88,7 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { - new Setx(config.safepointPollingAddress, ValueUtil.asRegister(result)).emit(masm); + masm.setx(config.safepointPollingAddress, ValueUtil.asRegister(result), false); } } }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotStrategySwitchOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotStrategySwitchOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,18 +23,18 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.asm.sparc.SPARCAssembler.CBCOND; +import static com.oracle.graal.asm.sparc.SPARCAssembler.INSTRUCTION_SIZE; import static com.oracle.graal.asm.sparc.SPARCAssembler.Annul.ANNUL; import static com.oracle.graal.asm.sparc.SPARCAssembler.BranchPredict.PREDICT_TAKEN; import static com.oracle.graal.lir.sparc.SPARCMove.loadFromConstantTable; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARC.CPUFeature; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.g0; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC.CPUFeature; import com.oracle.graal.asm.Assembler.LabelHint; import com.oracle.graal.asm.Label; @@ -70,13 +70,12 @@ LabelHint hint = requestHint(masm, target); // Load constant takes one instruction - int cbCondPosition = masm.position() + SPARC.INSTRUCTION_SIZE; + int cbCondPosition = masm.position() + INSTRUCTION_SIZE; boolean canUseShortBranch = masm.hasFeature(CPUFeature.CBCOND) && SPARCControlFlow.isShortBranch(masm, cbCondPosition, hint, target); Register scratchRegister = asRegister(scratch); final int byteCount = constant.isCompressed() ? 4 : 8; - Runnable recordReference = () -> crb.recordDataReferenceInCode(constant, byteCount); - loadFromConstantTable(crb, masm, byteCount, asRegister(constantTableBase), scratchRegister, SPARCDelayedControlTransfer.DUMMY, recordReference); + loadFromConstantTable(crb, masm, byteCount, asRegister(constantTableBase), constant, scratchRegister, SPARCDelayedControlTransfer.DUMMY); if (canUseShortBranch) { CBCOND.emit(masm, conditionFlag, conditionCode == CC.Xcc, keyRegister, scratchRegister, target);
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotUnwindOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotUnwindOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,14 +24,14 @@ import static com.oracle.graal.hotspot.HotSpotBackend.UNWIND_EXCEPTION_TO_CALLER; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import static jdk.internal.jvmci.sparc.SPARC.i0; -import static jdk.internal.jvmci.sparc.SPARC.o0; -import static jdk.internal.jvmci.sparc.SPARC.o7; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARC.i0; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o7; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotspotDirectStaticCallOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotspotDirectStaticCallOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.sparc; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRFrameState;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotspotDirectVirtualCallOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotspotDirectVirtualCallOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,13 @@ */ package com.oracle.graal.hotspot.sparc; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.sparc.SPARC.g5; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LIRInstructionClass; import com.oracle.graal.lir.Opcode; @@ -62,6 +61,6 @@ // instruction that loads the Klass from the inline cache. crb.recordMark(invokeKind == InvokeKind.Virtual ? config.MARKID_INVOKEVIRTUAL : config.MARKID_INVOKEINTERFACE); Register scratchRegister = g5; - new Setx(config.nonOopBits, scratchRegister, true).emit(masm); + masm.setx(config.nonOopBits, scratchRegister, true); } }
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCIndirectCallOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCIndirectCallOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,12 +23,12 @@ package com.oracle.graal.hotspot.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.g5; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRFrameState;
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCUncommonTrapStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCUncommonTrapStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,19 +22,20 @@ */ package com.oracle.graal.hotspot.sparc; -import static jdk.internal.jvmci.sparc.SPARC.g1; -import static jdk.internal.jvmci.sparc.SPARC.g3; -import static jdk.internal.jvmci.sparc.SPARC.g4; -import static jdk.internal.jvmci.sparc.SPARC.g5; -import static jdk.internal.jvmci.sparc.SPARC.o0; -import static jdk.internal.jvmci.sparc.SPARC.o1; -import static jdk.internal.jvmci.sparc.SPARC.o2; -import static jdk.internal.jvmci.sparc.SPARC.o3; -import static jdk.internal.jvmci.sparc.SPARC.o4; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.sparc.SPARCHotSpotRegisterConfig; +import static jdk.vm.ci.sparc.SPARC.g1; +import static jdk.vm.ci.sparc.SPARC.g3; +import static jdk.vm.ci.sparc.SPARC.g4; +import static jdk.vm.ci.sparc.SPARC.g5; +import static jdk.vm.ci.sparc.SPARC.o0; +import static jdk.vm.ci.sparc.SPARC.o1; +import static jdk.vm.ci.sparc.SPARC.o2; +import static jdk.vm.ci.sparc.SPARC.o3; +import static jdk.vm.ci.sparc.SPARC.o4; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.sparc.SPARCHotSpotRegisterConfig; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage; import com.oracle.graal.hotspot.meta.HotSpotProviders; @@ -44,11 +45,11 @@ private RegisterConfig registerConfig; - public SPARCUncommonTrapStub(HotSpotProviders providers, TargetDescription target, HotSpotForeignCallLinkage linkage) { + public SPARCUncommonTrapStub(HotSpotProviders providers, TargetDescription target, HotSpotForeignCallLinkage linkage, HotSpotVMConfig config) { super(providers, target, linkage); // This is basically the maximum we can spare. All other G and O register are used. Register[] allocatable = new Register[]{g1, g3, g4, g5, o0, o1, o2, o3, o4}; - registerConfig = new SPARCHotSpotRegisterConfig(target, allocatable); + registerConfig = new SPARCHotSpotRegisterConfig(target.arch, allocatable, config); } @Override
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/AheadOfTimeCompilationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,22 +26,22 @@ import static com.oracle.graal.compiler.GraalCompiler.getProfilingInfo; import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; import static com.oracle.graal.nodes.ConstantNode.getConstantNodes; -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.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.test.GraalCompilerTest; import com.oracle.graal.graph.iterators.NodeIterable;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ArrayCopyIntrinsificationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ArrayCopyIntrinsificationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,9 +26,9 @@ import java.util.ArrayList; import java.util.HashMap; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.test; -import static jdk.internal.jvmci.compiler.Compiler.ExitVMOnException; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import static com.oracle.graal.compiler.GraalCompilerOptions.ExitVMOnException; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; import org.junit.Test; @@ -42,10 +42,8 @@ public void testRtJar() throws Throwable { boolean originalSetting = ExitVMOnException.getValue(); // Compile a couple classes in rt.jar - String file = System.getProperty("java.home") + "/lib/rt.jar"; HotSpotJVMCIRuntimeProvider runtime = HotSpotJVMCIRuntime.runtime(); - new CompileTheWorld(runtime, (HotSpotGraalCompiler) runtime.getCompiler(), file, new Config(null), 1, 5, null, null, false).compile(); + new CompileTheWorld(runtime, (HotSpotGraalCompiler) runtime.getCompiler(), CompileTheWorld.SUN_BOOT_CLASS_PATH, 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/CompressedOopTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompressedOopTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,8 +31,8 @@ import java.util.List; import java.util.concurrent.atomic.AtomicReference; -import jdk.internal.jvmci.hotspot.HotSpotInstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotInstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ConstantPoolSubstitutionsTests.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ConstantPoolSubstitutionsTests.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,6 @@ import org.junit.Test; -import sun.misc.SharedSecrets; -import sun.reflect.ConstantPool; - import com.oracle.graal.compiler.test.GraalCompilerTest; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope; @@ -36,6 +33,8 @@ import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; +import sun.reflect.ConstantPool; + public class ConstantPoolSubstitutionsTests extends GraalCompilerTest { @SuppressWarnings("try") @@ -60,9 +59,22 @@ return graph; } + private static ConstantPool getConstantPoolForObject() { + String javaVersion = System.getProperty("java.specification.version"); + String miscPackage = javaVersion.compareTo("1.9") < 0 ? "sun.misc" : "jdk.internal.misc"; + try { + Class<?> sharedSecretsClass = Class.forName(miscPackage + ".SharedSecrets"); + Class<?> javaLangAccessClass = Class.forName(miscPackage + ".JavaLangAccess"); + Object jla = sharedSecretsClass.getDeclaredMethod("getJavaLangAccess").invoke(null); + return (ConstantPool) javaLangAccessClass.getDeclaredMethod("getConstantPool", Class.class).invoke(jla, Object.class); + } catch (Exception e) { + throw new AssertionError(e); + } + } + @Test public void testGetSize() { - ConstantPool cp = SharedSecrets.getJavaLangAccess().getConstantPool(Object.class); + ConstantPool cp = getConstantPoolForObject(); test("getSize", cp); }
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.hotspot.test; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import org.junit.Assume; import org.junit.Before;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ExplicitExceptionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ExplicitExceptionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.test; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ForeignCallDeoptimizeTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/ForeignCallDeoptimizeTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -26,7 +26,7 @@ import com.oracle.graal.api.replacements.ClassSubstitution; import com.oracle.graal.api.replacements.MethodSubstitution; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.test.GraalCompilerTest; import com.oracle.graal.graph.Node.ConstantNodeParameter;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotCryptoSubstitutionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotCryptoSubstitutionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ package com.oracle.graal.hotspot.test; import static com.oracle.graal.graphbuilderconf.IntrinsicContext.CompilationContext.ROOT_COMPILATION; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -37,9 +37,9 @@ import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test; @@ -47,6 +47,7 @@ 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.HotSpotGraphBuilderPlugins; import com.oracle.graal.hotspot.meta.HotSpotProviders; import com.oracle.graal.java.GraphBuilderPhase; import com.oracle.graal.nodes.StructuredGraph; @@ -89,7 +90,7 @@ @Test public void testAESCryptIntrinsics() throws Exception { - if (compileAndInstall("com.sun.crypto.provider.AESCrypt", "encryptBlock", "decryptBlock")) { + if (compileAndInstall("com.sun.crypto.provider.AESCrypt", HotSpotGraphBuilderPlugins.aesEncryptName, HotSpotGraphBuilderPlugins.aesDecryptName)) { ByteArrayOutputStream actual = new ByteArrayOutputStream(); actual.write(runEncryptDecrypt(aesKey, "AES/CBC/NoPadding")); actual.write(runEncryptDecrypt(aesKey, "AES/CBC/PKCS5Padding")); @@ -99,7 +100,7 @@ @Test public void testCipherBlockChainingIntrinsics() throws Exception { - if (compileAndInstall("com.sun.crypto.provider.CipherBlockChaining", "encrypt", "decrypt")) { + if (compileAndInstall("com.sun.crypto.provider.CipherBlockChaining", HotSpotGraphBuilderPlugins.cbcEncryptName, HotSpotGraphBuilderPlugins.cbcDecryptName)) { ByteArrayOutputStream actual = new ByteArrayOutputStream(); actual.write(runEncryptDecrypt(aesKey, "AES/CBC/NoPadding")); actual.write(runEncryptDecrypt(aesKey, "AES/CBC/PKCS5Padding"));
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotMonitorValueTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotMonitorValueTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,14 +30,14 @@ import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.Call; -import jdk.internal.jvmci.code.CompilationResult.Infopoint; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.StackLockValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.Call; +import jdk.vm.ci.code.CompilationResult.Infopoint; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.StackLockValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNmethodTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNmethodTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.test; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.hotspot.HotSpotNmethod; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.hotspot.HotSpotNmethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotResolvedJavaFieldTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotResolvedJavaFieldTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import java.lang.reflect.Field; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaField; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ModifiersProvider; -import jdk.internal.jvmci.meta.ResolvedJavaField; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaField; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ModifiersProvider; +import jdk.vm.ci.meta.ResolvedJavaField; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotResolvedObjectTypeTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotResolvedObjectTypeTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.hotspot.test; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.PrimitiveConstant; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/InstalledCodeExecuteHelperTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.test; import static java.lang.reflect.Modifier.isStatic; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.hotspot.HotSpotInstalledCode; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.hotspot.HotSpotInstalledCode; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/JVMCIErrorTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2015, 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.hotspot.test; + +import java.util.function.Consumer; + +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.ConstantReference; +import jdk.vm.ci.code.CompilationResult.DataPatch; +import jdk.vm.ci.code.CompilationResult.DataSectionReference; +import jdk.vm.ci.code.CompilationResult.Infopoint; +import jdk.vm.ci.code.CompilationResult.Reference; +import jdk.vm.ci.code.DataSection.Data; +import jdk.vm.ci.code.DataSection.DataBuilder; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotConstant; +import jdk.vm.ci.meta.Assumptions.Assumption; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.VMConstant; + +import org.junit.Test; + +import com.oracle.graal.compiler.test.GraalCompilerTest; + +public class JVMCIErrorTest extends GraalCompilerTest { + + public static void testMethod() { + } + + private void test(Consumer<CompilationResult> modify) { + ResolvedJavaMethod method = getResolvedJavaMethod("testMethod"); + CompilationResult compResult = compile(method, null); + + modify.accept(compResult); + + getCodeCache().addCode(method, compResult, null, null); + } + + @Test(expected = JVMCIError.class) + public void testInvalidAssumption() { + test(r -> r.setAssumptions(new Assumption[]{new InvalidAssumption()})); + } + + private static class InvalidAssumption extends Assumption { + } + + @Test(expected = JVMCIError.class) + public void testInvalidAlignment() { + test(r -> r.getDataSection().insertData(new Data(7, 1, DataBuilder.zero(1)))); + } + + @Test(expected = JVMCIError.class) + public void testInvalidDataSectionReference() { + test(r -> { + DataSectionReference ref = r.getDataSection().insertData(new Data(1, 1, DataBuilder.zero(1))); + Data data = new Data(1, 1, (buffer, patch) -> { + patch.accept(new DataPatch(buffer.position(), ref)); + buffer.put((byte) 0); + }); + r.getDataSection().insertData(data); + }); + } + + @Test(expected = JVMCIError.class) + public void testInvalidNarrowMethodInDataSection() { + test(r -> { + ResolvedJavaMethod method = getResolvedJavaMethod("testMethod"); + HotSpotConstant c = (HotSpotConstant) method.getEncoding(); + Data data = new Data(4, 4, (buffer, patch) -> { + patch.accept(new DataPatch(buffer.position(), new ConstantReference((VMConstant) c.compress()))); + buffer.putInt(0); + }); + r.getDataSection().insertData(data); + }); + } + + @Test(expected = JVMCIError.class) + public void testInvalidConstantInDataSection() { + test(r -> { + Data data = new Data(1, 1, (buffer, patch) -> { + patch.accept(new DataPatch(buffer.position(), new ConstantReference(new InvalidVMConstant()))); + }); + r.getDataSection().insertData(data); + }); + } + + @Test(expected = JVMCIError.class) + public void testInvalidConstantInCode() { + test(r -> r.recordDataPatch(0, new ConstantReference(new InvalidVMConstant()))); + } + + private static class InvalidVMConstant implements VMConstant { + + public boolean isDefaultForKind() { + return false; + } + + public String toValueString() { + return null; + } + } + + @Test(expected = JVMCIError.class) + public void testInvalidReference() { + test(r -> r.recordDataPatch(0, new InvalidReference())); + } + + private static class InvalidReference extends Reference { + + @Override + public int hashCode() { + return 0; + } + + @Override + public boolean equals(Object obj) { + return false; + } + } + + @Test(expected = JVMCIError.class) + public void testOutOfBoundsDataSectionReference() { + test(r -> { + DataSectionReference ref = new DataSectionReference(); + ref.setOffset(0x1000); + r.recordDataPatch(0, ref); + }); + } + + @Test(expected = JVMCIError.class) + public void testInvalidMark() { + test(r -> r.recordMark(0, new Object())); + } + + @Test(expected = JVMCIError.class) + public void testInvalidMarkInt() { + test(r -> r.recordMark(0, -1)); + } + + @Test(expected = JVMCIError.class) + public void testUnknownInfopointReason() { + test(r -> r.addInfopoint(new Infopoint(0, null, InfopointReason.UNKNOWN))); + } + + @Test(expected = JVMCIError.class) + public void testInfopointMissingDebugInfo() { + test(r -> r.addInfopoint(new Infopoint(0, null, InfopointReason.METHOD_START))); + } + + @Test(expected = JVMCIError.class) + public void testSafepointMissingDebugInfo() { + test(r -> r.addInfopoint(new Infopoint(0, null, InfopointReason.SAFEPOINT))); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/JVMCIInfopointErrorTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,335 @@ +/* + * Copyright (c) 2015, 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.hotspot.test; + +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; +import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; + +import java.util.function.Consumer; + +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.code.VirtualObject; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Value; + +import org.junit.Test; + +import com.oracle.graal.compiler.common.type.StampFactory; +import com.oracle.graal.compiler.test.GraalCompilerTest; +import com.oracle.graal.debug.Debug; +import com.oracle.graal.debug.DebugConfigScope; +import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.lir.FullInfopointOp; +import com.oracle.graal.lir.LIRFrameState; +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.DeoptimizingFixedWithNextNode; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; + +public class JVMCIInfopointErrorTest extends GraalCompilerTest { + + private static class ValueDef extends LIRInstruction { + private static final LIRInstructionClass<ValueDef> TYPE = LIRInstructionClass.create(ValueDef.class); + + @Def({REG, STACK}) AllocatableValue value; + + public ValueDef(AllocatableValue value) { + super(TYPE); + this.value = value; + } + + @Override + public void emitCode(CompilationResultBuilder crb) { + } + } + + private static class ValueUse extends LIRInstruction { + private static final LIRInstructionClass<ValueUse> TYPE = LIRInstructionClass.create(ValueUse.class); + + @Use({REG, STACK}) AllocatableValue value; + + public ValueUse(AllocatableValue value) { + super(TYPE); + this.value = value; + } + + @Override + public void emitCode(CompilationResultBuilder crb) { + } + } + + @NodeInfo + private static class TestNode extends DeoptimizingFixedWithNextNode implements LIRLowerable { + private static final NodeClass<TestNode> TYPE = NodeClass.create(TestNode.class); + + private final TestSpec spec; + + public TestNode(TestSpec spec) { + super(TYPE, StampFactory.forVoid()); + this.spec = spec; + } + + public boolean canDeoptimize() { + return true; + } + + public void generate(NodeLIRBuilderTool gen) { + LIRGeneratorTool tool = gen.getLIRGeneratorTool(); + LIRFrameState state = gen.state(this); + spec.spec(tool, state, st -> { + tool.append(new FullInfopointOp(st, InfopointReason.SAFEPOINT)); + }); + } + } + + @FunctionalInterface + private interface TestSpec { + void spec(LIRGeneratorTool tool, LIRFrameState state, Consumer<LIRFrameState> safepoint); + } + + public static void testMethod() { + } + + private void test(TestSpec spec) { + ResolvedJavaMethod method = getResolvedJavaMethod("testMethod"); + + StructuredGraph graph = parseForCompile(method); + TestNode test = graph.add(new TestNode(spec)); + graph.addAfterFixed(graph.start(), test); + + CompilationResult compResult = compile(method, graph); + getCodeCache().addCode(method, compResult, null, null); + } + + @Test(expected = JVMCIError.class) + public void testInvalidShortOop() { + test((tool, state, safepoint) -> { + PlatformKind kind = tool.target().arch.getPlatformKind(JavaKind.Short); + LIRKind lirKind = LIRKind.reference(kind); + + Variable var = tool.newVariable(lirKind); + tool.append(new ValueDef(var)); + safepoint.accept(state); + tool.append(new ValueUse(var)); + }); + } + + @Test(expected = JVMCIError.class) + public void testInvalidShortDerivedOop() { + test((tool, state, safepoint) -> { + Variable baseOop = tool.newVariable(tool.target().getLIRKind(JavaKind.Object)); + tool.append(new ValueDef(baseOop)); + + PlatformKind kind = tool.target().arch.getPlatformKind(JavaKind.Short); + LIRKind lirKind = LIRKind.derivedReference(kind, baseOop); + + Variable var = tool.newVariable(lirKind); + tool.append(new ValueDef(var)); + safepoint.accept(state); + tool.append(new ValueUse(var)); + }); + } + + private static LIRFrameState modifyTopFrame(LIRFrameState state, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks) { + return modifyTopFrame(state, null, values, slotKinds, locals, stack, locks); + } + + private static LIRFrameState modifyTopFrame(LIRFrameState state, VirtualObject[] vobj, JavaValue[] values, JavaKind[] slotKinds, int locals, int stack, int locks) { + BytecodeFrame top = state.topFrame; + top = new BytecodeFrame(top.caller(), top.getMethod(), top.getBCI(), top.rethrowException, top.duringCall, values, slotKinds, locals, stack, locks); + return new LIRFrameState(top, vobj, state.exceptionEdge); + } + + @Test(expected = JVMCIError.class) + public void testUnexpectedScopeValuesLength() { + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{JavaConstant.FALSE}, new JavaKind[0], 0, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testUnexpectedScopeSlotKindsLength() { + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[0], new JavaKind[]{JavaKind.Boolean}, 0, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testWrongMonitorType() { + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{JavaConstant.INT_0}, new JavaKind[]{}, 0, 0, 1); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testUnexpectedIllegalValue() { + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{Value.ILLEGAL}, new JavaKind[]{JavaKind.Int}, 1, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testUnexpectedTypeInRegister() { + test((tool, state, safepoint) -> { + Variable var = tool.newVariable(tool.target().getLIRKind(JavaKind.Int)); + tool.append(new ValueDef(var)); + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{var}, new JavaKind[]{JavaKind.Illegal}, 1, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testWrongConstantType() { + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{JavaConstant.INT_0}, new JavaKind[]{JavaKind.Object}, 1, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testUnsupportedConstantType() { + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{JavaConstant.forShort((short) 0)}, new JavaKind[]{JavaKind.Short}, 1, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testUnexpectedNull() { + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{JavaConstant.NULL_POINTER}, new JavaKind[]{JavaKind.Int}, 1, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testUnexpectedObject() { + JavaValue wrapped = getSnippetReflection().forObject(this); + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{wrapped}, new JavaKind[]{JavaKind.Int}, 1, 0, 0); + safepoint.accept(newState); + }); + } + + private static class UnknownJavaValue implements JavaValue { + } + + @SuppressWarnings("try") + @Test(expected = Error.class) + public void testUnknownJavaValue() { + try (DebugConfigScope s = Debug.setConfig(Debug.silentConfig())) { + /* + * Expected: either AssertionError or JVMCIError, depending on whether the unit test run + * is with assertions enabled or disabled. + */ + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{new UnknownJavaValue()}, new JavaKind[]{JavaKind.Int}, 1, 0, 0); + safepoint.accept(newState); + }); + } + } + + @Test(expected = Error.class) + public void testMissingIllegalAfterDouble() { + /* + * Expected: either AssertionError or JVMCIError, depending on whether the unit test run is + * with assertions enabled or disabled. + */ + test((tool, state, safepoint) -> { + LIRFrameState newState = modifyTopFrame(state, new JavaValue[]{JavaConstant.DOUBLE_0, JavaConstant.INT_0}, new JavaKind[]{JavaKind.Double, JavaKind.Int}, 2, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testInvalidVirtualObjectId() { + ResolvedJavaType obj = getMetaAccess().lookupJavaType(Object.class); + test((tool, state, safepoint) -> { + VirtualObject o = VirtualObject.get(obj, 5); + o.setValues(new JavaValue[0], new JavaKind[0]); + + safepoint.accept(new LIRFrameState(state.topFrame, new VirtualObject[]{o}, state.exceptionEdge)); + }); + } + + @Test(expected = JVMCIError.class) + public void testDuplicateVirtualObject() { + ResolvedJavaType obj = getMetaAccess().lookupJavaType(Object.class); + test((tool, state, safepoint) -> { + VirtualObject o1 = VirtualObject.get(obj, 0); + o1.setValues(new JavaValue[0], new JavaKind[0]); + + VirtualObject o2 = VirtualObject.get(obj, 0); + o2.setValues(new JavaValue[0], new JavaKind[0]); + + safepoint.accept(new LIRFrameState(state.topFrame, new VirtualObject[]{o1, o2}, state.exceptionEdge)); + }); + } + + @Test(expected = JVMCIError.class) + public void testUnexpectedVirtualObject() { + ResolvedJavaType obj = getMetaAccess().lookupJavaType(Object.class); + test((tool, state, safepoint) -> { + VirtualObject o = VirtualObject.get(obj, 0); + o.setValues(new JavaValue[0], new JavaKind[0]); + + LIRFrameState newState = modifyTopFrame(state, new VirtualObject[]{o}, new JavaValue[]{o}, new JavaKind[]{JavaKind.Int}, 1, 0, 0); + safepoint.accept(newState); + }); + } + + @Test(expected = JVMCIError.class) + public void testUndefinedVirtualObject() { + ResolvedJavaType obj = getMetaAccess().lookupJavaType(Object.class); + test((tool, state, safepoint) -> { + VirtualObject o0 = VirtualObject.get(obj, 0); + o0.setValues(new JavaValue[0], new JavaKind[0]); + + VirtualObject o1 = VirtualObject.get(obj, 1); + o1.setValues(new JavaValue[0], new JavaKind[0]); + + LIRFrameState newState = modifyTopFrame(state, new VirtualObject[]{o0}, new JavaValue[]{o1}, new JavaKind[]{JavaKind.Object}, 1, 0, 0); + safepoint.accept(newState); + }); + } +}
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/LoadJavaMirrorWithKlassTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/LoadJavaMirrorWithKlassTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.Objects; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -23,13 +23,13 @@ package com.oracle.graal.hotspot.test; import static com.oracle.graal.debug.internal.MemUseTrackerImpl.getCurrentThreadAllocatedBytes; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.hotspot.HotSpotCompilationRequest; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotCompilationRequest; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.runtime.JVMCICompiler; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.test.AllocSpy; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugEnvironment; @@ -141,7 +141,7 @@ try (MemoryUsageCloseable c = label == null ? null : new MemoryUsageCloseable(label)) { HotSpotJVMCIRuntimeProvider runtime = HotSpotJVMCIRuntime.runtime(); - int entryBCI = Compiler.INVOCATION_ENTRY_BCI; + int entryBCI = JVMCICompiler.INVOCATION_ENTRY_BCI; HotSpotCompilationRequest request = new HotSpotCompilationRequest(method, entryBCI, jvmciEnv); CompilationTask task = new CompilationTask(runtime, (HotSpotGraalCompiler) runtime.getCompiler(), request, false); task.runCompilation(); @@ -159,7 +159,7 @@ long jvmciEnv = 0L; try (AllocSpy as = AllocSpy.open(methodName)) { HotSpotJVMCIRuntimeProvider runtime = HotSpotJVMCIRuntime.runtime(); - HotSpotCompilationRequest request = new HotSpotCompilationRequest(method, Compiler.INVOCATION_ENTRY_BCI, jvmciEnv); + HotSpotCompilationRequest request = new HotSpotCompilationRequest(method, JVMCICompiler.INVOCATION_ENTRY_BCI, jvmciEnv); CompilationTask task = new CompilationTask(runtime, (HotSpotGraalCompiler) runtime.getCompiler(), request, false); task.runCompilation(); }
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,10 +27,10 @@ import java.lang.ref.WeakReference; -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 jdk.vm.ci.hotspot.HotSpotInstalledCode; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierVerificationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierVerificationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.hotspot.test; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.LocationIdentity; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationStatistics.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationStatistics.java Fri Oct 30 20:56:28 2015 +0100 @@ -40,8 +40,8 @@ import java.util.Locale; import java.util.concurrent.ConcurrentLinkedDeque; -import jdk.internal.jvmci.hotspot.HotSpotInstalledCode; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotInstalledCode; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; import com.oracle.graal.debug.Management; import com.sun.management.ThreadMXBean;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,34 +22,34 @@ */ package com.oracle.graal.hotspot; -import static jdk.internal.jvmci.compiler.Compiler.ExitVMOnBailout; -import static jdk.internal.jvmci.compiler.Compiler.ExitVMOnException; -import static jdk.internal.jvmci.compiler.Compiler.PrintAfterCompilation; -import static jdk.internal.jvmci.compiler.Compiler.PrintBailout; -import static jdk.internal.jvmci.compiler.Compiler.PrintCompilation; -import static jdk.internal.jvmci.compiler.Compiler.PrintFilter; -import static jdk.internal.jvmci.compiler.Compiler.PrintStackTraceOnException; +import static com.oracle.graal.compiler.GraalCompilerOptions.ExitVMOnBailout; +import static com.oracle.graal.compiler.GraalCompilerOptions.ExitVMOnException; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintAfterCompilation; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintBailout; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintCompilation; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintFilter; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintStackTraceOnException; import java.lang.reflect.Field; import java.util.concurrent.TimeUnit; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotCompilationRequest; -import jdk.internal.jvmci.hotspot.HotSpotInstalledCode; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.hotspot.HotSpotNmethod; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.hotspot.events.EmptyEventProvider; -import jdk.internal.jvmci.hotspot.events.EventProvider; -import jdk.internal.jvmci.hotspot.events.EventProvider.CompilationEvent; -import jdk.internal.jvmci.hotspot.events.EventProvider.CompilerFailureEvent; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotCompilationRequest; +import jdk.vm.ci.hotspot.HotSpotInstalledCode; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotNmethod; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.events.EmptyEventProvider; +import jdk.vm.ci.hotspot.events.EventProvider; +import jdk.vm.ci.hotspot.events.EventProvider.CompilationEvent; +import jdk.vm.ci.hotspot.events.EventProvider.CompilerFailureEvent; +import jdk.vm.ci.runtime.JVMCICompiler; +import jdk.vm.ci.service.Services; import sun.misc.Unsafe; import com.oracle.graal.debug.Debug; @@ -156,7 +156,7 @@ long startCompilationTime = System.nanoTime(); HotSpotInstalledCode installedCode = null; int entryBCI = getEntryBCI(); - final boolean isOSR = entryBCI != Compiler.INVOCATION_ENTRY_BCI; + final boolean isOSR = entryBCI != JVMCICompiler.INVOCATION_ENTRY_BCI; HotSpotResolvedJavaMethod method = getMethod(); // Log a compilation event. @@ -192,7 +192,7 @@ try (Scope s = Debug.scope("Compiling", new DebugDumpScope(String.valueOf(getId()), true))) { // Begin the compilation event. compilationEvent.begin(); - result = compiler.compile(method, entryBCI, mustRecordMethodInlining(config)); + result = compiler.compile(method, entryBCI); } catch (Throwable e) { throw Debug.handle(e); } finally { @@ -232,10 +232,6 @@ bailout.printStackTrace(TTY.out); } } catch (Throwable t) { - if (PrintStackTraceOnException.getValue() || ExitVMOnException.getValue()) { - t.printStackTrace(TTY.out); - } - // Log a failure event. CompilerFailureEvent event = eventProvider.newCompilerFailureEvent(); if (event.shouldWrite()) { @@ -244,65 +240,67 @@ event.commit(); } - if (ExitVMOnException.getValue()) { - System.exit(-1); - } + handleException(t); } finally { - int compiledBytecodes = 0; - int codeSize = 0; - if (result != null) { - compiledBytecodes = result.getBytecodeSize(); - } - if (installedCode != null) { - codeSize = installedCode.getSize(); - } - CompiledBytecodes.add(compiledBytecodes); + try { + int compiledBytecodes = 0; + int codeSize = 0; + if (result != null) { + compiledBytecodes = result.getBytecodeSize(); + } + if (installedCode != null) { + codeSize = installedCode.getSize(); + } + CompiledBytecodes.add(compiledBytecodes); - // Log a compilation event. - if (compilationEvent.shouldWrite()) { - compilationEvent.setMethod(method.format("%H.%n(%p)")); - compilationEvent.setCompileId(getId()); - compilationEvent.setCompileLevel(config.compilationLevelFullOptimization); - compilationEvent.setSucceeded(result != null && installedCode != null); - compilationEvent.setIsOsr(isOSR); - compilationEvent.setCodeSize(codeSize); - compilationEvent.setInlinedBytes(compiledBytecodes); - compilationEvent.commit(); - } + // Log a compilation event. + if (compilationEvent.shouldWrite()) { + compilationEvent.setMethod(method.format("%H.%n(%p)")); + compilationEvent.setCompileId(getId()); + compilationEvent.setCompileLevel(config.compilationLevelFullOptimization); + compilationEvent.setSucceeded(result != null && installedCode != null); + compilationEvent.setIsOsr(isOSR); + compilationEvent.setCodeSize(codeSize); + compilationEvent.setInlinedBytes(compiledBytecodes); + compilationEvent.commit(); + } - long jvmciEnv = request.getJvmciEnv(); - if (jvmciEnv != 0) { - long ctask = UNSAFE.getAddress(jvmciEnv + config.jvmciEnvTaskOffset); - assert ctask != 0L; - UNSAFE.putInt(ctask + config.compileTaskNumInlinedBytecodesOffset, compiledBytecodes); - } - long compilationTime = System.nanoTime() - startCompilationTime; - if ((config.ciTime || config.ciTimeEach) && installedCode != null) { - long timeUnitsPerSecond = TimeUnit.NANOSECONDS.convert(1, TimeUnit.SECONDS); - final HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) jvmciRuntime.getHostJVMCIBackend().getCodeCache(); - codeCache.notifyCompilationStatistics(getId(), method, entryBCI != Compiler.INVOCATION_ENTRY_BCI, compiledBytecodes, compilationTime, timeUnitsPerSecond, installedCode); + long jvmciEnv = request.getJvmciEnv(); + if (jvmciEnv != 0) { + long ctask = UNSAFE.getAddress(jvmciEnv + config.jvmciEnvTaskOffset); + assert ctask != 0L; + UNSAFE.putInt(ctask + config.compileTaskNumInlinedBytecodesOffset, compiledBytecodes); + } + long compilationTime = System.nanoTime() - startCompilationTime; + if ((config.ciTime || config.ciTimeEach) && installedCode != null) { + long timeUnitsPerSecond = TimeUnit.NANOSECONDS.convert(1, TimeUnit.SECONDS); + final HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) jvmciRuntime.getHostJVMCIBackend().getCodeCache(); + codeCache.notifyCompilationStatistics(getId(), method, entryBCI != JVMCICompiler.INVOCATION_ENTRY_BCI, compiledBytecodes, compilationTime, timeUnitsPerSecond, installedCode); + } + } catch (Throwable t) { + handleException(t); } } } - /** - * Determines whether to disable method inlining recording for the method being compiled. - */ - private boolean mustRecordMethodInlining(HotSpotVMConfig config) { - if (config.ciTime || config.ciTimeEach || CompiledBytecodes.isEnabled()) { - return true; + protected void handleException(Throwable t) { + if (PrintStackTraceOnException.getValue() || ExitVMOnException.getValue()) { + try { + t.printStackTrace(TTY.out); + } catch (Throwable throwable) { + // Don't let an exception here change the other control flow + } } - long jvmciEnv = request.getJvmciEnv(); - if (jvmciEnv == 0 || UNSAFE.getByte(jvmciEnv + config.jvmciEnvJvmtiCanHotswapOrPostBreakpointOffset) != 0) { - return true; + + if (ExitVMOnException.getValue()) { + System.exit(-1); } - return false; } private String getMethodDescription() { HotSpotResolvedJavaMethod method = getMethod(); return String.format("%-6d JVMCI %-70s %-45s %-50s %s", getId(), method.getDeclaringClass().getName(), method.getName(), method.getSignature().toMethodDescriptor(), - getEntryBCI() == Compiler.INVOCATION_ENTRY_BCI ? "" : "(OSR@" + getEntryBCI() + ") "); + getEntryBCI() == JVMCICompiler.INVOCATION_ENTRY_BCI ? "" : "(OSR@" + getEntryBCI() + ") "); } @SuppressWarnings("try") @@ -319,6 +317,6 @@ @Override public String toString() { - return "Compilation[id=" + getId() + ", " + getMethod().format("%H.%n(%p)") + (getEntryBCI() == Compiler.INVOCATION_ENTRY_BCI ? "" : "@" + getEntryBCI()) + "]"; + return "Compilation[id=" + getId() + ", " + getMethod().format("%H.%n(%p)") + (getEntryBCI() == JVMCICompiler.INVOCATION_ENTRY_BCI ? "" : "@" + getEntryBCI()) + "]"; } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,6 +22,9 @@ */ package com.oracle.graal.hotspot; +import static com.oracle.graal.compiler.GraalCompilerOptions.ExitVMOnException; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintBailout; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintStackTraceOnException; import static com.oracle.graal.hotspot.CompileTheWorldOptions.CompileTheWorldClasspath; import static com.oracle.graal.hotspot.CompileTheWorldOptions.CompileTheWorldConfig; import static com.oracle.graal.hotspot.CompileTheWorldOptions.CompileTheWorldExcludeMethodFilter; @@ -29,11 +32,9 @@ import static com.oracle.graal.hotspot.CompileTheWorldOptions.CompileTheWorldStartAt; import static com.oracle.graal.hotspot.CompileTheWorldOptions.CompileTheWorldStopAt; import static com.oracle.graal.hotspot.CompileTheWorldOptions.CompileTheWorldVerbose; -import static jdk.internal.jvmci.compiler.Compiler.ExitVMOnException; -import static jdk.internal.jvmci.compiler.Compiler.PrintBailout; -import static jdk.internal.jvmci.compiler.Compiler.PrintStackTraceOnException; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import java.io.Closeable; import java.io.File; import java.io.IOException; import java.lang.annotation.Annotation; @@ -42,9 +43,16 @@ import java.lang.reflect.Modifier; import java.net.URL; import java.net.URLClassLoader; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; import java.util.HashMap; +import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; @@ -55,21 +63,21 @@ import java.util.jar.JarFile; import java.util.stream.Collectors; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.hotspot.HotSpotCompilationRequest; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ConstantPool; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.options.OptionDescriptor; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; -import jdk.internal.jvmci.options.OptionsParser; -import jdk.internal.jvmci.options.OptionsParser.OptionConsumer; -import jdk.internal.jvmci.runtime.JVMCI; +import jdk.vm.ci.hotspot.HotSpotCompilationRequest; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ConstantPool; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.options.OptionDescriptor; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; +import jdk.vm.ci.options.OptionsParser; +import jdk.vm.ci.options.OptionsParser.OptionConsumer; +import jdk.vm.ci.runtime.JVMCI; +import jdk.vm.ci.runtime.JVMCICompiler; import com.oracle.graal.bytecode.Bytecodes; import com.oracle.graal.compiler.CompilerThreadFactory; @@ -87,8 +95,11 @@ */ public final class CompileTheWorld { + private static final String JAVA_VERSION = System.getProperty("java.specification.version"); + /** - * Magic token to trigger reading files from the boot class path. + * Magic token to trigger reading files from {@code rt.jar} if {@link #JAVA_VERSION} denotes a + * JDK earlier than 9 otherwise from {@code java.base} module. */ public static final String SUN_BOOT_CLASS_PATH = "sun.boot.class.path"; @@ -114,15 +125,19 @@ */ public Config(String options) { if (options != null) { + List<String> optionSettings = new ArrayList<>(); for (String optionSetting : options.split("\\s+|#")) { if (optionSetting.charAt(0) == '-') { - OptionsParser.parseOptionSetting(optionSetting.substring(1) + "=false", this, null); + optionSettings.add(optionSetting.substring(1)); + optionSettings.add("false"); } else if (optionSetting.charAt(0) == '+') { - OptionsParser.parseOptionSetting(optionSetting.substring(1) + "=true", this, null); + optionSettings.add(optionSetting.substring(1)); + optionSettings.add("true"); } else { - OptionsParser.parseOptionSetting(optionSetting, this, null); + OptionsParser.parseOptionSettingTo(optionSetting, optionSettings); } } + OptionsParser.parseOptions(optionSettings.toArray(new String[optionSettings.size()]), this, null, null); } } @@ -144,20 +159,23 @@ private final HotSpotGraalCompiler compiler; /** - * List of Zip/Jar files to compile (see {@link CompileTheWorldOptions#CompileTheWorldClasspath} - * ). + * Class path denoting classes to compile. + * + * @see CompileTheWorldOptions#CompileTheWorldClasspath */ - private final String files; + private final String inputClassPath; /** - * Class index to start compilation at (see - * {@link CompileTheWorldOptions#CompileTheWorldStartAt}). + * Class index to start compilation at. + * + * @see CompileTheWorldOptions#CompileTheWorldStartAt */ private final int startAt; /** - * Class index to stop compilation at (see {@link CompileTheWorldOptions#CompileTheWorldStopAt} - * ). + * Class index to stop compilation at. + * + * @see CompileTheWorldOptions#CompileTheWorldStopAt */ private final int stopAt; @@ -196,7 +214,7 @@ String excludeMethodFilters, boolean verbose) { this.jvmciRuntime = jvmciRuntime; this.compiler = compiler; - this.files = files; + this.inputClassPath = files; this.startAt = startAt; this.stopAt = stopAt; this.methodFilters = methodFilters == null || methodFilters.isEmpty() ? null : MethodFilter.parse(methodFilters); @@ -219,36 +237,37 @@ } /** - * Compiles all methods in all classes in the Zip/Jar archive files in - * {@link CompileTheWorldOptions#CompileTheWorldClasspath}. If - * {@link CompileTheWorldOptions#CompileTheWorldClasspath} contains the magic token - * {@link #SUN_BOOT_CLASS_PATH} passed up from HotSpot we take the files from the boot class - * path. + * Compiles all methods in all classes in {@link #inputClassPath}. If {@link #inputClassPath} + * equals {@link #SUN_BOOT_CLASS_PATH} the boot class path is used. */ public void compile() throws Throwable { // By default only report statistics for the CTW threads themselves if (GraalDebugConfig.Options.DebugValueThreadFilter.hasDefaultValue()) { GraalDebugConfig.Options.DebugValueThreadFilter.setValue("^CompileTheWorld"); } - - if (SUN_BOOT_CLASS_PATH.equals(files)) { + if (SUN_BOOT_CLASS_PATH.equals(inputClassPath)) { final String[] entries = System.getProperty(SUN_BOOT_CLASS_PATH).split(File.pathSeparator); - String bcpFiles = ""; - for (int i = 0; i < entries.length; i++) { - final String entry = entries[i]; - - // We stop at rt.jar, unless it is the first boot class path entry. - if (entry.endsWith("rt.jar") && (i > 0)) { - break; + String bcpEntry = null; + boolean useRtJar = JAVA_VERSION.compareTo("1.9") < 0; + for (int i = 0; i < entries.length && bcpEntry == null; i++) { + String entry = entries[i]; + File entryFile = new File(entry); + if (useRtJar) { + // We stop at rt.jar, unless it is the first boot class path entry. + if (entryFile.getName().endsWith("rt.jar") && entryFile.isFile()) { + bcpEntry = entry; + } + } else { + if (entryFile.getName().endsWith("java.base") && entryFile.isDirectory()) { + bcpEntry = entry; + } else if (entryFile.getName().equals("bootmodules.jimage")) { + bcpEntry = entry; + } } - if (i > 0) { - bcpFiles += File.pathSeparator; - } - bcpFiles += entry; } - compile(bcpFiles); + compile(bcpEntry); } else { - compile(files); + compile(inputClassPath); } } @@ -271,14 +290,180 @@ } /** - * Compiles all methods in all classes in the Zip/Jar files passed. + * Abstraction over different types of class path entries. + */ + abstract static class ClassPathEntry implements Closeable { + final String name; + + public ClassPathEntry(String name) { + this.name = name; + } + + /** + * Creates a {@link ClassLoader} for loading classes from this entry. + */ + public abstract ClassLoader createClassLoader() throws IOException; + + /** + * Gets the list of classes available under this entry. + */ + public abstract List<String> getClassNames() throws IOException; + + @Override + public String toString() { + return name; + } + + public void close() throws IOException { + } + } + + /** + * A class path entry that is a normal file system directory. + */ + static class DirClassPathEntry extends ClassPathEntry { + + private final File dir; + + public DirClassPathEntry(String name) { + super(name); + dir = new File(name); + assert dir.isDirectory(); + } + + @Override + public ClassLoader createClassLoader() throws IOException { + URL url = dir.toURI().toURL(); + return new URLClassLoader(new URL[]{url}); + } + + @Override + public List<String> getClassNames() throws IOException { + List<String> classNames = new ArrayList<>(); + String root = dir.getPath(); + SimpleFileVisitor<Path> visitor = new SimpleFileVisitor<Path>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (attrs.isRegularFile()) { + File path = file.toFile(); + if (path.getName().endsWith(".class")) { + String pathString = path.getPath(); + assert pathString.startsWith(root); + String classFile = pathString.substring(root.length() + 1); + String className = classFile.replace(File.separatorChar, '.'); + classNames.add(className.replace('/', '.').substring(0, className.length() - ".class".length())); + } + } + return super.visitFile(file, attrs); + } + }; + Files.walkFileTree(dir.toPath(), visitor); + return classNames; + } + } + + /** + * A class path entry that is a jar or zip file. + */ + static class JarClassPathEntry extends ClassPathEntry { + + private final JarFile jarFile; + + public JarClassPathEntry(String name) throws IOException { + super(name); + jarFile = new JarFile(name); + } + + @Override + public ClassLoader createClassLoader() throws IOException { + URL url = new URL("jar", "", "file:" + name + "!/"); + return new URLClassLoader(new URL[]{url}); + } + + @Override + public List<String> getClassNames() throws IOException { + Enumeration<JarEntry> e = jarFile.entries(); + List<String> classNames = new ArrayList<>(jarFile.size()); + while (e.hasMoreElements()) { + JarEntry je = e.nextElement(); + if (je.isDirectory() || !je.getName().endsWith(".class")) { + continue; + } + String className = je.getName().substring(0, je.getName().length() - ".class".length()); + classNames.add(className.replace('/', '.')); + } + return classNames; + } + + @Override + public void close() throws IOException { + jarFile.close(); + } + } + + /** + * A class path entry that is a jimage file. + */ + static class ImageClassPathEntry extends ClassPathEntry { + + private final File jimage; + + public ImageClassPathEntry(String name) { + super(name); + jimage = new File(name); + assert jimage.isFile(); + } + + @Override + public ClassLoader createClassLoader() throws IOException { + URL url = jimage.toURI().toURL(); + return new URLClassLoader(new URL[]{url}); + } + + @Override + public List<String> getClassNames() throws IOException { + List<String> classNames = new ArrayList<>(); + String[] entries = readJimageEntries(); + for (String e : entries) { + if (e.endsWith(".class")) { + assert e.charAt(0) == '/' : e; + int endModule = e.indexOf('/', 1); + assert endModule != -1 : e; + // Strip the module prefix and convert to dotted form + String className = e.substring(endModule + 1).replace('/', '.'); + // Strip ".class" suffix + className = className.replace('/', '.').substring(0, className.length() - ".class".length()); + classNames.add(className); + } + } + return classNames; + } + + private String[] readJimageEntries() { + try { + // Use reflection so this can be compiled on JDK8 + Method open = Class.forName("jdk.internal.jimage.BasicImageReader").getDeclaredMethod("open", String.class); + Object reader = open.invoke(null, name); + Method getEntryNames = reader.getClass().getDeclaredMethod("getEntryNames"); + getEntryNames.setAccessible(true); + String[] entries = (String[]) getEntryNames.invoke(reader); + return entries; + } catch (Exception e) { + TTY.println("Error reading entries from " + name + ": " + e); + return new String[0]; + } + } + } + + /** + * Compiles all methods in all classes in a given class path. * - * @param fileList {@link File#pathSeparator} separated list of Zip/Jar files to compile + * @param classPath class path denoting classes to compile * @throws IOException */ @SuppressWarnings("try") - private void compile(String fileList) throws IOException { - final String[] entries = fileList.split(File.pathSeparator); + private void compile(String classPath) throws IOException { + final String[] entries = classPath.split(File.pathSeparator); long start = System.currentTimeMillis(); CompilerThreadFactory factory = new CompilerThreadFactory("CompileTheWorld", new DebugConfigAccess() { @@ -291,10 +476,11 @@ }); try { - // compile dummy method to get compiler initilized outside of the config debug override. + // compile dummy method to get compiler initialized outside of the + // config debug override. HotSpotResolvedJavaMethod dummyMethod = (HotSpotResolvedJavaMethod) JVMCI.getRuntime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod( CompileTheWorld.class.getDeclaredMethod("dummy")); - int entryBCI = Compiler.INVOCATION_ENTRY_BCI; + int entryBCI = JVMCICompiler.INVOCATION_ENTRY_BCI; CompilationTask task = new CompilationTask(jvmciRuntime, compiler, new HotSpotCompilationRequest(dummyMethod, entryBCI, 0L), false); task.runCompilation(); } catch (NoSuchMethodException | SecurityException e1) { @@ -320,11 +506,24 @@ for (int i = 0; i < entries.length; i++) { final String entry = entries[i]; - // For now we only compile all methods in all classes in zip/jar files. - if (!entry.endsWith(".zip") && !entry.endsWith(".jar")) { - println("CompileTheWorld : Skipped classes in " + entry); - println(); - continue; + ClassPathEntry cpe; + if (entry.endsWith(".zip") || entry.endsWith(".jar")) { + cpe = new JarClassPathEntry(entry); + } else if (entry.endsWith(".jimage")) { + assert JAVA_VERSION.compareTo("1.9") >= 0; + if (!new File(entry).isFile()) { + println("CompileTheWorld : Skipped classes in " + entry); + println(); + continue; + } + cpe = new ImageClassPathEntry(entry); + } else { + if (!new File(entry).isDirectory()) { + println("CompileTheWorld : Skipped classes in " + entry); + println(); + continue; + } + cpe = new DirClassPathEntry(entry); } if (methodFilters == null || methodFilters.length == 0) { @@ -339,41 +538,31 @@ } println(); - URL url = new URL("jar", "", "file:" + entry + "!/"); - ClassLoader loader = new URLClassLoader(new URL[]{url}); - - JarFile jarFile = new JarFile(entry); - Enumeration<JarEntry> e = jarFile.entries(); + ClassLoader loader = cpe.createClassLoader(); - while (e.hasMoreElements()) { - JarEntry je = e.nextElement(); - if (je.isDirectory() || !je.getName().endsWith(".class")) { - continue; - } + for (String className : cpe.getClassNames()) { // Are we done? if (classFileCounter >= stopAt) { break; } - String className = je.getName().substring(0, je.getName().length() - ".class".length()); - String dottedClassName = className.replace('/', '.'); classFileCounter++; - if (methodFilters != null && !MethodFilter.matchesClassName(methodFilters, dottedClassName)) { + if (methodFilters != null && !MethodFilter.matchesClassName(methodFilters, className)) { continue; } - if (excludeMethodFilters != null && MethodFilter.matchesClassName(excludeMethodFilters, dottedClassName)) { + if (excludeMethodFilters != null && MethodFilter.matchesClassName(excludeMethodFilters, className)) { continue; } - if (dottedClassName.startsWith("jdk.management.") || dottedClassName.startsWith("jdk.internal.cmm.*")) { + if (className.startsWith("jdk.management.") || className.startsWith("jdk.internal.cmm.*")) { continue; } try { // Load and initialize class - Class<?> javaClass = Class.forName(dottedClassName, true, loader); + Class<?> javaClass = Class.forName(className, true, loader); // Pre-load all classes in the constant pool. try { @@ -411,7 +600,7 @@ t.printStackTrace(); } } - jarFile.close(); + cpe.close(); } } @@ -485,7 +674,7 @@ try { long start = System.currentTimeMillis(); long allocatedAtStart = MemUseTrackerImpl.getCurrentThreadAllocatedBytes(); - int entryBCI = Compiler.INVOCATION_ENTRY_BCI; + int entryBCI = JVMCICompiler.INVOCATION_ENTRY_BCI; HotSpotCompilationRequest request = new HotSpotCompilationRequest(method, entryBCI, 0L); CompilationTask task = new CompilationTask(jvmciRuntime, compiler, request, false); task.runCompilation();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorldOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorldOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; /** * Options related to {@link CompileTheWorld}. @@ -35,7 +35,7 @@ */ public class CompileTheWorldOptions { // @formatter:off - @Option(help = "Compile all methods in all classes on given class path", type = OptionType.Debug) + @Option(help = "Class path denoting methods to compile", type = OptionType.Debug) public static final OptionValue<String> CompileTheWorldClasspath = new OptionValue<>(CompileTheWorld.SUN_BOOT_CLASS_PATH); @Option(help = "Verbose CompileTheWorld operation", type = OptionType.Debug) public static final OptionValue<Boolean> CompileTheWorldVerbose = new OptionValue<>(true);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/DebugValuesPrinter.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/DebugValuesPrinter.java Fri Oct 30 20:56:28 2015 +0100 @@ -33,7 +33,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.debug.TTY; import com.oracle.graal.debug.internal.DebugValue;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/DefaultHotSpotGraalCompilerFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/DefaultHotSpotGraalCompilerFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,14 +24,14 @@ import java.util.IdentityHashMap; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.compiler.CompilerFactory; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.runtime.JVMCICompilerFactory; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.compiler.phases.BasicCompilerConfiguration; import com.oracle.graal.phases.tiers.CompilerConfiguration; -@ServiceProvider(CompilerFactory.class) +@ServiceProvider(JVMCICompilerFactory.class) public class DefaultHotSpotGraalCompilerFactory extends HotSpotGraalCompilerFactory { private static IdentityHashMap<Class<? extends Architecture>, HotSpotBackendFactory> backends = new IdentityHashMap<>();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/EconomyHotSpotGraalCompilerFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/EconomyHotSpotGraalCompilerFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.hotspot; -import jdk.internal.jvmci.compiler.CompilerFactory; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.runtime.JVMCICompilerFactory; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.compiler.phases.EconomyCompilerConfiguration; import com.oracle.graal.phases.tiers.CompilerConfiguration; -@ServiceProvider(CompilerFactory.class) +@ServiceProvider(JVMCICompilerFactory.class) public class EconomyHotSpotGraalCompilerFactory extends DefaultHotSpotGraalCompilerFactory { @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackend.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,17 +29,17 @@ import java.util.Map; import java.util.Set; -import jdk.internal.jvmci.code.DebugInfo; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.DebugInfo; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackendFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackendFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; import com.oracle.graal.phases.tiers.CompilerConfiguration;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCounterOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotCounterOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,18 +24,18 @@ import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.Arrays; import java.util.HashMap; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.NumUtil;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,15 +22,15 @@ */ package com.oracle.graal.hotspot; -import static jdk.internal.jvmci.code.BytecodeFrame.isPlaceholderBci; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.StackLockValue; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.VirtualObject; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaValue; +import static jdk.vm.ci.code.BytecodeFrame.isPlaceholderBci; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.StackLockValue; +import jdk.vm.ci.code.VirtualObject; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaValue; import com.oracle.graal.compiler.gen.DebugInfoBuilder; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.nodes.FrameState; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.spi.NodeValueMap; @@ -57,7 +57,7 @@ if (state.outerFrameState() != null) { lockDepth += state.outerFrameState().nestedLockDepth(); } - StackSlotValue slot = lockStack.makeLockSlot(lockDepth); + VirtualStackSlot slot = lockStack.makeLockSlot(lockDepth); ValueNode lock = state.lockAt(lockIndex); JavaValue object = toJavaValue(lock); boolean eliminated = object instanceof VirtualObject || state.monitorIdAt(lockIndex) == null;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotForeignCallLinkage.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotForeignCallLinkage.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot; -import jdk.internal.jvmci.meta.InvokeTarget; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.InvokeTarget; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.target.Backend;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotForeignCallLinkageImpl.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotForeignCallLinkageImpl.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,24 +23,24 @@ package com.oracle.graal.hotspot; import static com.oracle.graal.hotspot.HotSpotForeignCallLinkage.RegisterEffect.DESTROYS_REGISTERS; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime.runtime; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; import java.util.Set; -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.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 jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotForeignCallTarget; +import jdk.vm.ci.hotspot.HotSpotProxified; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.target.Backend;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompiler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompiler.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,21 +24,22 @@ 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.CompilationRequest; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotCompilationRequest; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -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 static jdk.vm.ci.code.CallingConvention.Type.JavaCallee; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CompilationRequest; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotCompilationRequest; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ProfilingInfo; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.SpeculationLog; +import jdk.vm.ci.runtime.JVMCICompiler; +import com.oracle.graal.api.runtime.GraalJVMCICompiler; import com.oracle.graal.compiler.GraalCompiler; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugConfigScope; @@ -64,7 +65,7 @@ import com.oracle.graal.phases.tiers.HighTierContext; import com.oracle.graal.phases.tiers.Suites; -public class HotSpotGraalCompiler implements Compiler { +public class HotSpotGraalCompiler implements GraalJVMCICompiler { private final HotSpotJVMCIRuntimeProvider jvmciRuntime; private final HotSpotGraalRuntimeProvider graalRuntime; @@ -74,7 +75,8 @@ this.graalRuntime = graalRuntime; } - HotSpotGraalRuntimeProvider getGraalRuntime() { + @Override + public HotSpotGraalRuntimeProvider getGraalRuntime() { return graalRuntime; } @@ -104,10 +106,10 @@ System.exit(0); } - public CompilationResult compile(ResolvedJavaMethod method, int entryBCI, boolean mustRecordMethodInlining) { + public CompilationResult compile(ResolvedJavaMethod method, int entryBCI) { HotSpotBackend backend = graalRuntime.getHostBackend(); HotSpotProviders providers = backend.getProviders(); - final boolean isOSR = entryBCI != Compiler.INVOCATION_ENTRY_BCI; + final boolean isOSR = entryBCI != JVMCICompiler.INVOCATION_ENTRY_BCI; StructuredGraph graph = method.isNative() || isOSR ? null : getIntrinsicGraph(method, providers); if (graph == null) { @@ -116,9 +118,6 @@ speculationLog.collectFailedSpeculations(); } graph = new StructuredGraph(method, entryBCI, AllowAssumptions.from(OptAssumptions.getValue()), speculationLog); - if (!mustRecordMethodInlining) { - graph.disableInlinedMethodRecording(); - } } CallingConvention cc = getCallingConvention(providers.getCodeCache(), Type.JavaCallee, graph.method(), false);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompilerFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompilerFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,21 +22,20 @@ */ package com.oracle.graal.hotspot; -import static jdk.internal.jvmci.inittimer.InitTimer.timer; -import jdk.internal.jvmci.code.Architecture; -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.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.runtime.JVMCIRuntime; -import jdk.internal.jvmci.service.Services; +import static jdk.vm.ci.inittimer.InitTimer.timer; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.inittimer.InitTimer; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.runtime.JVMCICompilerFactory; +import jdk.vm.ci.runtime.JVMCIRuntime; +import jdk.vm.ci.service.Services; import com.oracle.graal.phases.tiers.CompilerConfiguration; -public abstract class HotSpotGraalCompilerFactory implements CompilerFactory { +public abstract class HotSpotGraalCompilerFactory implements JVMCICompilerFactory { static class Options { @@ -69,7 +68,7 @@ @SuppressWarnings("try") @Override - public Compiler createCompiler(JVMCIRuntime runtime) { + public HotSpotGraalCompiler createCompiler(JVMCIRuntime runtime) { HotSpotJVMCIRuntime jvmciRuntime = (HotSpotJVMCIRuntime) runtime; try (InitTimer t = timer("HotSpotGraalRuntime.<init>")) { Lazy.registerBackends(); @@ -82,7 +81,7 @@ @Override public String[] getTrivialPrefixes() { if (Options.CompileGraalWithC1Only.getValue()) { - return new String[]{"jdk/internal/jvmci", "com/oracle/graal"}; + return new String[]{"jdk/vm/ci", "com/oracle/graal"}; } return null; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,23 +28,23 @@ import static com.oracle.graal.debug.GraalDebugConfig.Options.MethodFilter; import static com.oracle.graal.debug.GraalDebugConfig.Options.Verify; import static com.oracle.graal.debug.GraalDebugConfig.areScopedMetricsOrTimersEnabled; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime.runtime; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; -import static jdk.internal.jvmci.inittimer.InitTimer.timer; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; +import static jdk.vm.ci.inittimer.InitTimer.timer; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.stack.StackIntrospection; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotProxified; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.inittimer.InitTimer; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.runtime.JVMCIBackend; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.stack.StackIntrospection; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotProxified; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.inittimer.InitTimer; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.runtime.JVMCIBackend; import com.oracle.graal.api.collections.CollectionsProvider; import com.oracle.graal.api.replacements.SnippetReflectionProvider;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2015, 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.hotspot; - -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.service.ServiceProvider; - -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() { - 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 Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.api.runtime.GraalRuntime; import com.oracle.graal.hotspot.meta.HotSpotProviders;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalVMEventListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalVMEventListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import java.util.ArrayList; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotVMEventListener; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotVMEventListener; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotHostBackend.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,12 +24,12 @@ import static com.oracle.graal.compiler.common.GraalOptions.BootstrapReplacements; import static com.oracle.graal.compiler.common.GraalOptions.Intrinsify; -import static jdk.internal.jvmci.inittimer.InitTimer.timer; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.inittimer.InitTimer; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.service.Services; +import static jdk.vm.ci.inittimer.InitTimer.timer; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.inittimer.InitTimer; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.service.Services; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotInstructionProfiling.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotInstructionProfiling.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,10 +24,10 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.Assembler.InstructionCounter;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,11 @@ */ package com.oracle.graal.hotspot; -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 jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.Value; import com.oracle.graal.hotspot.meta.HotSpotProviders; import com.oracle.graal.hotspot.nodes.DeoptimizationFetchUnrollInfoCallNode; @@ -39,6 +38,7 @@ 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.VirtualStackSlot; import com.oracle.graal.lir.gen.LIRGenerator; import com.oracle.graal.lir.gen.LIRGeneratorTool; @@ -149,7 +149,7 @@ /** * Gets a stack slot for a lock at a given lock nesting depth. */ - StackSlotValue getLockSlot(int lockDepth); + VirtualStackSlot getLockSlot(int lockDepth); HotSpotProviders getProviders();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLockStack.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLockStack.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -26,11 +26,12 @@ import java.util.Arrays; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.lir.LIRInstruction; import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.asm.CompilationResultBuilder; import com.oracle.graal.lir.framemap.FrameMapBuilder; @@ -40,9 +41,9 @@ */ public class HotSpotLockStack extends LIRInstruction { public static final LIRInstructionClass<HotSpotLockStack> TYPE = LIRInstructionClass.create(HotSpotLockStack.class); - private static final StackSlotValue[] EMPTY = new StackSlotValue[0]; + private static final AllocatableValue[] EMPTY = new AllocatableValue[0]; - @Def({STACK}) private StackSlotValue[] locks; + @Def({STACK}) private AllocatableValue[] locks; private final FrameMapBuilder frameMapBuilder; private final LIRKind slotKind; @@ -56,16 +57,16 @@ /** * Gets a stack slot for a lock at a given lock nesting depth, allocating it first if necessary. */ - public StackSlotValue makeLockSlot(int lockDepth) { + public VirtualStackSlot makeLockSlot(int lockDepth) { if (locks == EMPTY) { - locks = new StackSlotValue[lockDepth + 1]; + locks = new AllocatableValue[lockDepth + 1]; } else if (locks.length < lockDepth + 1) { locks = Arrays.copyOf(locks, lockDepth + 1); } if (locks[lockDepth] == null) { locks[lockDepth] = frameMapBuilder.allocateSpillSlot(slotKind); } - return locks[lockDepth]; + return (VirtualStackSlot) locks[lockDepth]; } @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReferenceMapBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReferenceMapBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,20 +23,20 @@ package com.oracle.graal.hotspot; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.ArrayList; -import jdk.internal.jvmci.code.Location; -import jdk.internal.jvmci.code.ReferenceMap; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotReferenceMap; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Location; +import jdk.vm.ci.code.ReferenceMap; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotReferenceMap; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.Variable;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotReplacementsImpl.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ import java.lang.reflect.Executable; import java.lang.reflect.Method; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.hotspot.word.HotSpotOperation;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotTTYStreamProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotTTYStreamProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.io.PrintStream; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.debug.TTYStreamProvider;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/PrintStreamOption.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/PrintStreamOption.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,9 +29,9 @@ import java.io.PrintStream; import java.lang.management.ManagementFactory; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.options.OptionValue; /** * An option that encapsulates and configures a print stream.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java Fri Oct 30 20:56:28 2015 +0100 @@ -35,13 +35,13 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.inittimer.SuppressFBWarnings; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.inittimer.SuppressFBWarnings; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.debug.TTY; import com.oracle.graal.hotspot.replacements.NewObjectSnippets;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -33,26 +33,26 @@ 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.hotspot.HotSpotVMConfig.config; -import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.meta.LocationIdentity.any; import java.lang.ref.Reference; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaField; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -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 jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaField; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; @@ -101,6 +101,7 @@ import com.oracle.graal.nodes.Invoke; import com.oracle.graal.nodes.LoweredCallTargetNode; import com.oracle.graal.nodes.ParameterNode; +import com.oracle.graal.nodes.SafepointNode; import com.oracle.graal.nodes.StartNode; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.UnwindNode; @@ -157,7 +158,7 @@ protected final HotSpotGraalRuntimeProvider runtime; protected final ForeignCallsProvider foreignCalls; protected final HotSpotRegistersProvider registers; - protected final ConstantReflectionProvider constantReflection; + protected final HotSpotConstantReflectionProvider constantReflection; protected CheckCastDynamicSnippets.Templates checkcastDynamicSnippets; protected InstanceOfSnippets.Templates instanceofSnippets; @@ -171,7 +172,7 @@ protected RuntimeStringSnippets.Templates runtimeStringSnippets; public DefaultHotSpotLoweringProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers, - ConstantReflectionProvider constantReflection, TargetDescription target) { + HotSpotConstantReflectionProvider constantReflection, TargetDescription target) { super(metaAccess, target); this.runtime = runtime; this.foreignCalls = foreignCalls; @@ -286,7 +287,7 @@ } else if (n instanceof IntegerDivNode || n instanceof IntegerRemNode || n instanceof UnsignedDivNode || n instanceof UnsignedRemNode) { // Nothing to do for division nodes. The HotSpot signal handler catches divisions by // zero and the MIN_VALUE / -1 cases. - } else if (n instanceof AbstractDeoptimizeNode || n instanceof UnwindNode || n instanceof RemNode) { + } else if (n instanceof AbstractDeoptimizeNode || n instanceof UnwindNode || n instanceof RemNode || n instanceof SafepointNode) { /* No lowering, we generate LIR directly for these nodes. */ } else if (n instanceof ClassGetHubNode) { lowerClassGetHubNode((ClassGetHubNode) n, tool); @@ -530,32 +531,30 @@ private void lowerBytecodeExceptionNode(BytecodeExceptionNode node) { StructuredGraph graph = node.graph(); - if (graph.getGuardsStage().allowsFloatingGuards()) { - if (OmitHotExceptionStacktrace.getValue()) { - Throwable exception; - if (node.getExceptionClass() == NullPointerException.class) { - exception = Exceptions.cachedNullPointerException; - } else if (node.getExceptionClass() == ArrayIndexOutOfBoundsException.class) { - exception = Exceptions.cachedArrayIndexOutOfBoundsException; - } else { - throw JVMCIError.shouldNotReachHere(); - } - FloatingNode exceptionNode = ConstantNode.forConstant(constantReflection.forObject(exception), metaAccess, graph); - graph.replaceFixedWithFloating(node, exceptionNode); + if (OmitHotExceptionStacktrace.getValue()) { + Throwable exception; + if (node.getExceptionClass() == NullPointerException.class) { + exception = Exceptions.cachedNullPointerException; + } else if (node.getExceptionClass() == ArrayIndexOutOfBoundsException.class) { + exception = Exceptions.cachedArrayIndexOutOfBoundsException; + } else { + throw JVMCIError.shouldNotReachHere(); + } + FloatingNode exceptionNode = ConstantNode.forConstant(constantReflection.forObject(exception), metaAccess, graph); + graph.replaceFixedWithFloating(node, exceptionNode); + } else { + ForeignCallDescriptor descriptor; + if (node.getExceptionClass() == NullPointerException.class) { + descriptor = RuntimeCalls.CREATE_NULL_POINTER_EXCEPTION; + } else if (node.getExceptionClass() == ArrayIndexOutOfBoundsException.class) { + descriptor = RuntimeCalls.CREATE_OUT_OF_BOUNDS_EXCEPTION; } else { - ForeignCallDescriptor descriptor; - if (node.getExceptionClass() == NullPointerException.class) { - descriptor = RuntimeCalls.CREATE_NULL_POINTER_EXCEPTION; - } else if (node.getExceptionClass() == ArrayIndexOutOfBoundsException.class) { - descriptor = RuntimeCalls.CREATE_OUT_OF_BOUNDS_EXCEPTION; - } else { - throw JVMCIError.shouldNotReachHere(); - } + throw JVMCIError.shouldNotReachHere(); + } - ForeignCallNode foreignCallNode = graph.add(new ForeignCallNode(foreignCalls, descriptor, node.stamp(), node.getArguments())); - graph.replaceFixedWithFixed(node, foreignCallNode); - } + ForeignCallNode foreignCallNode = graph.add(new ForeignCallNode(foreignCalls, descriptor, node.stamp(), node.getArguments())); + graph.replaceFixedWithFixed(node, foreignCallNode); } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotDisassemblerProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.meta; -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 jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.code.DisassemblerProvider;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.meta; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotForeignCallsProviderImpl.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,17 +24,17 @@ 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 static jdk.vm.ci.code.CallingConvention.Type.JavaCall; +import static jdk.vm.ci.code.CallingConvention.Type.JavaCallee; import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.hotspot.HotSpotForeignCallLinkage;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraalConstantReflectionProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraalConstantReflectionProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,17 +29,17 @@ import java.util.ArrayList; import java.util.List; -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 jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaField; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaField; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.runtime.JVMCI; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.replacements.ReplacementsImpl;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotGraphBuilderPlugins.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,21 +26,19 @@ import static com.oracle.graal.hotspot.replacements.SystemSubstitutions.JAVA_TIME_MILLIS; import static com.oracle.graal.hotspot.replacements.SystemSubstitutions.JAVA_TIME_NANOS; import static com.oracle.graal.java.BytecodeParserOptions.InlineDuringParsing; -import static sun.misc.Version.jdkMajorVersion; -import static sun.misc.Version.jdkMinorVersion; import java.lang.invoke.ConstantCallSite; import java.lang.invoke.MutableCallSite; import java.lang.invoke.VolatileCallSite; import java.util.zip.CRC32; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.options.StableOptionValue; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.options.StableOptionValue; import sun.reflect.Reflection; import com.oracle.graal.api.replacements.SnippetReflectionProvider; @@ -60,6 +58,7 @@ import com.oracle.graal.hotspot.replacements.CallSiteTargetNode; import com.oracle.graal.hotspot.replacements.CipherBlockChainingSubstitutions; import com.oracle.graal.hotspot.replacements.HotSpotClassSubstitutions; +import com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil; import com.oracle.graal.hotspot.replacements.IdentityHashCodeNode; import com.oracle.graal.hotspot.replacements.ObjectCloneNode; import com.oracle.graal.hotspot.replacements.ObjectSubstitutions; @@ -154,7 +153,7 @@ r.registerMethodSubstitution(HotSpotClassSubstitutions.class, "isPrimitive", Receiver.class); r.registerMethodSubstitution(HotSpotClassSubstitutions.class, "getSuperclass", Receiver.class); - if (jdkMajorVersion() >= 1 && jdkMinorVersion() <= 8) { + if (HotSpotReplacementsUtil.arrayKlassComponentMirrorOffsetExists()) { r.registerMethodSubstitution(HotSpotClassSubstitutions.class, "getComponentType", Receiver.class); } @@ -269,6 +268,25 @@ }); } + public static final String cbcEncryptName; + public static final String cbcDecryptName; + public static final String aesEncryptName; + public static final String aesDecryptName; + + static { + if (System.getProperty("java.specification.version").compareTo("1.9") < 0) { + cbcEncryptName = "encrypt"; + cbcDecryptName = "decrypt"; + aesEncryptName = "encryptBlock"; + aesDecryptName = "decryptBlock"; + } else { + cbcEncryptName = "implEncrypt"; + cbcDecryptName = "implDecrypt"; + aesEncryptName = "implEncryptBlock"; + aesDecryptName = "implDecryptBlock"; + } + } + private static void registerAESPlugins(InvocationPlugins plugins, HotSpotVMConfig config) { if (config.useAESIntrinsics) { assert config.aescryptEncryptBlockStub != 0L; @@ -278,14 +296,14 @@ Class<?> c = MethodSubstitutionPlugin.resolveClass("com.sun.crypto.provider.CipherBlockChaining", true); if (c != null) { Registration r = new Registration(plugins, c); - r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, "encrypt", Receiver.class, byte[].class, int.class, int.class, byte[].class, int.class); - r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, "decrypt", Receiver.class, byte[].class, int.class, int.class, byte[].class, int.class); + r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, cbcEncryptName, Receiver.class, byte[].class, int.class, int.class, byte[].class, int.class); + r.registerMethodSubstitution(CipherBlockChainingSubstitutions.class, cbcDecryptName, Receiver.class, byte[].class, int.class, int.class, byte[].class, int.class); } c = MethodSubstitutionPlugin.resolveClass("com.sun.crypto.provider.AESCrypt", true); if (c != null) { Registration r = new Registration(plugins, c); - r.registerMethodSubstitution(AESCryptSubstitutions.class, "encryptBlock", Receiver.class, byte[].class, int.class, byte[].class, int.class); - r.registerMethodSubstitution(AESCryptSubstitutions.class, "decryptBlock", Receiver.class, byte[].class, int.class, byte[].class, int.class); + r.registerMethodSubstitution(AESCryptSubstitutions.class, aesEncryptName, Receiver.class, byte[].class, int.class, byte[].class, int.class); + r.registerMethodSubstitution(AESCryptSubstitutions.class, aesDecryptName, Receiver.class, byte[].class, int.class, byte[].class, int.class); } } } @@ -298,8 +316,13 @@ assert config.cipherBlockChainingDecryptAESCryptStub != 0L; Registration r = new Registration(plugins, CRC32.class); r.registerMethodSubstitution(CRC32Substitutions.class, "update", int.class, int.class); - r.registerMethodSubstitution(CRC32Substitutions.class, "updateBytes", int.class, byte[].class, int.class, int.class); - r.registerMethodSubstitution(CRC32Substitutions.class, "updateByteBuffer", int.class, long.class, int.class, int.class); + if (System.getProperty("java.specification.version").compareTo("1.9") < 0) { + r.registerMethodSubstitution(CRC32Substitutions.class, "updateBytes", int.class, byte[].class, int.class, int.class); + r.registerMethodSubstitution(CRC32Substitutions.class, "updateByteBuffer", int.class, long.class, int.class, int.class); + } else { + r.registerMethodSubstitution(CRC32Substitutions.class, "updateBytes0", int.class, byte[].class, int.class, int.class); + r.registerMethodSubstitution(CRC32Substitutions.class, "updateByteBuffer0", int.class, long.class, int.class, int.class); + } } } }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotHostForeignCallsProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotHostForeignCallsProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -79,19 +79,19 @@ import static com.oracle.graal.replacements.Log.LOG_OBJECT; import static com.oracle.graal.replacements.Log.LOG_PRIMITIVE; import static com.oracle.graal.replacements.Log.LOG_PRINTF; -import static jdk.internal.jvmci.code.CallingConvention.Type.NativeCall; +import static jdk.vm.ci.code.CallingConvention.Type.NativeCall; import java.util.EnumMap; import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInvocationPlugins.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInvocationPlugins.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.meta; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.GraalOptions; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotLoweringProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.meta; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import com.oracle.graal.nodes.spi.LoweringProvider;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNodePlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNodePlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,12 +24,12 @@ import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; import static com.oracle.graal.hotspot.meta.HotSpotGraalConstantReflectionProvider.FieldReadEnabledInImmutableCode; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotProviders.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.meta; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRegisters.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRegisters.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.meta; -import jdk.internal.jvmci.code.Register; +import jdk.vm.ci.code.Register; public class HotSpotRegisters implements HotSpotRegistersProvider {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRegistersProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRegistersProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.meta; -import jdk.internal.jvmci.code.Register; +import jdk.vm.ci.code.Register; /** * Special registers reserved by HotSpot for frequently used values.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSnippetReflectionProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.hotspot.meta; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.hotspot.HotSpotGraalRuntimeProvider; @@ -37,9 +37,9 @@ public class HotSpotSnippetReflectionProvider implements SnippetReflectionProvider { private final HotSpotGraalRuntimeProvider runtime; - private final ConstantReflectionProvider constantReflection; + private final HotSpotConstantReflectionProvider constantReflection; - public HotSpotSnippetReflectionProvider(HotSpotGraalRuntimeProvider runtime, ConstantReflectionProvider constantReflection) { + public HotSpotSnippetReflectionProvider(HotSpotGraalRuntimeProvider runtime, HotSpotConstantReflectionProvider constantReflection) { this.runtime = runtime; this.constantReflection = constantReflection; }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; import static com.oracle.graal.compiler.common.GraalOptions.VerifyPhases; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.options.DerivedOptionValue; -import jdk.internal.jvmci.options.DerivedOptionValue.OptionSupplier; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.options.DerivedOptionValue; +import jdk.vm.ci.options.DerivedOptionValue.OptionSupplier; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.DebugInfoMode;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotWordOperationPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotWordOperationPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,12 +25,12 @@ import static com.oracle.graal.hotspot.word.HotSpotOperation.HotspotOpcode.POINTER_EQ; import static com.oracle.graal.hotspot.word.HotSpotOperation.HotspotOpcode.POINTER_NE; import static com.oracle.graal.nodes.ConstantNode.forBoolean; -import static jdk.internal.jvmci.meta.LocationIdentity.any; -import jdk.internal.jvmci.common.JVMCIError; -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 static jdk.vm.ci.meta.LocationIdentity.any; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,12 +24,12 @@ import java.util.BitSet; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.FixedWithNextNode; import com.oracle.graal.nodes.spi.LIRLowerable;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.hotspot.HotSpotLIRGenerator; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.nodeinfo.InputType; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.extended.MonitorEnter; @@ -70,7 +70,7 @@ public void generate(NodeLIRBuilderTool gen) { assert lockDepth != -1; HotSpotLIRGenerator hsGen = (HotSpotLIRGenerator) gen.getLIRGeneratorTool(); - StackSlotValue slot = hsGen.getLockSlot(lockDepth); + VirtualStackSlot slot = hsGen.getLockSlot(lockDepth); Value result = gen.getLIRGeneratorTool().emitAddress(slot); gen.setResult(this, result); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassCastNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassCastNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotCompressedNullConstant; -import jdk.internal.jvmci.hotspot.HotSpotConstant; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant; +import jdk.vm.ci.hotspot.HotSpotConstant; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.AbstractObjectStamp; import com.oracle.graal.compiler.common.type.ObjectStamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ComputeObjectAddressNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ComputeObjectAddressNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentJavaThreadNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentJavaThreadNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentLockNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentLockNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, 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 @@ -22,12 +22,12 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.hotspot.HotSpotLIRGenerator; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.FixedWithNextNode; import com.oracle.graal.nodes.spi.LIRLowerable; @@ -53,7 +53,7 @@ public void generate(NodeLIRBuilderTool gen) { assert lockDepth != -1; HotSpotLIRGenerator hsGen = (HotSpotLIRGenerator) gen.getLIRGeneratorTool(); - StackSlotValue slot = hsGen.getLockSlot(lockDepth); + VirtualStackSlot slot = hsGen.getLockSlot(lockDepth); // The register allocator cannot handle stack -> register moves so we use an LEA here Value result = gen.getLIRGeneratorTool().emitAddress(slot); gen.setResult(this, result);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.hotspot.nodes; import static com.oracle.graal.hotspot.HotSpotBackend.FETCH_UNROLL_INFO; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, 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 @@ -26,11 +26,11 @@ import java.util.BitSet; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.FixedWithNextNode;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.hotspot.HotSpotNodeLIRBuilder;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.List; -import jdk.internal.jvmci.code.CallingConvention.Type; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.List; -import jdk.internal.jvmci.code.CallingConvention.Type; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LoadIndexedPointerNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LoadIndexedPointerNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorCounterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorCounterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2015, 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 @@ -24,11 +24,11 @@ import java.util.BitSet; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.calc.FloatingNode; import com.oracle.graal.nodes.spi.LIRLowerable;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.nodes; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.Arrays; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.hotspot.nodes; import static com.oracle.graal.hotspot.HotSpotBackend.UNCOMMON_TRAP; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,10 +24,10 @@ import static com.oracle.graal.hotspot.HotSpotBackend.VM_ERROR; import static com.oracle.graal.hotspot.nodes.CStringNode.emitCString; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.MetaUtil; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.MetaUtil; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/HotSpotLIRKindTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/HotSpotLIRKindTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.nodes.type; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.compiler.common.spi.LIRKindTool;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/KlassPointerStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,15 +24,15 @@ import java.util.Objects; -import jdk.internal.jvmci.hotspot.HotSpotCompressedNullConstant; -import jdk.internal.jvmci.hotspot.HotSpotMemoryAccessProvider; -import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant; +import jdk.vm.ci.hotspot.HotSpotMemoryAccessProvider; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.spi.LIRKindTool; import com.oracle.graal.compiler.common.type.AbstractPointerStamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MetaspacePointerStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MetaspacePointerStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.nodes.type; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.LIRKindTool; import com.oracle.graal.compiler.common.type.AbstractPointerStamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MethodPointerStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/MethodPointerStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.hotspot.nodes.type; -import jdk.internal.jvmci.hotspot.HotSpotMemoryAccessProvider; -import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.hotspot.HotSpotMemoryAccessProvider; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.type.AbstractPointerStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/type/NarrowOopStamp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.hotspot.nodes.type; -import jdk.internal.jvmci.hotspot.HotSpotCompressedNullConstant; -import jdk.internal.jvmci.hotspot.HotSpotMemoryAccessProvider; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant; +import jdk.vm.ci.hotspot.HotSpotMemoryAccessProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.spi.LIRKindTool; import com.oracle.graal.compiler.common.type.AbstractObjectStamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/AheadOfTimeVerificationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.hotspot.phases; import static com.oracle.graal.nodes.ConstantNode.getConstantNodes; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.StructuredGraph;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,16 +25,16 @@ import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.CLASS_MIRROR_LOCATION; import static com.oracle.graal.nodes.ConstantNode.getConstantNodes; import static com.oracle.graal.nodes.NamedLocationIdentity.FINAL_LOCATION; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaField; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.hotspot.HotSpotResolvedPrimitiveType; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig.CompressEncoding; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaField; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.hotspot.HotSpotResolvedPrimitiveType; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.AbstractObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.hotspot.phases; import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.Required; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.compiler.Compiler; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.runtime.JVMCICompiler; import com.oracle.graal.debug.Debug; import com.oracle.graal.graph.Node; @@ -53,7 +53,7 @@ @Override protected void run(StructuredGraph graph) { - if (graph.getEntryBCI() == Compiler.INVOCATION_ENTRY_BCI) { + if (graph.getEntryBCI() == JVMCICompiler.INVOCATION_ENTRY_BCI) { // This happens during inlining in a OSR method, because the same phase plan will be // used. return;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.phases; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import com.oracle.graal.graph.Node; import com.oracle.graal.hotspot.nodes.G1ArrayRangePostWriteBarrier;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierVerificationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.util.Iterator; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeFlood;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AESCryptSubstitutions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AESCryptSubstitutions.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,15 +26,15 @@ import static com.oracle.graal.hotspot.HotSpotBackend.ENCRYPT_BLOCK; 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 static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; import java.lang.reflect.Field; -import jdk.internal.jvmci.common.JVMCIError; -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.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import sun.misc.Launcher; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; @@ -78,10 +78,18 @@ crypt(rcvr, in, inOffset, out, outOffset, true); } + static void implEncryptBlock(Object rcvr, byte[] in, int inOffset, byte[] out, int outOffset) { + crypt(rcvr, in, inOffset, out, outOffset, true); + } + static void decryptBlock(Object rcvr, byte[] in, int inOffset, byte[] out, int outOffset) { crypt(rcvr, in, inOffset, out, outOffset, false); } + static void implDecryptBlock(Object rcvr, byte[] in, int inOffset, byte[] out, int outOffset) { + crypt(rcvr, in, inOffset, out, outOffset, false); + } + private static void crypt(Object rcvr, byte[] in, int inOffset, byte[] out, int outOffset, boolean encrypt) { checkArgs(in, inOffset, out, outOffset); Object realReceiver = PiNode.piCastNonNull(rcvr, AESCryptClass);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AssertionSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/AssertionSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.hotspot.nodes.CStringNode.cstring; import static com.oracle.graal.replacements.SnippetTemplate.DEFAULT_REPLACER; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.graph.Node.ConstantNodeParameter;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CRC32Substitutions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CRC32Substitutions.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.zip.CRC32; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; @@ -63,16 +63,26 @@ static int updateBytes(int crc, byte[] buf, int off, int len) { Word bufAddr = Word.unsigned(ComputeObjectAddressNode.get(buf, arrayBaseOffset(JavaKind.Byte) + off)); - return updateBytes(UPDATE_BYTES_CRC32, crc, bufAddr, len); + return updateBytesCRC32(UPDATE_BYTES_CRC32, crc, bufAddr, len); + } + + static int updateBytes0(int crc, byte[] buf, int off, int len) { + Word bufAddr = Word.unsigned(ComputeObjectAddressNode.get(buf, arrayBaseOffset(JavaKind.Byte) + off)); + return updateBytesCRC32(UPDATE_BYTES_CRC32, crc, bufAddr, len); } static int updateByteBuffer(int crc, long addr, int off, int len) { Word bufAddr = Word.unsigned(addr).add(off); - return updateBytes(UPDATE_BYTES_CRC32, crc, bufAddr, len); + return updateBytesCRC32(UPDATE_BYTES_CRC32, crc, bufAddr, len); + } + + static int updateByteBuffer0(int crc, long addr, int off, int len) { + Word bufAddr = Word.unsigned(addr).add(off); + return updateBytesCRC32(UPDATE_BYTES_CRC32, crc, bufAddr, len); } public static final ForeignCallDescriptor UPDATE_BYTES_CRC32 = new ForeignCallDescriptor("updateBytesCRC32", int.class, int.class, Word.class, int.class); @NodeIntrinsic(ForeignCallNode.class) - public static native int updateBytes(@ConstantNodeParameter ForeignCallDescriptor descriptor, int crc, Word buf, int length); + public static native int updateBytesCRC32(@ConstantNodeParameter ForeignCallDescriptor descriptor, int crc, Word buf, int length); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableAddressNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableAddressNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableShiftNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableShiftNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastDynamicSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastDynamicSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,9 +31,9 @@ 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.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.ClassCastException; -import jdk.internal.jvmci.code.TargetDescription; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.ClassCastException; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CipherBlockChainingSubstitutions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CipherBlockChainingSubstitutions.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,10 +25,10 @@ import static com.oracle.graal.hotspot.HotSpotBackend.DECRYPT; import static com.oracle.graal.hotspot.HotSpotBackend.ENCRYPT; 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; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import sun.misc.Launcher; import com.oracle.graal.api.replacements.Fold; @@ -86,6 +86,18 @@ } } + static int implEncrypt(Object rcvr, byte[] in, int inOffset, int inLength, byte[] out, int outOffset) { + Object realReceiver = PiNode.piCastNonNull(rcvr, cipherBlockChainingClass); + Object embeddedCipher = UnsafeLoadNode.load(realReceiver, embeddedCipherOffset, JavaKind.Object, LocationIdentity.any()); + if (getAESCryptClass().isInstance(embeddedCipher)) { + Object aesCipher = PiNode.piCastNonNull(embeddedCipher, AESCryptSubstitutions.AESCryptClass); + crypt(realReceiver, in, inOffset, inLength, out, outOffset, aesCipher, true); + return inLength; + } else { + return implEncrypt(realReceiver, in, inOffset, inLength, out, outOffset); + } + } + static int decrypt(Object rcvr, byte[] in, int inOffset, int inLength, byte[] out, int outOffset) { Object realReceiver = PiNode.piCastNonNull(rcvr, cipherBlockChainingClass); Object embeddedCipher = UnsafeLoadNode.load(realReceiver, embeddedCipherOffset, JavaKind.Object, LocationIdentity.any()); @@ -98,6 +110,18 @@ } } + static int implDecrypt(Object rcvr, byte[] in, int inOffset, int inLength, byte[] out, int outOffset) { + Object realReceiver = PiNode.piCastNonNull(rcvr, cipherBlockChainingClass); + Object embeddedCipher = UnsafeLoadNode.load(realReceiver, embeddedCipherOffset, JavaKind.Object, LocationIdentity.any()); + if (in != out && getAESCryptClass().isInstance(embeddedCipher)) { + Object aesCipher = PiNode.piCastNonNull(embeddedCipher, AESCryptSubstitutions.AESCryptClass); + crypt(realReceiver, in, inOffset, inLength, out, outOffset, aesCipher, false); + return inLength; + } else { + return implDecrypt(realReceiver, in, inOffset, inLength, out, outOffset); + } + } + private static void crypt(Object rcvr, byte[] in, int inOffset, int inLength, byte[] out, int outOffset, Object embeddedCipher, boolean encrypt) { AESCryptSubstitutions.checkArgs(in, inOffset, out, outOffset); Object realReceiver = PiNode.piCastNonNull(rcvr, cipherBlockChainingClass);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.hotspot.HotSpotResolvedPrimitiveType; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.hotspot.HotSpotResolvedPrimitiveType; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,21 +27,24 @@ import static com.oracle.graal.hotspot.replacements.UnsafeAccess.UNSAFE; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.FAST_PATH_PROBABILITY; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; -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.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; + +import java.lang.reflect.Field; + +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.GraalOptions; @@ -438,9 +441,34 @@ public static final LocationIdentity ARRAY_KLASS_COMPONENT_MIRROR = NamedLocationIdentity.immutable("ArrayKlass::_component_mirror"); + /** + * Employ reflection to read values not available in JDK9. + */ + static class Lazy { + static final int arrayKlassComponentMirrorOffset; + static { + int value = Integer.MAX_VALUE; + try { + Field f = HotSpotVMConfig.class.getDeclaredField("arrayKlassComponentMirrorOffset"); + f.setAccessible(true); + value = f.getInt(config()); + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + // ArrayKlass::_component_mirror was removed in JDK9. + } + arrayKlassComponentMirrorOffset = value; + } + } + + public static boolean arrayKlassComponentMirrorOffsetExists() { + return Lazy.arrayKlassComponentMirrorOffset != Integer.MAX_VALUE; + } + @Fold public static int arrayKlassComponentMirrorOffset() { - return config().arrayKlassComponentMirrorOffset; + if (Lazy.arrayKlassComponentMirrorOffset == Integer.MAX_VALUE) { + throw new JVMCIError("ArrayKlass::_component_mirror does not exist"); + } + return Lazy.arrayKlassComponentMirrorOffset; } public static final LocationIdentity KLASS_SUPER_KLASS_LOCATION = NamedLocationIdentity.immutable("Klass::_super");
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotSubstitutions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotSubstitutions.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,9 +27,9 @@ import com.oracle.graal.nodes.spi.Replacements; import com.oracle.graal.nodes.spi.ReplacementsProvider; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.service.ServiceProvider; import sun.reflect.ConstantPool; import sun.reflect.Reflection;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.hotspot.HotSpotResolvedPrimitiveType; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.hotspot.HotSpotResolvedPrimitiveType; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/IdentityHashCodeNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/IdentityHashCodeNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.hotspot.replacements; import static com.oracle.graal.compiler.common.GraalOptions.ImmutableCode; -import jdk.internal.jvmci.hotspot.HotSpotObjectConstant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotObjectConstant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -41,16 +41,16 @@ import static com.oracle.graal.nodes.extended.BranchProbabilityNode.NOT_FREQUENT_PROBABILITY; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.NOT_LIKELY_PROBABILITY; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.OptimizedTypeCheckViolated; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.TriState; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.OptimizedTypeCheckViolated; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.hotspot.meta.HotSpotProviders;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippetsOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippetsOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; /** * Options related to {@link InstanceOfSnippets}.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,9 +31,9 @@ import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.writeExceptionPc; import static com.oracle.graal.nodes.PiNode.piCast; import static com.oracle.graal.replacements.SnippetTemplate.DEFAULT_REPLACER; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.hotspot.meta.HotSpotProviders;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -54,18 +54,18 @@ import java.util.List; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -63,19 +63,19 @@ import static com.oracle.graal.replacements.ReplacementsUtil.staticAssert; import static com.oracle.graal.replacements.SnippetTemplate.DEFAULT_REPLACER; import static com.oracle.graal.replacements.nodes.ExplodeLoopNode.explodeLoop; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; -import static jdk.internal.jvmci.hotspot.HotSpotMetaAccessProvider.computeArrayAllocationSize; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider; -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.ResolvedJavaType; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; +import static jdk.vm.ci.hotspot.HotSpotMetaAccessProvider.computeArrayAllocationSize; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippetsOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippetsOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; /** * Options related to {@link NewObjectSnippets}.
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.lang.reflect.Method; import java.util.EnumMap; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.api.directives.GraalDirectives; import com.oracle.graal.hotspot.replacements.arraycopy.ArrayCopyCallNode;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.hotspot.replacements; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/RuntimeStringSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/RuntimeStringSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -43,8 +43,8 @@ import com.oracle.graal.replacements.Snippets; import com.oracle.graal.word.Word; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; public class RuntimeStringSnippets implements Snippets {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ThreadSubstitutions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ThreadSubstitutions.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.osThreadInterruptedOffset; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.osThreadOffset; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.threadObjectOffset; -import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.LocationIdentity.any; import com.oracle.graal.api.replacements.ClassSubstitution; import com.oracle.graal.api.replacements.MethodSubstitution;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/TypeCheckSnippetUtils.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/TypeCheckSnippetUtils.java Fri Oct 30 20:56:28 2015 +0100 @@ -40,8 +40,8 @@ import java.util.Arrays; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.hotspot.nodes.type.KlassPointerStamp; import com.oracle.graal.hotspot.word.KlassPointer;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeLoadSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeLoadSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.referentOffset; import static com.oracle.graal.replacements.SnippetTemplate.DEFAULT_REPLACER; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.hotspot.meta.HotSpotProviders; import com.oracle.graal.nodes.extended.FixedValueAnchorNode;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -46,12 +46,12 @@ 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 static jdk.vm.ci.code.MemoryBarriers.STORE_LOAD; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.hotspot.HotSpotVMConfig.CompressEncoding; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.GraalOptions; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,16 +23,15 @@ //JaCoCo Exclude package com.oracle.graal.hotspot.replacements.arraycopy; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.PrimitiveConstant; -import com.oracle.graal.api.runtime.Graal; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory; @@ -61,7 +60,6 @@ import com.oracle.graal.nodes.memory.address.OffsetAddressNode; import com.oracle.graal.nodes.spi.Lowerable; import com.oracle.graal.nodes.spi.LoweringTool; -import com.oracle.graal.runtime.RuntimeProvider; @NodeInfo(allowedUsageTypes = {InputType.Memory}) public final class ArrayCopyCallNode extends AbstractMemoryCheckpoint implements Lowerable, MemoryCheckpoint.Single, MemoryAccess, Canonicalizable { @@ -162,7 +160,7 @@ if (len.stamp().getStackKind() != JavaKind.Long) { len = IntegerConvertNode.convert(len, StampFactory.forKind(JavaKind.Long), graph()); } - ForeignCallNode call = graph.add(new ForeignCallNode(Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len)); + ForeignCallNode call = graph.add(new ForeignCallNode(runtime.getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len)); call.setStateAfter(stateAfter()); graph.replaceFixedWithFixed(this, call); }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.replacements.arraycopy; -import static jdk.internal.jvmci.meta.LocationIdentity.any; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import static jdk.vm.ci.meta.LocationIdentity.any; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySlowPathNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySlowPathNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.replacements.arraycopy; -import static jdk.internal.jvmci.meta.LocationIdentity.any; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import static jdk.vm.ci.meta.LocationIdentity.any; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -40,15 +40,15 @@ import java.util.EnumMap; import java.util.Map; -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 jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.directives.GraalDirectives; import com.oracle.graal.api.replacements.Fold;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyUnrollNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyUnrollNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.replacements.arraycopy; -import static jdk.internal.jvmci.meta.LocationIdentity.any; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import static jdk.vm.ci.meta.LocationIdentity.any; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ //JaCoCo Exclude package com.oracle.graal.hotspot.replacements.arraycopy; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopyNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopyNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.hotspot.replacements.arraycopy; -import static jdk.internal.jvmci.meta.LocationIdentity.any; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import static jdk.vm.ci.meta.LocationIdentity.any; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopySnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,10 +34,10 @@ 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 static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.asm.NumUtil;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/DeoptimizationStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/DeoptimizationStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,10 +31,10 @@ import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.wordSize; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.writeRegisterAsWord; import static com.oracle.graal.hotspot.stubs.UncommonTrapStub.STACK_BANG_LOCATION; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.asm.NumUtil;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ExceptionHandlerStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ExceptionHandlerStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,8 +34,8 @@ import static com.oracle.graal.hotspot.stubs.StubUtil.fatal; import static com.oracle.graal.hotspot.stubs.StubUtil.newDescriptor; import static com.oracle.graal.hotspot.stubs.StubUtil.printf; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,19 +24,19 @@ 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 static jdk.vm.ci.code.CallingConvention.Type.JavaCall; +import static jdk.vm.ci.code.CallingConvention.Type.JavaCallee; +import static jdk.vm.ci.code.CallingConvention.Type.NativeCall; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider; +import jdk.vm.ci.hotspot.HotSpotSignature; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.type.Stamp; @@ -219,7 +219,6 @@ boolean isObjectResult = !linkage.getOutgoingCallingConvention().getReturn().getLIRKind().isValue(); StructuredGraph graph = new StructuredGraph(toString(), null, AllowAssumptions.NO); - graph.disableInlinedMethodRecording(); graph.disableUnsafeAccessTracking(); GraphKit kit = new GraphKit(graph, providers, wordTypes, providers.getGraphBuilderPlugins());
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewArrayStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewArrayStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -40,9 +40,9 @@ 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 jdk.internal.jvmci.hotspot.HotSpotMetaAccessProvider.computeArrayAllocationSize; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.hotspot.HotSpotResolvedObjectType; +import static jdk.vm.ci.hotspot.HotSpotMetaAccessProvider.computeArrayAllocationSize; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewInstanceStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/NewInstanceStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -66,9 +66,9 @@ 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 jdk.vm.ci.code.Register; +import jdk.vm.ci.hotspot.HotSpotResolvedObjectType; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/SnippetStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/SnippetStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,11 +26,11 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Local; -import jdk.internal.jvmci.meta.LocalVariableTable; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Local; +import jdk.vm.ci.meta.LocalVariableTable; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope; @@ -106,10 +106,8 @@ GraphBuilderConfiguration config = GraphBuilderConfiguration.getSnippetDefault(plugins); // Stubs cannot have optimistic assumptions since they have - // to be valid for the entire run of the VM. Nor can they be - // evolved or have breakpoints. + // to be valid for the entire run of the VM. final StructuredGraph graph = new StructuredGraph(method, AllowAssumptions.NO); - graph.disableInlinedMethodRecording(); graph.disableUnsafeAccessTracking(); if (SnippetGraphUnderConstruction != null) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,18 +30,18 @@ import java.util.ListIterator; import java.util.Set; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.Call; -import jdk.internal.jvmci.code.CompilationResult.ConstantReference; -import jdk.internal.jvmci.code.CompilationResult.DataPatch; -import jdk.internal.jvmci.code.CompilationResult.Infopoint; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.hotspot.HotSpotMetaspaceConstant; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.Call; +import jdk.vm.ci.code.CompilationResult.ConstantReference; +import jdk.vm.ci.code.CompilationResult.DataPatch; +import jdk.vm.ci.code.CompilationResult.Infopoint; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.debug.Debug; @@ -165,10 +165,8 @@ try (Scope d = Debug.sandbox("CompilingStub", DebugScope.getConfig(), providers.getCodeCache(), debugScopeContext())) { final StructuredGraph graph = getGraph(); - // Stubs cannot be recompiled so they cannot be compiled with - // assumptions and there is no point in recording evol_method dependencies + // Stubs cannot be recompiled so they cannot be compiled with assumptions assert graph.getAssumptions() == null; - assert !graph.isInlinedMethodRecordingEnabled() : graph; if (!(graph.start() instanceof StubStartNode)) { StubStartNode newStart = graph.add(new StubStartNode(Stub.this)); @@ -216,7 +214,6 @@ // Stubs cannot be recompiled so they cannot be compiled with // assumptions and there is no point in recording evol_method dependencies assert compResult.getAssumptions() == null : "stubs should not use assumptions: " + this; - assert compResult.getMethods() == null : "stubs should not record evol_method dependencies: " + this; for (DataPatch data : compResult.getDataPatches()) { if (data.reference instanceof ConstantReference) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/StubUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/StubUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,14 +29,14 @@ 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 static jdk.vm.ci.meta.DeoptimizationReason.RuntimeConstraint; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationAction; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/UncommonTrapStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/UncommonTrapStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,10 +31,10 @@ import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.wordSize; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.writePendingDeoptimization; import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.writeRegisterAsWord; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.asm.NumUtil;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/UnwindExceptionToCallerStub.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/UnwindExceptionToCallerStub.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,7 +30,7 @@ import static com.oracle.graal.hotspot.stubs.StubUtil.decipher; import static com.oracle.graal.hotspot.stubs.StubUtil.newDescriptor; import static com.oracle.graal.hotspot.stubs.StubUtil.printf; -import jdk.internal.jvmci.code.Register; +import jdk.vm.ci.code.Register; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/HotSpotWordTypes.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/HotSpotWordTypes.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.hotspot.word; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.hotspot.nodes.type.KlassPointerStamp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/KlassPointer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/KlassPointer.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import static com.oracle.graal.hotspot.word.HotSpotOperation.HotspotOpcode.POINTER_NE; import static com.oracle.graal.hotspot.word.HotSpotOperation.HotspotOpcode.READ_KLASS_POINTER; import static com.oracle.graal.hotspot.word.HotSpotOperation.HotspotOpcode.TO_KLASS_POINTER; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.word.Pointer; import com.oracle.graal.word.Word.Opcode;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/MetaspacePointer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/MetaspacePointer.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.hotspot.word.HotSpotOperation.HotspotOpcode.FROM_POINTER; import static com.oracle.graal.hotspot.word.HotSpotOperation.HotspotOpcode.IS_NULL; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.nodes.memory.HeapAccess.BarrierType; import com.oracle.graal.word.Pointer;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/PointerCastNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/PointerCastNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.word; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Fri Oct 30 20:56:28 2015 +0100 @@ -87,10 +87,10 @@ import java.util.List; import java.util.TreeSet; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.meta.ExceptionHandler; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.meta.ExceptionHandler; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.bytecode.BytecodeLookupSwitch; import com.oracle.graal.bytecode.BytecodeStream;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeDisassembler.java Fri Oct 30 20:56:28 2015 +0100 @@ -75,12 +75,12 @@ import static com.oracle.graal.bytecode.Bytecodes.RET; import static com.oracle.graal.bytecode.Bytecodes.SIPUSH; import static com.oracle.graal.bytecode.Bytecodes.TABLESWITCH; -import jdk.internal.jvmci.meta.ConstantPool; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaField; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ConstantPool; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaField; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.bytecode.BytecodeLookupSwitch; import com.oracle.graal.bytecode.BytecodeStream;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Fri Oct 30 20:56:28 2015 +0100 @@ -238,16 +238,16 @@ import static com.oracle.graal.java.BytecodeParserOptions.TraceParserPlugins; import static com.oracle.graal.nodes.type.StampTool.isPointerNonNull; import static java.lang.String.format; -import static jdk.internal.jvmci.common.JVMCIError.guarantee; -import static jdk.internal.jvmci.common.JVMCIError.shouldNotReachHere; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateRecompile; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.JavaSubroutineMismatch; -import static jdk.internal.jvmci.meta.DeoptimizationReason.NullCheckException; -import static jdk.internal.jvmci.meta.DeoptimizationReason.RuntimeConstraint; -import static jdk.internal.jvmci.meta.DeoptimizationReason.TransferToInterpreter; -import static jdk.internal.jvmci.meta.DeoptimizationReason.UnreachedCode; -import static jdk.internal.jvmci.meta.DeoptimizationReason.Unresolved; +import static jdk.vm.ci.common.JVMCIError.guarantee; +import static jdk.vm.ci.common.JVMCIError.shouldNotReachHere; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateRecompile; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.JavaSubroutineMismatch; +import static jdk.vm.ci.meta.DeoptimizationReason.NullCheckException; +import static jdk.vm.ci.meta.DeoptimizationReason.RuntimeConstraint; +import static jdk.vm.ci.meta.DeoptimizationReason.TransferToInterpreter; +import static jdk.vm.ci.meta.DeoptimizationReason.UnreachedCode; +import static jdk.vm.ci.meta.DeoptimizationReason.Unresolved; import java.util.ArrayDeque; import java.util.ArrayList; @@ -261,33 +261,33 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.InfopointReason; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.meta.ConstantPool; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaField; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.LineNumberTable; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.MetaUtil; -import jdk.internal.jvmci.meta.ProfilingInfo; -import jdk.internal.jvmci.meta.RawConstant; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantPool; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaField; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.LineNumberTable; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.MetaUtil; +import jdk.vm.ci.meta.ProfilingInfo; +import jdk.vm.ci.meta.RawConstant; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.TriState; +import jdk.vm.ci.runtime.JVMCICompiler; import com.oracle.graal.bytecode.BytecodeLookupSwitch; import com.oracle.graal.bytecode.BytecodeStream; @@ -637,6 +637,10 @@ } } + protected GraphBuilderPhase.Instance getGraphBuilderInstance() { + return graphBuilderInstance; + } + public ValueNode getReturnValue() { return returnValue; } @@ -928,9 +932,6 @@ } LoopBeginNode loopBegin = (LoopBeginNode) ((EndNode) merge.next()).merge(); LoopEndNode loopEnd = graph.add(new LoopEndNode(loopBegin)); - if (parsingIntrinsic()) { - loopEnd.disableSafepoint(); - } endNode.replaceAndDelete(loopEnd); } else if (visited.contains(n)) { // Normal merge into a branch we are already exploring. @@ -1223,16 +1224,6 @@ assert bci == BytecodeFrame.BEFORE_BCI || bci == bci() : "invalid bci"; Debug.log("Creating exception dispatch edges at %d, exception object=%s, exception seen=%s", bci, exceptionObject, (profilingInfo == null ? "" : profilingInfo.getExceptionSeen(bci))); - BciBlock dispatchBlock = currentBlock.exceptionDispatchBlock(); - /* - * The exception dispatch block is always for the last bytecode of a block, so if we are not - * at the endBci yet, there is no exception handler for this bci and we can unwind - * immediately. - */ - if (bci != currentBlock.endBci || dispatchBlock == null) { - dispatchBlock = blockMap.getUnwindBlock(); - } - FrameStateBuilder dispatchState = frameState.copy(); dispatchState.clearStack(); @@ -1249,10 +1240,26 @@ dispatchBegin.setStateAfter(dispatchState.create(bci, dispatchBegin)); } this.controlFlowSplit = true; + FixedWithNextNode finishedDispatch = finishInstruction(dispatchBegin, dispatchState); + + createHandleExceptionTarget(finishedDispatch, bci, dispatchState); + + return dispatchBegin; + } + + protected void createHandleExceptionTarget(FixedWithNextNode finishedDispatch, int bci, FrameStateBuilder dispatchState) { + BciBlock dispatchBlock = currentBlock.exceptionDispatchBlock(); + /* + * The exception dispatch block is always for the last bytecode of a block, so if we are not + * at the endBci yet, there is no exception handler for this bci and we can unwind + * immediately. + */ + if (bci != currentBlock.endBci || dispatchBlock == null) { + dispatchBlock = blockMap.getUnwindBlock(); + } + FixedNode target = createTarget(dispatchBlock, dispatchState); - FixedWithNextNode finishedDispatch = finishInstruction(dispatchBegin, dispatchState); finishedDispatch.setNext(target); - return dispatchBegin; } protected ValueNode genLoadIndexed(ValueNode array, ValueNode index, JavaKind kind) { @@ -1856,7 +1863,7 @@ protected void parseAndInlineCallee(ResolvedJavaMethod targetMethod, ValueNode[] args, IntrinsicContext calleeIntrinsicContext) { try (IntrinsicScope s = calleeIntrinsicContext != null && !parsingIntrinsic() ? new IntrinsicScope(this, targetMethod.getSignature().toParameterKinds(!targetMethod.isStatic()), args) : null) { - BytecodeParser parser = graphBuilderInstance.createBytecodeParser(graph, this, targetMethod, Compiler.INVOCATION_ENTRY_BCI, calleeIntrinsicContext); + BytecodeParser parser = graphBuilderInstance.createBytecodeParser(graph, this, targetMethod, JVMCICompiler.INVOCATION_ENTRY_BCI, calleeIntrinsicContext); FrameStateBuilder startFrameState = new FrameStateBuilder(parser, targetMethod, graph); if (!targetMethod.isStatic()) { args[0] = nullCheckedValue(args[0]); @@ -2309,9 +2316,6 @@ */ LoopBeginNode loopBegin = (LoopBeginNode) getFirstInstruction(block, operatingDimension); LoopEndNode loopEnd = graph.add(new LoopEndNode(loopBegin)); - if (parsingIntrinsic()) { - loopEnd.disableSafepoint(); - } Target target = checkLoopExit(loopEnd, block, state); FixedNode result = target.fixed; getEntryState(block, operatingDimension).merge(loopBegin, target.state); @@ -2700,9 +2704,17 @@ return true; } + /* Also a hook for subclasses. */ + protected boolean disableLoopSafepoint() { + return parsingIntrinsic(); + } + private LoopBeginNode appendLoopBegin(FixedWithNextNode fixedWithNext) { EndNode preLoopEnd = graph.add(new EndNode()); LoopBeginNode loopBegin = graph.add(new LoopBeginNode()); + if (disableLoopSafepoint()) { + loopBegin.disableSafepoint(); + } fixedWithNext.setNext(preLoopEnd); // Add the single non-loop predecessor of the loop header. loopBegin.addForwardEnd(preLoopEnd);
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParserOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParserOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.java; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.StableOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.StableOptionValue; /** * Options related to {@link BytecodeParser}.
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/DefaultSuitesProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/DefaultSuitesProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.java; -import jdk.internal.jvmci.options.DerivedOptionValue; -import jdk.internal.jvmci.options.DerivedOptionValue.OptionSupplier; +import jdk.vm.ci.options.DerivedOptionValue; +import jdk.vm.ci.options.DerivedOptionValue.OptionSupplier; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -35,21 +35,21 @@ import static com.oracle.graal.graph.iterators.NodePredicates.isNotA; import static com.oracle.graal.java.BytecodeParserOptions.HideSubstitutionStates; import static com.oracle.graal.nodes.FrameState.TWO_SLOT_MARKER; -import static jdk.internal.jvmci.common.JVMCIError.shouldNotReachHere; +import static jdk.vm.ci.common.JVMCIError.shouldNotReachHere; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Function; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Signature; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.java; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration; import com.oracle.graal.graphbuilderconf.IntrinsicContext;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/JsrNotSupportedBailout.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/JsrNotSupportedBailout.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.java; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; public class JsrNotSupportedBailout extends BailoutException {
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/ConvertJTT.java Fri Oct 30 20:55:32 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,223 +0,0 @@ -/* - * Copyright (c) 2012, 2012, 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.jtt; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Simple Utility to convert java tester tests from the proprietary test format into JUnit - tests. - */ -public class ConvertJTT { - - public static void main(String[] args) throws IOException { - String targetPath = "graalvm/graal/com.oracle.graal.tests/src/com/oracle/max/graal/jtt"; - String sourcePath = "maxine/com.oracle.max.vm/test/jtt"; - - File target = new File(targetPath); - for (File dir : new File(sourcePath).listFiles()) { - if (dir.isDirectory()) { - String packageName = dir.getName(); - if (packageName.equals("exbytecode") || packageName.equals("max")) { - continue; - } - File targetDir = new File(target, packageName); - for (File file : dir.listFiles()) { - if (file.getName().endsWith(".java")) { - targetDir.mkdirs(); - try { - processFile(file.toPath(), new File(targetDir, file.getName()).toPath(), packageName); - } catch (RuntimeException e) { - throw new RuntimeException(String.format("Exception while processing file %s", file.getAbsolutePath()), e); - } - } - } - } - } - } - - public static class Run { - - public String input; - public String output; - - public Run(String input, String output) { - this.input = input; - this.output = output; - } - - @Override - public String toString() { - return String.format("%16s = %s", input, output); - } - } - - private static void processFile(Path file, Path target, String packageName) throws IOException { - List<String> lines = Files.readAllLines(file, Charset.forName("UTF-8")); - Iterator<String> iter = lines.iterator(); - - ArrayList<String> output = new ArrayList<>(); - ArrayList<Run> runs = new ArrayList<>(); - - String line; - boolean javaHarness = false; - while (iter.hasNext()) { - line = iter.next(); - if (line.startsWith(" * Copyright (c) ")) { - output.add(" * Copyright (c) " + line.substring(17, 21) + ", 2012, Oracle and/or its affiliates. All rights reserved."); - } else if (line.contains("@Runs:")) { - line = line.substring(line.indexOf("@Runs:") + 6).trim(); - if (line.endsWith(";")) { - line = line.substring(0, line.length() - 1); - } - String[] runStrings; - if (charCount(line, ';') == charCount(line, '=') - 1) { - runStrings = line.split(";"); - } else if (charCount(line, ',') == charCount(line, '=') - 1) { - runStrings = line.split(","); - } else if (charCount(line, ',', ';') == charCount(line, '=') - 1) { - runStrings = line.split("[,;]"); - } else { - throw new RuntimeException("invalid run line: " + line); - } - for (String runString : runStrings) { - String[] split = runString.split("="); - if (split.length != 2) { - throw new RuntimeException("invalid run string: " + runString); - } - Run run = new Run(split[0].trim(), split[1].trim()); - runs.add(run); - } - } else if (line.contains("@Harness:")) { - if (line.contains("@Harness: java")) { - javaHarness = true; - } - } else if (line.startsWith("package jtt.")) { - output.add("package com.oracle.graal.jtt." + packageName + ";"); - output.add(""); - output.add("import org.junit.*;"); - } else if (line.contains("@NEVER_INLINE")) { - output.add("// " + line); - } else if (line.startsWith("import com.sun.max.annotate.")) { - // do nothing - } else if (line.equals("}")) { - if (runs != null) { - int n = 0; - for (Run run : runs) { - processRun(output, run, n++); - } - runs = null; - } - output.add(line); - } else { - // line = line.replace(oldClassName, newClassName); - line = line.replace(" jtt.", " com.oracle.graal.jtt."); - output.add(line); - } - } - if (!javaHarness) { - throw new RuntimeException("no java harness"); - } - if (runs != null) { - throw new RuntimeException("no ending brace found"); - } - - Files.write(target, output, Charset.forName("UTF-8")); - } - - private static void processRun(ArrayList<String> output, Run run, int n) { - if (run.output.startsWith("!")) { - output.add(" @Test(expected = " + run.output.substring(1).replace("jtt.", "com.oracle.graal.jtt.").replace('$', '.') + ".class)"); - output.add(" public void run" + n + "() throws Throwable {"); - output.add(" test(" + parameters(run.input) + ");"); - output.add(" }"); - output.add(""); - } else { - output.add(" @Test"); - output.add(" public void run" + n + "() throws Throwable {"); - String result = parameters(run.output); - if (result.endsWith("f") || result.endsWith("d") || result.endsWith("F") || result.endsWith("D")) { - output.add(" Assert.assertEquals(" + result + ", test(" + parameters(run.input) + "), 0);"); - } else { - output.add(" Assert.assertEquals(" + result + ", test(" + parameters(run.input) + "));"); - } - output.add(" }"); - output.add(""); - } - } - - private static String parameters(String params) { - if (params.startsWith("(")) { - StringBuilder str = new StringBuilder(); - String[] split = params.substring(1, params.length() - 1).split(","); - for (int i = 0; i < split.length; i++) { - str.append(i == 0 ? "" : ", ").append(parameters(split[i].trim())); - } - return str.toString(); - } else if (params.startsWith("`")) { - return params.substring(1); - } else { - if (params.length() <= 1) { - return params; - } else { - if (params.endsWith("s")) { - return "((short) " + params.substring(0, params.length() - 1) + ")"; - } else if (params.endsWith("c")) { - return "((char) " + params.substring(0, params.length() - 1) + ")"; - } else if (params.endsWith("b")) { - return "((byte) " + params.substring(0, params.length() - 1) + ")"; - } - } - return params.replace("jtt.", "com.oracle.graal.jtt."); - } - } - - private static int charCount(String str, char ch1) { - int count = 0; - for (int i = 0; i < str.length(); i++) { - if (str.charAt(i) == ch1) { - count++; - } - } - return count; - } - - private static int charCount(String str, char ch1, char ch2) { - int count = 0; - for (int i = 0; i < str.length(); i++) { - if (str.charAt(i) == ch1 || str.charAt(i) == ch2) { - count++; - } - } - return count; - } - -}
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/JTTTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/JTTTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,11 +27,11 @@ import java.util.Collections; import java.util.Set; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/backend/ConstantPhiTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/backend/ConstantPhiTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,8 +27,8 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/backend/LargeConstantSectionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/backend/LargeConstantSectionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,8 +34,8 @@ import static jdk.internal.org.objectweb.asm.Opcodes.LLOAD; import static jdk.internal.org.objectweb.asm.Opcodes.LRETURN; import static jdk.internal.org.objectweb.asm.Opcodes.RETURN; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.Label; import jdk.internal.org.objectweb.asm.MethodVisitor;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/bytecode/BC_instanceof01.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/bytecode/BC_instanceof01.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.jtt.bytecode; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_field01.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_field01.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ // Checkstyle: stop package com.oracle.graal.jtt.hotpath; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_field03.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotpath/HP_field03.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ // Checkstyle: stop package com.oracle.graal.jtt.hotpath; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6186134.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/hotspot/Test6186134.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,10 @@ import java.util.ArrayList; +import org.junit.Before; import org.junit.Test; +import com.oracle.graal.compiler.common.util.ArraySet; import com.oracle.graal.jtt.JTTTest; // @formatter:off @@ -68,6 +70,12 @@ return 0; } + @Before + public void setUp() { + /* Ensure that ArrayList is _not_ a leaf class (otherwise code installation may fail due to a failed leaf type dependency). */ + UNSAFE.ensureClassInitialized(ArraySet.class); + } + @Test public void run0() throws Throwable { runTest("test", 100);
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/System_setOut.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/System_setOut.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,6 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import org.junit.Ignore; import org.junit.Test; import com.oracle.graal.jtt.JTTTest; @@ -62,7 +61,6 @@ } @Test - @Ignore("Ignored temporarily as under certain conditions it creates too large code in TraceRA gate") public void run0() throws Throwable { runTest("test", 10000); }
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/Unsafe_compareAndSwap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/jdk/Unsafe_compareAndSwap.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.jtt.jdk; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/LambdaEagerTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/lang/LambdaEagerTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,11 +25,11 @@ import java.util.EnumSet; import java.util.function.IntBinaryOperator; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopNewInstance.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/loop/LoopNewInstance.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.jtt.loop; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConditionalElimination01.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConditionalElimination01.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.jtt.optimize; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConditionalElimination02.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/optimize/ConditionalElimination02.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.DeoptimizationReason; import org.junit.Test;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64AddressValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64AddressValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,15 +23,15 @@ package com.oracle.graal.lir.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; +import static jdk.vm.ci.code.ValueUtil.isLegal; import java.util.EnumSet; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64Address.Scale;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.lir.amd64; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.asm.Label; import com.oracle.graal.asm.amd64.AMD64Address;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArithmeticLIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2013, 2014, 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.lir.amd64; - -import jdk.internal.jvmci.meta.Value; - -/** - * This interface can be used to generate AMD64 LIR for arithmetic operations. - */ -public interface AMD64ArithmeticLIRGenerator { - - Value emitMathLog(Value input, boolean base10); - - Value emitMathCos(Value input); - - Value emitMathSin(Value input); - - Value emitMathTan(Value input); -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArithmeticLIRGeneratorTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2013, 2014, 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.lir.amd64; + +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; + +import jdk.vm.ci.meta.Value; + +/** + * This interface can be used to generate AMD64 LIR for arithmetic operations. + */ +public interface AMD64ArithmeticLIRGeneratorTool extends ArithmeticLIRGeneratorTool { + + Value emitMathLog(Value input, boolean base10); + + Value emitMathCos(Value input); + + Value emitMathSin(Value input); + + Value emitMathTan(Value input); + + Value emitCountLeadingZeros(Value value); + + Value emitCountTrailingZeros(Value value); +}
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,19 +24,19 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.ILLEGAL; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; import java.lang.reflect.Array; import java.lang.reflect.Field; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64.CPUFeature; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64.CPUFeature; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import sun.misc.Unsafe; import com.oracle.graal.asm.Label;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Binary.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Binary.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,15 +26,15 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.HINT; 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.differentRegisters; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.sameRegister; -import jdk.internal.jvmci.code.CompilationResult.DataSectionReference; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.differentRegisters; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.sameRegister; +import jdk.vm.ci.code.CompilationResult.DataSectionReference; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.asm.amd64.AMD64Address;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64BinaryConsumer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64BinaryConsumer.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,13 +25,13 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.COMPOSITE; 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.CompilationResult.DataSectionReference; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import jdk.vm.ci.code.CompilationResult.DataSectionReference; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.asm.amd64.AMD64Address;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64BreakpointOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64BreakpointOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ByteSwapOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ByteSwapOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.lir.amd64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64CCall.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64CCall.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ 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 jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,18 +25,18 @@ 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 jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.InvokeTarget; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.InvokeTarget; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ClearRegisterOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ClearRegisterOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import static com.oracle.graal.asm.amd64.AMD64Assembler.AMD64BinaryArithmetic.XOR; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64RMOp; import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,17 +27,17 @@ 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 jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.CompilationResult.JumpTable; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.CompilationResult.JumpTable; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.Label; import com.oracle.graal.asm.NumUtil;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.lir.amd64; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.meta.LIRKind; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.lir.framemap.FrameMap;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMapBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMapBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.lir.amd64; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.StackSlot; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.StackSlot; import com.oracle.graal.lir.framemap.FrameMap; import com.oracle.graal.lir.framemap.FrameMapBuilderImpl;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64MathIntrinsicOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64MathIntrinsicOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.lir.amd64; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,19 +31,18 @@ import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; import static java.lang.Double.doubleToRawLongBits; import static java.lang.Float.floatToRawIntBits; -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 static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.amd64.AMD64Kind; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.amd64.AMD64Kind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.asm.amd64.AMD64Address; @@ -57,6 +56,7 @@ import com.oracle.graal.lir.StandardOp.LoadConstantOp; import com.oracle.graal.lir.StandardOp.NullCheck; import com.oracle.graal.lir.StandardOp.ValueMoveOp; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.asm.CompilationResultBuilder; public class AMD64Move { @@ -163,11 +163,11 @@ @Def({STACK}) protected AllocatableValue result; @Use({STACK, HINT}) protected AllocatableValue input; - @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private StackSlotValue backupSlot; + @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private AllocatableValue backupSlot; private Register scratch; - public AMD64StackMove(AllocatableValue result, AllocatableValue input, Register scratch, StackSlotValue backupSlot) { + public AMD64StackMove(AllocatableValue result, AllocatableValue input, Register scratch, AllocatableValue backupSlot) { super(TYPE); this.result = result; this.input = input; @@ -189,7 +189,7 @@ return scratch; } - public StackSlotValue getBackupSlot() { + public AllocatableValue getBackupSlot() { return backupSlot; } @@ -217,11 +217,11 @@ @Def({STACK}) protected AllocatableValue[] results; @Use({STACK}) protected Value[] inputs; - @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private StackSlotValue backupSlot; + @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private AllocatableValue backupSlot; private Register scratch; - public AMD64MultiStackMove(AllocatableValue[] results, Value[] inputs, Register scratch, StackSlotValue backupSlot) { + public AMD64MultiStackMove(AllocatableValue[] results, Value[] inputs, Register scratch, AllocatableValue backupSlot) { super(TYPE); this.results = results; this.inputs = inputs; @@ -323,13 +323,13 @@ public static final LIRInstructionClass<StackLeaOp> TYPE = LIRInstructionClass.create(StackLeaOp.class); @Def({REG}) protected AllocatableValue result; - @Use({STACK, UNINITIALIZED}) protected StackSlotValue slot; + @Use({STACK, UNINITIALIZED}) protected AllocatableValue slot; - public StackLeaOp(AllocatableValue result, StackSlotValue slot) { + public StackLeaOp(AllocatableValue result, AllocatableValue slot) { super(TYPE); - assert isStackSlotValue(slot) : "Not a stack slot: " + slot; this.result = result; this.slot = slot; + assert slot instanceof VirtualStackSlot || slot instanceof StackSlot; } @Override
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64MulDivOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64MulDivOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,14 +29,14 @@ 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.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64RestoreRegistersOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64RestoreRegistersOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,19 +23,19 @@ package com.oracle.graal.lir.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.Arrays; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.ValueUtil; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.LIRValueUtil; import com.oracle.graal.lir.Opcode; import com.oracle.graal.lir.asm.CompilationResultBuilder; @@ -49,20 +49,20 @@ /** * The slots from which the registers are restored. */ - @Use(STACK) protected final StackSlotValue[] slots; + @Use(STACK) protected final AllocatableValue[] slots; /** * The operation that saved the registers restored by this operation. */ private final AMD64SaveRegistersOp save; - public AMD64RestoreRegistersOp(StackSlotValue[] values, AMD64SaveRegistersOp save) { + public AMD64RestoreRegistersOp(AllocatableValue[] values, AMD64SaveRegistersOp save) { this(TYPE, values, save); } - protected AMD64RestoreRegistersOp(LIRInstructionClass<? extends AMD64RestoreRegistersOp> c, StackSlotValue[] values, AMD64SaveRegistersOp save) { + protected AMD64RestoreRegistersOp(LIRInstructionClass<? extends AMD64RestoreRegistersOp> c, AllocatableValue[] values, AMD64SaveRegistersOp save) { super(c); - assert Arrays.asList(values).stream().allMatch(ValueUtil::isVirtualStackSlot); + assert Arrays.asList(values).stream().allMatch(LIRValueUtil::isVirtualStackSlot); this.slots = values; this.save = save; }
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64SaveRegistersOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64SaveRegistersOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,21 +23,21 @@ package com.oracle.graal.lir.amd64; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.Arrays; import java.util.Set; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.ValueUtil; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.LIRValueUtil; import com.oracle.graal.lir.Opcode; import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.asm.CompilationResultBuilder; @@ -58,7 +58,7 @@ /** * The slots to which the registers are saved. */ - @Def(STACK) protected final StackSlotValue[] slots; + @Def(STACK) protected final AllocatableValue[] slots; /** * Specifies if {@link #remove(Set)} should have an effect. @@ -72,13 +72,13 @@ * @param savedRegisterLocations the slots to which the registers are saved * @param supportsRemove determines if registers can be {@linkplain #remove(Set) pruned} */ - public AMD64SaveRegistersOp(Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove) { + public AMD64SaveRegistersOp(Register[] savedRegisters, AllocatableValue[] savedRegisterLocations, boolean supportsRemove) { this(TYPE, savedRegisters, savedRegisterLocations, supportsRemove); } - public AMD64SaveRegistersOp(LIRInstructionClass<? extends AMD64SaveRegistersOp> c, Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove) { + public AMD64SaveRegistersOp(LIRInstructionClass<? extends AMD64SaveRegistersOp> c, Register[] savedRegisters, AllocatableValue[] savedRegisterLocations, boolean supportsRemove) { super(c); - assert Arrays.asList(savedRegisterLocations).stream().allMatch(ValueUtil::isVirtualStackSlot); + assert Arrays.asList(savedRegisterLocations).stream().allMatch(LIRValueUtil::isVirtualStackSlot); this.savedRegisters = savedRegisters; this.slots = savedRegisterLocations; this.supportsRemove = supportsRemove; @@ -99,7 +99,7 @@ } } - public StackSlotValue[] getSlots() { + public AllocatableValue[] getSlots() { return slots; }
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ShiftOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ShiftOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.HINT; 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 jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp; import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64SignExtendOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64SignExtendOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,10 +25,10 @@ import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.DWORD; import static com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize.QWORD; 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.LIRKind; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize; import com.oracle.graal.asm.amd64.AMD64MacroAssembler;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Unary.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Unary.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,11 +26,11 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.HINT; 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.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.amd64.AMD64Address; import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ZapRegistersOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ZapRegistersOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,12 +26,12 @@ import java.util.Set; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; import com.oracle.graal.asm.amd64.AMD64MacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/phases/StackMoveOptimizationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/phases/StackMoveOptimizationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,14 +28,13 @@ import java.util.Collections; import java.util.List; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.options.NestedBooleanOptionValue; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.options.NestedBooleanOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug; @@ -83,7 +82,7 @@ private Register reg = null; private List<AllocatableValue> dst; private List<Value> src; - private StackSlotValue slot; + private AllocatableValue slot; private boolean removed = false; public void process(List<LIRInstruction> instructions) {
--- a/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/ConstantStackCastTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/ConstantStackCastTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,18 +24,18 @@ import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import org.junit.Before; import org.junit.Test; import com.oracle.graal.lir.ConstantValue; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.gen.LIRGeneratorTool; @@ -62,7 +62,7 @@ public void generate(LIRGeneratorTool gen, Value value) { FrameMapBuilder frameMapBuilder = gen.getResult().getFrameMapBuilder(); // create slots - StackSlotValue s1 = frameMapBuilder.allocateSpillSlot(dstKind); + VirtualStackSlot s1 = frameMapBuilder.allocateSpillSlot(dstKind); // move stuff around Value srcValue; if (isJavaConstant(value)) {
--- a/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/LIRTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/LIRTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,9 +30,9 @@ import java.lang.reflect.Modifier; import java.util.stream.Stream; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/LIRTestSpecification.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/LIRTestSpecification.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.HashMap; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.gen.LIRGeneratorTool;
--- a/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/LIRTestTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/LIRTestTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.jtt; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import org.junit.Test;
--- a/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/StackMoveTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.jtt/src/com/oracle/graal/lir/jtt/StackMoveTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,16 +22,16 @@ */ package com.oracle.graal.lir.jtt; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import org.junit.Before; import org.junit.Test; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.gen.LIRGeneratorTool; @@ -52,8 +52,8 @@ LIRKind lirKind = getLIRKind(a); // create slots - StackSlotValue s1 = frameMapBuilder.allocateSpillSlot(lirKind); - StackSlotValue s2 = frameMapBuilder.allocateSpillSlot(lirKind); + VirtualStackSlot s1 = frameMapBuilder.allocateSpillSlot(lirKind); + VirtualStackSlot s2 = frameMapBuilder.allocateSpillSlot(lirKind); // start emit gen.emitMove(s1, a);
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCAddressValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCAddressValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.lir.sparc; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.lir.CompositeValue;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java Fri Oct 30 20:56:28 2015 +0100 @@ -38,25 +38,24 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.HINT; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARCKind.DOUBLE; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.SINGLE; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARC; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARCKind.DOUBLE; +import static jdk.vm.ci.sparc.SPARCKind.SINGLE; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC; import com.oracle.graal.asm.Label; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LIRInstructionClass; import com.oracle.graal.lir.Opcode; @@ -169,10 +168,10 @@ switch (opcode) { case LUREM: crb.recordImplicitException(masm.position(), state); - masm.udivx(asRegister(x, DWORD), crb.asIntConst(y), asRegister(scratch1, DWORD)); - masm.mulx(asRegister(scratch1, DWORD), crb.asIntConst(y), asRegister(scratch2, DWORD)); + masm.udivx(asRegister(x, XWORD), crb.asIntConst(y), asRegister(scratch1, XWORD)); + masm.mulx(asRegister(scratch1, XWORD), crb.asIntConst(y), asRegister(scratch2, XWORD)); getDelayedControlTransfer().emitControlTransfer(crb, masm); - masm.sub(asRegister(x, DWORD), asRegister(scratch2, DWORD), asRegister(result, DWORD)); + masm.sub(asRegister(x, XWORD), asRegister(scratch2, XWORD), asRegister(result, XWORD)); break; case IUREM: JVMCIError.unimplemented(); @@ -185,16 +184,16 @@ switch (opcode) { case LUREM: if (isJavaConstant(x)) { - new Setx(crb.asLongConst(x), asRegister(scratch2, DWORD), false).emit(masm); + masm.setx(crb.asLongConst(x), asRegister(scratch2, XWORD), false); xLeft = scratch2; } - assert !asRegister(xLeft, DWORD).equals(asRegister(scratch1, DWORD)); - assert !asRegister(y, DWORD).equals(asRegister(scratch1, DWORD)); + assert !asRegister(xLeft, XWORD).equals(asRegister(scratch1, XWORD)); + assert !asRegister(y, XWORD).equals(asRegister(scratch1, XWORD)); crb.recordImplicitException(masm.position(), state); - masm.udivx(asRegister(xLeft, DWORD), asRegister(y, DWORD), asRegister(scratch1, DWORD)); - masm.mulx(asRegister(scratch1, DWORD), asRegister(y, DWORD), asRegister(scratch1, DWORD)); + masm.udivx(asRegister(xLeft, XWORD), asRegister(y, XWORD), asRegister(scratch1, XWORD)); + masm.mulx(asRegister(scratch1, XWORD), asRegister(y, XWORD), asRegister(scratch1, XWORD)); getDelayedControlTransfer().emitControlTransfer(crb, masm); - masm.sub(asRegister(xLeft, DWORD), asRegister(scratch1, DWORD), asRegister(result, DWORD)); + masm.sub(asRegister(xLeft, XWORD), asRegister(scratch1, XWORD), asRegister(result, XWORD)); break; case IUREM: assert !asRegister(result, WORD).equals(asRegister(scratch1, WORD)); @@ -270,21 +269,21 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { Label noOverflow = new Label(); - masm.mulx(asRegister(x, DWORD), asRegister(y, DWORD), asRegister(result, DWORD)); + masm.mulx(asRegister(x, XWORD), asRegister(y, XWORD), asRegister(result, XWORD)); // Calculate the upper 64 bit signed := (umulxhi product - (x{63}&y + y{63}&x)) - masm.umulxhi(asRegister(x, DWORD), asRegister(y, DWORD), asRegister(scratch1, DWORD)); - masm.srax(asRegister(x, DWORD), 63, asRegister(scratch2, DWORD)); - masm.and(asRegister(scratch2, DWORD), asRegister(y, DWORD), asRegister(scratch2, DWORD)); - masm.sub(asRegister(scratch1, DWORD), asRegister(scratch2, DWORD), asRegister(scratch1, DWORD)); + masm.umulxhi(asRegister(x, XWORD), asRegister(y, XWORD), asRegister(scratch1, XWORD)); + masm.srax(asRegister(x, XWORD), 63, asRegister(scratch2, XWORD)); + masm.and(asRegister(scratch2, XWORD), asRegister(y, XWORD), asRegister(scratch2, XWORD)); + masm.sub(asRegister(scratch1, XWORD), asRegister(scratch2, XWORD), asRegister(scratch1, XWORD)); - masm.srax(asRegister(y, DWORD), 63, asRegister(scratch2, DWORD)); - masm.and(asRegister(scratch2, DWORD), asRegister(x, DWORD), asRegister(scratch2, DWORD)); - masm.sub(asRegister(scratch1, DWORD), asRegister(scratch2, DWORD), asRegister(scratch1, DWORD)); + masm.srax(asRegister(y, XWORD), 63, asRegister(scratch2, XWORD)); + masm.and(asRegister(scratch2, XWORD), asRegister(x, XWORD), asRegister(scratch2, XWORD)); + masm.sub(asRegister(scratch1, XWORD), asRegister(scratch2, XWORD), asRegister(scratch1, XWORD)); // Now construct the lower half and compare - masm.srax(asRegister(result, DWORD), 63, asRegister(scratch2, DWORD)); - masm.cmp(asRegister(scratch1, DWORD), asRegister(scratch2, DWORD)); + masm.srax(asRegister(result, XWORD), 63, asRegister(scratch2, XWORD)); + masm.cmp(asRegister(scratch1, XWORD), asRegister(scratch2, XWORD)); masm.bpcc(Equal, NOT_ANNUL, noOverflow, Xcc, PREDICT_TAKEN); masm.nop(); masm.wrccr(g0, 1 << (CCR_XCC_SHIFT + CCR_V_SHIFT)); @@ -327,16 +326,16 @@ masm.srax(asRegister(result, WORD), 32, asRegister(result, WORD)); break; case LMUL: - assert !asRegister(scratch, DWORD).equals(asRegister(result, DWORD)); - masm.umulxhi(asRegister(x, DWORD), asRegister(y, DWORD), asRegister(result, DWORD)); + assert !asRegister(scratch, XWORD).equals(asRegister(result, XWORD)); + masm.umulxhi(asRegister(x, XWORD), asRegister(y, XWORD), asRegister(result, XWORD)); - masm.srlx(asRegister(x, DWORD), 63, asRegister(scratch, DWORD)); - masm.mulx(asRegister(scratch, DWORD), asRegister(y, DWORD), asRegister(scratch, DWORD)); - masm.sub(asRegister(result, DWORD), asRegister(scratch, DWORD), asRegister(result, DWORD)); + masm.srlx(asRegister(x, XWORD), 63, asRegister(scratch, XWORD)); + masm.mulx(asRegister(scratch, XWORD), asRegister(y, XWORD), asRegister(scratch, XWORD)); + masm.sub(asRegister(result, XWORD), asRegister(scratch, XWORD), asRegister(result, XWORD)); - masm.srlx(asRegister(y, DWORD), 63, asRegister(scratch, DWORD)); - masm.mulx(asRegister(scratch, DWORD), asRegister(x, DWORD), asRegister(scratch, DWORD)); - masm.sub(asRegister(result, DWORD), asRegister(scratch, DWORD), asRegister(result, DWORD)); + masm.srlx(asRegister(y, XWORD), 63, asRegister(scratch, XWORD)); + masm.mulx(asRegister(scratch, XWORD), asRegister(x, XWORD), asRegister(scratch, XWORD)); + masm.sub(asRegister(result, XWORD), asRegister(scratch, XWORD), asRegister(result, XWORD)); break; default: throw JVMCIError.shouldNotReachHere();
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArrayEqualsOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -32,18 +32,18 @@ import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.Less; import static com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag.NotEqual; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARCKind.WORD; import java.lang.reflect.Array; import java.lang.reflect.Field; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARCKind; import sun.misc.Unsafe; import com.oracle.graal.asm.Label;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,17 +23,17 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass; @@ -82,7 +82,7 @@ masm.andn(dst, src, dst); masm.srl(dst, g0, dst); masm.popc(dst, dst); - } else if (tkind == DWORD) { + } else if (tkind == XWORD) { masm.sub(src, 1, dst); masm.andn(dst, src, dst); masm.popc(dst, dst); @@ -112,7 +112,7 @@ } case LBSR: { PlatformKind lkind = input.getPlatformKind(); - assert lkind == DWORD; + assert lkind == XWORD; Register tmp = asRegister(scratch); assert !tmp.equals(dst); masm.srlx(src, 1, tmp);
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBreakpointOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBreakpointOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCByteSwapOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCByteSwapOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,16 +26,16 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.UNINITIALIZED; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARCKind; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.ValueUtil; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCAssembler.Asi; @@ -52,14 +52,14 @@ @Def({REG, HINT}) protected Value result; @Use({REG}) protected Value input; @Temp({REG}) protected Value tempIndex; - @Use({STACK, UNINITIALIZED}) protected StackSlotValue tmpSlot; + @Use({STACK, UNINITIALIZED}) protected AllocatableValue tmpSlot; public SPARCByteSwapOp(LIRGeneratorTool tool, Value result, Value input) { super(TYPE, SIZE); this.result = result; this.input = input; - this.tmpSlot = tool.getResult().getFrameMapBuilder().allocateSpillSlot(LIRKind.value(DWORD)); - this.tempIndex = tool.newVariable(LIRKind.value(DWORD)); + this.tmpSlot = tool.getResult().getFrameMapBuilder().allocateSpillSlot(LIRKind.value(XWORD)); + this.tempIndex = tool.newVariable(LIRKind.value(XWORD)); } @Override @@ -67,8 +67,8 @@ SPARCAddress addr = (SPARCAddress) crb.asAddress(tmpSlot); SPARCMove.emitStore(input, addr, result.getPlatformKind(), SPARCDelayedControlTransfer.DUMMY, null, crb, masm); if (addr.getIndex().equals(Register.None)) { - Register tempReg = ValueUtil.asRegister(tempIndex, DWORD); - new SPARCMacroAssembler.Setx(addr.getDisplacement(), tempReg, false).emit(masm); + Register tempReg = ValueUtil.asRegister(tempIndex, XWORD); + masm.setx(addr.getDisplacement(), tempReg, false); addr = new SPARCAddress(addr.getBase(), tempReg); } getDelayedControlTransfer().emitControlTransfer(crb, masm); @@ -76,8 +76,8 @@ case WORD: masm.lduwa(addr.getBase(), addr.getIndex(), asRegister(result, WORD), Asi.ASI_PRIMARY_LITTLE); break; - case DWORD: - masm.ldxa(addr.getBase(), addr.getIndex(), asRegister(result, DWORD), Asi.ASI_PRIMARY_LITTLE); + case XWORD: + masm.ldxa(addr.getBase(), addr.getIndex(), asRegister(result, XWORD), Asi.ASI_PRIMARY_LITTLE); break; default: throw JVMCIError.shouldNotReachHere();
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,19 +25,18 @@ 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.sparc.SPARC.o7; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.InvokeTarget; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.sparc.SPARC.o7; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.InvokeTarget; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; 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.asm.sparc.SPARCMacroAssembler.Sethix; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LIRInstructionClass; @@ -202,7 +201,7 @@ // offset might not fit a 30-bit displacement, generate an // indirect call with a 64-bit immediate before = masm.position(); - new Sethix(0L, scratch, true).emit(masm); + masm.sethix(0L, scratch, true); masm.jmpl(scratch, 0, o7); } else { before = masm.call(0); @@ -216,7 +215,7 @@ public static void indirectJmp(CompilationResultBuilder crb, SPARCMacroAssembler masm, Register dst, InvokeTarget target) { int before = masm.position(); - new Sethix(0L, dst, true).emit(masm); + masm.sethix(0L, dst, true); masm.jmp(new SPARCAddress(dst, 0)); masm.nop(); // delay slot int after = masm.position();
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCControlFlow.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.asm.sparc.SPARCAssembler.CBCOND; +import static com.oracle.graal.asm.sparc.SPARCAssembler.INSTRUCTION_SIZE; import static com.oracle.graal.asm.sparc.SPARCAssembler.isSimm10; import static com.oracle.graal.asm.sparc.SPARCAssembler.isSimm11; import static com.oracle.graal.asm.sparc.SPARCAssembler.isSimm13; @@ -64,11 +65,11 @@ import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; import static com.oracle.graal.lir.sparc.SPARCMove.const2reg; import static com.oracle.graal.lir.sparc.SPARCOP3Op.emitOp3; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.sparc.SPARC.CPU; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.sparc.SPARC.CPU; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; import java.util.ArrayList; import java.util.EnumSet; @@ -76,16 +77,15 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARC.CPUFeature; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC.CPUFeature; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.Assembler.LabelHint; @@ -98,7 +98,6 @@ import com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.lir.LIRInstructionClass; import com.oracle.graal.lir.LabelRef; @@ -140,7 +139,7 @@ public static final class CompareBranchOp extends SPARCBlockEndOp implements SPARCDelayedControlTransfer { public static final LIRInstructionClass<CompareBranchOp> TYPE = LIRInstructionClass.create(CompareBranchOp.class); public static final SizeEstimate SIZE = SizeEstimate.create(3); - static final EnumSet<SPARCKind> SUPPORTED_KINDS = EnumSet.of(DWORD, WORD); + static final EnumSet<SPARCKind> SUPPORTED_KINDS = EnumSet.of(XWORD, WORD); @Use({REG}) protected Value x; @Use({REG, CONST}) protected Value y; @@ -282,7 +281,7 @@ private void emitCBCond(SPARCMacroAssembler masm, Value actualX, Value actualY, Label actualTrueTarget, ConditionFlag cFlag) { PlatformKind xKind = actualX.getPlatformKind(); - boolean isLong = kind == SPARCKind.DWORD; + boolean isLong = kind == SPARCKind.XWORD; if (isJavaConstant(actualY)) { JavaConstant c = asJavaConstant(actualY); long constantY = c.isNull() ? 0 : c.asLong(); @@ -512,7 +511,7 @@ boolean isShortConstant = isSimm5(constant); int cbCondPosition = masm.position(); if (!isShortConstant) { // Load constant takes one instruction - cbCondPosition += SPARC.INSTRUCTION_SIZE; + cbCondPosition += INSTRUCTION_SIZE; } boolean canUseShortBranch = masm.hasFeature(CPUFeature.CBCOND) && isShortBranch(masm, cbCondPosition, hint, target); if (bits != null && canUseShortBranch) { @@ -586,7 +585,7 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { Register value = asRegister(index, SPARCKind.WORD); - Register scratchReg = asRegister(scratch, SPARCKind.DWORD); + Register scratchReg = asRegister(scratch, SPARCKind.XWORD); // Compare index against jump table bounds int highKey = lowKey + targets.length - 1; @@ -597,7 +596,7 @@ } else { try (ScratchRegister sc = masm.getScratchRegister()) { Register scratch2 = sc.getRegister(); - new Setx(lowKey, scratch2).emit(masm); + masm.setx(lowKey, scratch2, false); masm.sub(value, scratch2, scratchReg); } } @@ -607,7 +606,7 @@ if (isSimm13(upperLimit)) { masm.cmp(scratchReg, upperLimit); } else { - new Setx(upperLimit, scratch2).emit(masm); + masm.setx(upperLimit, scratch2, false); masm.cmp(scratchReg, upperLimit); }
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFloatCompareOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFloatCompareOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCAssembler.CC;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.lir.sparc; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.lir.framemap.FrameMap; @@ -110,7 +110,7 @@ */ @Override public int spillSlotSize(LIRKind kind) { - return Math.max(kind.getPlatformKind().getSizeInBytes(), SPARC.MEMORY_ACCESS_ALIGN); + return kind.getPlatformKind().getSizeInBytes(); } @Override @@ -131,6 +131,6 @@ public StackSlot allocateDeoptimizationRescueSlot() { assert spillSize == initialSpillSize : "Deoptimization rescue slot must be the first stack slot"; - return allocateSpillSlot(LIRKind.value(SPARCKind.DWORD)); + return allocateSpillSlot(LIRKind.value(SPARCKind.XWORD)); } }
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMapBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMapBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.lir.sparc; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.StackSlot; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.StackSlot; import com.oracle.graal.lir.framemap.FrameMap; import com.oracle.graal.lir.framemap.FrameMapBuilderImpl;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCImmediateAddressValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCImmediateAddressValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,14 +23,14 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isLegal; import java.util.EnumSet; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCAssembler;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCIndexedAddressValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCIndexedAddressValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,14 +23,14 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isLegal; import java.util.EnumSet; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.lir.CompositeValue;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLIRInstruction.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLIRInstruction.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.sparc; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.asm.NumUtil; import com.oracle.graal.asm.sparc.SPARCMacroAssembler;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCLoadConstantTableBaseOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; @@ -55,7 +55,7 @@ * CodeInstaller::pd_patch_DataSectionReference * * @see SPARCMove#loadFromConstantTable(CompilationResultBuilder, SPARCMacroAssembler, int, - * Register, Register, SPARCDelayedControlTransfer, Runnable) + * Register, jdk.vm.ci.meta.Constant, Register, SPARCDelayedControlTransfer) */ public class SPARCLoadConstantTableBaseOp extends SPARCLIRInstruction { public static final LIRInstructionClass<SPARCLoadConstantTableBaseOp> TYPE = LIRInstructionClass.create(SPARCLoadConstantTableBaseOp.class);
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,10 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.asm.sparc.SPARCAssembler.MEMBAR_STORE_LOAD; +import static com.oracle.graal.asm.sparc.SPARCAssembler.isCPURegister; +import static com.oracle.graal.asm.sparc.SPARCAssembler.isDoubleFloatRegister; import static com.oracle.graal.asm.sparc.SPARCAssembler.isSimm13; +import static com.oracle.graal.asm.sparc.SPARCAssembler.isSingleFloatRegister; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.COMPOSITE; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.HINT; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.ILLEGAL; @@ -32,39 +35,36 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.UNINITIALIZED; import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.MemoryBarriers.STORE_LOAD; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import static jdk.internal.jvmci.sparc.SPARCKind.DOUBLE; -import static jdk.internal.jvmci.sparc.SPARCKind.DWORD; -import static jdk.internal.jvmci.sparc.SPARCKind.SINGLE; -import static jdk.internal.jvmci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.code.MemoryBarriers.STORE_LOAD; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.sparc.SPARC.g0; +import static jdk.vm.ci.sparc.SPARCKind.DOUBLE; +import static jdk.vm.ci.sparc.SPARCKind.SINGLE; +import static jdk.vm.ci.sparc.SPARCKind.WORD; +import static jdk.vm.ci.sparc.SPARCKind.XWORD; import java.util.Set; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARC.CPUFeature; -import jdk.internal.jvmci.sparc.SPARCKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARC.CPUFeature; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.ScratchRegister; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Sethix; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Setx; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LIRInstructionClass; import com.oracle.graal.lir.Opcode; @@ -72,6 +72,7 @@ import com.oracle.graal.lir.StandardOp.LoadConstantOp; import com.oracle.graal.lir.StandardOp.NullCheck; import com.oracle.graal.lir.StandardOp.ValueMoveOp; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.asm.CompilationResultBuilder; public class SPARCMove { @@ -126,15 +127,14 @@ public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { final int byteCount = result.getPlatformKind().getSizeInBytes(); assert byteCount > 1 : "Byte values must not be loaded via constant table"; - final Runnable recordReference = () -> crb.recordDataReferenceInCode(constant, byteCount); Register baseRegister = asRegister(constantTableBase); if (isRegister(result)) { Register resultRegister = asRegister(result); - loadFromConstantTable(crb, masm, byteCount, baseRegister, resultRegister, getDelayedControlTransfer(), recordReference); + loadFromConstantTable(crb, masm, byteCount, baseRegister, constant, resultRegister, getDelayedControlTransfer()); } else if (isStackSlot(result)) { try (ScratchRegister scratch = masm.getScratchRegister()) { Register scratchRegister = scratch.getRegister(); - loadFromConstantTable(crb, masm, byteCount, baseRegister, scratchRegister, getDelayedControlTransfer(), recordReference); + loadFromConstantTable(crb, masm, byteCount, baseRegister, constant, scratchRegister, getDelayedControlTransfer()); StackSlot slot = asStackSlot(result); reg2stack(crb, masm, slot, scratchRegister.asValue(), getDelayedControlTransfer()); } @@ -222,7 +222,7 @@ if (inputKind == WORD) { masm.movxtod(asRegister(input, WORD), asRegister(result, DOUBLE)); } else { - masm.movxtod(asRegister(input, DWORD), asRegister(result, DOUBLE)); + masm.movxtod(asRegister(input, XWORD), asRegister(result, DOUBLE)); } } else if (inputKind == SINGLE) { if (resultKind == WORD) { @@ -231,8 +231,8 @@ masm.movstouw(asRegister(input, SINGLE), asRegister(result, WORD)); } } else if (inputKind == DOUBLE) { - if (resultKind == DWORD) { - masm.movdtox(asRegister(input, DOUBLE), asRegister(result, DWORD)); + if (resultKind == XWORD) { + masm.movdtox(asRegister(input, DOUBLE), asRegister(result, XWORD)); } else { throw JVMCIError.shouldNotReachHere(); } @@ -321,7 +321,7 @@ @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { SPARCAddress address = addressValue.toAddress(); - loadEffectiveAddress(crb, masm, address, asRegister(result, DWORD), getDelayedControlTransfer()); + loadEffectiveAddress(crb, masm, address, asRegister(result, XWORD), getDelayedControlTransfer()); } } @@ -343,7 +343,7 @@ assert addr == masm.getPlaceholder(); final boolean forceRelocatable = true; Register dstReg = asRegister(result); - new Setx(0, dstReg, forceRelocatable).emit(masm); + masm.setx(0, dstReg, forceRelocatable); } @Override @@ -437,18 +437,19 @@ public static final SizeEstimate SIZE = SizeEstimate.create(2); @Def({REG}) protected AllocatableValue result; - @Use({STACK, UNINITIALIZED}) protected StackSlotValue slot; + @Use({STACK, UNINITIALIZED}) protected AllocatableValue slot; - public StackLoadAddressOp(AllocatableValue result, StackSlotValue address) { + public StackLoadAddressOp(AllocatableValue result, AllocatableValue slot) { super(TYPE, SIZE); this.result = result; - this.slot = address; + this.slot = slot; + assert slot instanceof VirtualStackSlot || slot instanceof StackSlot; } @Override public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { SPARCAddress address = (SPARCAddress) crb.asAddress(slot); - loadEffectiveAddress(crb, masm, address, asRegister(result, DWORD), getDelayedControlTransfer()); + loadEffectiveAddress(crb, masm, address, asRegister(result, XWORD), getDelayedControlTransfer()); } } @@ -459,7 +460,7 @@ masm.add(address.getBase(), address.getDisplacement(), result); } else { assert result.encoding() != address.getBase().encoding(); - new Setx(address.getDisplacement(), result).emit(masm); + masm.setx(address.getDisplacement(), result, false); // No relocation, therefore, the add can be delayed as well delaySlotHolder.emitControlTransfer(crb, masm); masm.add(address.getBase(), result, result); @@ -593,11 +594,11 @@ return; } delaySlotLir.emitControlTransfer(crb, masm); - if (SPARC.isCPURegister(src) && SPARC.isCPURegister(dst)) { + if (isCPURegister(src) && isCPURegister(dst)) { masm.mov(src, dst); - } else if (SPARC.isSingleFloatRegister(src) && SPARC.isSingleFloatRegister(dst)) { + } else if (isSingleFloatRegister(src) && isSingleFloatRegister(dst)) { masm.fsrc2s(src, dst); - } else if (SPARC.isDoubleFloatRegister(src) && SPARC.isDoubleFloatRegister(dst)) { + } else if (isDoubleFloatRegister(src) && isDoubleFloatRegister(dst)) { masm.fsrc2d(src, dst); } else { throw JVMCIError.shouldNotReachHere(String.format("Trying to move between register domains src: %s dst: %s", src, dst)); @@ -617,7 +618,7 @@ public static SPARCAddress generateSimm13OffsetLoad(SPARCAddress addr, SPARCMacroAssembler masm, Register scratch) { boolean displacementOutOfBound = addr.getIndex().equals(Register.None) && !SPARCAssembler.isSimm13(addr.getDisplacement()); if (displacementOutOfBound) { - new Setx(addr.getDisplacement(), scratch, false).emit(masm); + masm.setx(addr.getDisplacement(), scratch, false); return new SPARCAddress(addr.getBase(), scratch); } else { return addr; @@ -632,7 +633,6 @@ boolean hasVIS3 = cpuFeatures.contains(CPUFeature.VIS3); Register resultRegister = asRegister(result); int byteCount = result.getPlatformKind().getSizeInBytes(); - Runnable recordReference = () -> crb.recordDataReferenceInCode(input, byteCount); switch (input.getJavaKind().getStackKind()) { case Int: if (input.isDefaultForKind()) { @@ -645,7 +645,7 @@ if (constantTableBase.equals(g0)) { throw JVMCIError.shouldNotReachHere(); } else { - loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, input, resultRegister, delaySlotLir); } } break; @@ -657,7 +657,7 @@ delaySlotLir.emitControlTransfer(crb, masm); masm.or(g0, (int) input.asLong(), resultRegister); } else { - loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, input, resultRegister, delaySlotLir); } break; case Float: { @@ -673,7 +673,7 @@ masm.movwtos(scratch, resultRegister); } else { // First load the address into the scratch register - loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, input, resultRegister, delaySlotLir); } } break; @@ -690,7 +690,7 @@ delaySlotLir.emitControlTransfer(crb, masm); masm.movxtod(scratch, resultRegister); } else { - loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, input, resultRegister, delaySlotLir); } } break; @@ -700,7 +700,7 @@ delaySlotLir.emitControlTransfer(crb, masm); masm.clr(resultRegister); } else { - loadFromConstantTable(crb, masm, byteCount, constantTableBase, resultRegister, delaySlotLir, recordReference); + loadFromConstantTable(crb, masm, byteCount, constantTableBase, input, resultRegister, delaySlotLir); } break; default: @@ -716,7 +716,7 @@ case WORD: masm.cas(asRegister(address), asRegister(cmpValue), asRegister(newValue)); break; - case DWORD: + case XWORD: masm.casx(asRegister(address), asRegister(cmpValue), asRegister(newValue)); break; default: @@ -759,8 +759,8 @@ * generated patterns by this method must be understood by * CodeInstaller::pd_patch_DataSectionReference (jvmciCodeInstaller_sparc.cpp). */ - public static void loadFromConstantTable(CompilationResultBuilder crb, SPARCMacroAssembler masm, int byteCount, Register constantTableBase, Register dest, - SPARCDelayedControlTransfer delaySlotInstruction, Runnable recordReference) { + public static void loadFromConstantTable(CompilationResultBuilder crb, SPARCMacroAssembler masm, int byteCount, Register constantTableBase, Constant input, Register dest, + SPARCDelayedControlTransfer delaySlotInstruction) { SPARCAddress address; ScratchRegister scratch = null; try { @@ -768,12 +768,12 @@ address = new SPARCAddress(constantTableBase, 0); // Make delayed only, when using immediate constant load. delaySlotInstruction.emitControlTransfer(crb, masm); - recordReference.run(); + crb.recordDataReferenceInCode(input, byteCount); } else { scratch = masm.getScratchRegister(); Register sr = scratch.getRegister(); - recordReference.run(); - new Sethix(0, sr, true).emit(masm); + crb.recordDataReferenceInCode(input, byteCount); + masm.sethix(0, sr, true); address = new SPARCAddress(sr, 0); } masm.ld(address, dest, byteCount, false);
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCOP3Op.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCOP3Op.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,13 +27,13 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.common.JVMCIError.shouldNotReachHere; -import static jdk.internal.jvmci.sparc.SPARC.g0; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.common.JVMCIError.shouldNotReachHere; +import static jdk.vm.ci.sparc.SPARC.g0; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCAssembler.Op3s;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCOPFOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCOPFOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.lir.sparc; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.REG; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.sparc.SPARC; -import jdk.internal.jvmci.sparc.SPARCKind; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.sparc.SPARC; +import jdk.vm.ci.sparc.SPARCKind; import com.oracle.graal.asm.sparc.SPARCAssembler; import com.oracle.graal.asm.sparc.SPARCAssembler.Opfs;
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCSaveRegistersOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCSaveRegistersOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,23 +24,23 @@ import static com.oracle.graal.lir.LIRInstruction.OperandFlag.STACK; import static com.oracle.graal.lir.sparc.SPARCDelayedControlTransfer.DUMMY; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.Arrays; import java.util.Set; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.ValueUtil; -import jdk.internal.jvmci.sparc.SPARC; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.sparc.SPARC; import com.oracle.graal.asm.sparc.SPARCAddress; import com.oracle.graal.asm.sparc.SPARCMacroAssembler; import com.oracle.graal.lir.LIRInstructionClass; +import com.oracle.graal.lir.LIRValueUtil; import com.oracle.graal.lir.Opcode; import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.asm.CompilationResultBuilder; @@ -62,7 +62,7 @@ /** * The slots to which the registers are saved. */ - @Def(STACK) protected final StackSlotValue[] slots; + @Def(STACK) protected final AllocatableValue[] slots; /** * Specifies if {@link #remove(Set)} should have an effect. @@ -76,9 +76,9 @@ * @param savedRegisterLocations the slots to which the registers are saved * @param supportsRemove determines if registers can be {@linkplain #remove(Set) pruned} */ - public SPARCSaveRegistersOp(Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove) { + public SPARCSaveRegistersOp(Register[] savedRegisters, AllocatableValue[] savedRegisterLocations, boolean supportsRemove) { super(TYPE, SIZE); - assert Arrays.asList(savedRegisterLocations).stream().allMatch(ValueUtil::isVirtualStackSlot); + assert Arrays.asList(savedRegisterLocations).stream().allMatch(LIRValueUtil::isVirtualStackSlot); this.savedRegisters = savedRegisters; this.slots = savedRegisterLocations; this.supportsRemove = supportsRemove; @@ -107,7 +107,7 @@ } } - public StackSlotValue[] getSlots() { + public AllocatableValue[] getSlots() { return slots; }
--- a/graal/com.oracle.graal.lir.test/src/com/oracle/graal/lir/test/CompositeValueReplacementTest1.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.test/src/com/oracle/graal/lir/test/CompositeValueReplacementTest1.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,8 +29,8 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import org.junit.Test;
--- a/graal/com.oracle.graal.lir.test/src/com/oracle/graal/lir/test/GenericValueMapTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir.test/src/com/oracle/graal/lir/test/GenericValueMapTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.Register.RegisterCategory; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.Register.RegisterCategory; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; import org.junit.Test;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,8 +28,8 @@ import java.lang.annotation.Target; import java.util.EnumSet; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/CompositeValueClass.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.Arrays; import java.util.EnumSet; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.FieldIntrospection; import com.oracle.graal.compiler.common.Fields;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ConstantValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ConstantValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.lir; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; /** * Represents an inlined {@link Constant} value.
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.Iterator; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.ArrayList; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.StandardOp.LoadConstantOp;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FullInfopointOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FullInfopointOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir; -import jdk.internal.jvmci.code.InfopointReason; +import jdk.vm.ci.code.InfopointReason; import com.oracle.graal.lir.asm.CompilationResultBuilder;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/InstructionValueConsumer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/InstructionValueConsumer.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/InstructionValueProcedure.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/InstructionValueProcedure.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRFrameState.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRFrameState.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,22 +22,22 @@ */ package com.oracle.graal.lir; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isConstantJavaValue; -import static jdk.internal.jvmci.code.ValueUtil.isIllegalJavaValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualObject; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.asAllocatableValue; +import static jdk.vm.ci.code.ValueUtil.isConstantJavaValue; +import static jdk.vm.ci.code.ValueUtil.isIllegalJavaValue; +import static jdk.vm.ci.code.ValueUtil.isVirtualObject; import java.util.Arrays; import java.util.EnumSet; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.DebugInfo; -import jdk.internal.jvmci.code.StackLockValue; -import jdk.internal.jvmci.code.VirtualObject; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.DebugInfo; +import jdk.vm.ci.code.StackLockValue; +import jdk.vm.ci.code.VirtualObject; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; @@ -136,7 +136,7 @@ } Value slot = monitor.getSlot(); if (isVirtualStackSlot(slot)) { - monitor.setSlot(asStackSlotValue(proc.doValue(inst, slot, OperandMode.ALIVE, STATE_FLAGS))); + monitor.setSlot(asAllocatableValue(proc.doValue(inst, slot, OperandMode.ALIVE, STATE_FLAGS))); } } else { assert unprocessed(value);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRInstruction.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRInstruction.java Fri Oct 30 20:56:28 2015 +0100 @@ -40,10 +40,10 @@ import java.util.EnumMap; import java.util.EnumSet; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRInstructionClass.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRInstructionClass.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,9 +26,9 @@ import java.util.Arrays; import java.util.EnumSet; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.Fields; import com.oracle.graal.compiler.common.FieldsScanner;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRIntrospection.java Fri Oct 30 20:56:28 2015 +0100 @@ -36,9 +36,9 @@ import java.util.Map; import java.util.Map.Entry; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.FieldIntrospection; import com.oracle.graal.compiler.common.Fields;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRValueUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRValueUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2015, 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 @@ -22,9 +22,10 @@ */ package com.oracle.graal.lir; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.Value; public final class LIRValueUtil { @@ -59,4 +60,19 @@ public static JavaConstant asJavaConstant(Value value) { return asConstantValue(value).getJavaConstant(); } + + public static boolean isStackSlotValue(Value value) { + assert value != null; + return value instanceof StackSlot || value instanceof VirtualStackSlot; + } + + public static boolean isVirtualStackSlot(Value value) { + assert value != null; + return value instanceof VirtualStackSlot; + } + + public static VirtualStackSlot asVirtualStackSlot(Value value) { + assert value != null; + return (VirtualStackSlot) value; + } }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRVerifier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIRVerifier.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,19 +24,19 @@ import static com.oracle.graal.lir.LIRValueUtil.asVariable; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.Arrays; import java.util.BitSet; import java.util.EnumSet; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.TTY;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.StandardOp.ImplicitNullCheck;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.lir; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.Arrays; import java.util.Collections; @@ -31,11 +31,11 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/SimpleInfopointOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/SimpleInfopointOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.lir; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.code.DebugInfo; -import jdk.internal.jvmci.code.InfopointReason; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.code.DebugInfo; +import jdk.vm.ci.code.InfopointReason; import com.oracle.graal.lir.asm.CompilationResultBuilder;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Fri Oct 30 20:56:28 2015 +0100 @@ -32,14 +32,13 @@ import java.util.List; import java.util.Set; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.Label; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -314,19 +313,6 @@ } /** - * An operation that takes one input and stores it in a stack slot as well as to an ordinary - * variable. - */ - public interface StackStoreOp { - - Value getInput(); - - AllocatableValue getResult(); - - StackSlotValue getStackSlot(); - } - - /** * A LIR operation that does nothing. If the operation records its position, it can be * subsequently {@linkplain #replace(LIR, LIRInstruction) replaced}. */
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/SwitchStrategy.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/SwitchStrategy.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.util.Arrays; import java.util.Comparator; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.Label;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValueConsumer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValueConsumer.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValueProcedure.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ValueProcedure.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/Variable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/Variable.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.lir; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; /** * Represents a value that is yet to be bound to a machine location (such as a {@link RegisterValue}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/VirtualStackSlot.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2014, 2015, 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.lir; + +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; + +/** + * {@link VirtualStackSlot}s are stack slots that are not yet fixed to specific frame offset. They + * are replaced by real {@link StackSlot}s with a fixed position in the frame before code emission. + */ +public abstract class VirtualStackSlot extends AllocatableValue { + + private final int id; + + public VirtualStackSlot(int id, LIRKind lirKind) { + super(lirKind); + this.id = id; + } + + public int getId() { + return id; + } + + @Override + public String toString() { + return "vstack:" + id + getKindSuffix(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + id; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + VirtualStackSlot other = (VirtualStackSlot) obj; + if (id != other.id) { + return false; + } + return true; + } + +}
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/Interval.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/Interval.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, 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 @@ -23,27 +23,26 @@ package com.oracle.graal.lir.alloc.lsra; import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.util.IntList; import com.oracle.graal.compiler.common.util.Util; @@ -468,7 +467,7 @@ /** * The stack slot to which all splits of this interval are spilled if necessary. */ - private StackSlotValue spillSlot; + private AllocatableValue spillSlot; /** * The kind of this interval. @@ -631,11 +630,12 @@ /** * Gets the canonical spill slot for this interval. */ - public StackSlotValue spillSlot() { + public AllocatableValue spillSlot() { return splitParent().spillSlot; } - public void setSpillSlot(StackSlotValue slot) { + public void setSpillSlot(AllocatableValue slot) { + assert isStackSlotValue(slot); assert splitParent().spillSlot == null || (isVirtualStackSlot(splitParent().spillSlot) && isStackSlot(slot)) : "connot overwrite existing spill slot"; splitParent().spillSlot = slot; }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, 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 @@ -25,32 +25,30 @@ import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; import static com.oracle.graal.lir.LIRValueUtil.isVariable; import static com.oracle.graal.lir.phases.LIRPhase.Options.LIROptimization; -import static jdk.internal.jvmci.code.CodeUtil.isEven; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.CodeUtil.isEven; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isLegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.Arrays; import java.util.BitSet; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterAttributes; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.options.NestedBooleanOptionValue; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterAttributes; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.options.NestedBooleanOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -64,6 +62,7 @@ import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.ValueConsumer; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.alloc.lsra.Interval.RegisterBinding; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.gen.LIRGenerationResult; @@ -171,9 +170,10 @@ * The {@linkplain #operandNumber(Value) number} of the first variable operand allocated. */ private final int firstVariableNumber; + private final boolean neverSpillConstants; protected LinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig, - List<? extends AbstractBlockBase<?>> sortedBlocks) { + List<? extends AbstractBlockBase<?>> sortedBlocks, boolean neverSpillConstants) { this.ir = res.getLIR(); this.moveFactory = spillMoveFactory; this.frameMapBuilder = res.getFrameMapBuilder(); @@ -184,6 +184,7 @@ this.registers = target.arch.getRegisters(); this.firstVariableNumber = getRegisters().length; this.blockData = new BlockMap<>(ir.getControlFlowGraph()); + this.neverSpillConstants = neverSpillConstants; } public int getFirstLirInstructionId(AbstractBlockBase<?> block) { @@ -612,7 +613,7 @@ throw new BailoutException("LinearScan: interval is null"); } - static StackSlotValue canonicalSpillOpr(Interval interval) { + static AllocatableValue canonicalSpillOpr(Interval interval) { assert interval.spillSlot() != null : "canonical spill slot not set"; return interval.spillSlot(); } @@ -915,4 +916,8 @@ return regAllocConfig.getRegisterConfig().areAllAllocatableRegistersCallerSaved(); } + boolean neverSpillConstants() { + return neverSpillConstants; + } + }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanAssignLocationsPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanAssignLocationsPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,18 +24,18 @@ import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.isIllegal; import java.util.Collections; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,14 +23,19 @@ package com.oracle.graal.lir.alloc.lsra; import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.phases.LIRPhase.Options.LIROptimization; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.options.NestedBooleanOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -49,6 +54,13 @@ public class LinearScanEliminateSpillMovePhase extends AllocationPhase { + public static class Options { + // @formatter:off + @Option(help = "Enable spill move elimination.", type = OptionType.Debug) + public static final OptionValue<Boolean> LIROptLSRAEliminateSpillMoves = new NestedBooleanOptionValue(LIROptimization, true); + // @formatter:on + } + private static final IntervalPredicate mustStoreAtDefinition = new LinearScan.IntervalPredicate() { @Override @@ -111,7 +123,7 @@ * be correct. Only moves that have been inserted by LinearScan can be * removed. */ - if (canEliminateSpillMove(block, move)) { + if (Options.LIROptLSRAEliminateSpillMoves.getValue() && canEliminateSpillMove(block, move)) { /* * Move target is a stack slot that is always correct, so eliminate * instruction.
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanIntervalDumper.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanIntervalDumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.lir.alloc.lsra; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.alloc.lsra.Interval.UsePosList; import com.oracle.graal.lir.debug.IntervalDumper;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,10 +26,10 @@ import static com.oracle.graal.lir.LIRValueUtil.asVariable; import static com.oracle.graal.lir.LIRValueUtil.isVariable; import static com.oracle.graal.lir.debug.LIRGenerationDebugContext.getSourceForOperandFromDebugContext; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.ArrayDeque; import java.util.BitSet; @@ -38,17 +38,16 @@ import java.util.HashSet; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; -import com.oracle.graal.compiler.common.BackendOptions; import com.oracle.graal.compiler.common.alloc.ComputeBlockOrder; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -61,7 +60,6 @@ import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.StandardOp.LoadConstantOp; -import com.oracle.graal.lir.StandardOp.StackStoreOp; import com.oracle.graal.lir.StandardOp.ValueMoveOp; import com.oracle.graal.lir.ValueConsumer; import com.oracle.graal.lir.alloc.lsra.Interval.RegisterPriority; @@ -579,12 +577,6 @@ interval.setSpillSlot(slot); interval.assignLocation(slot); } - } else if (op instanceof StackStoreOp) { - StackStoreOp store = (StackStoreOp) op; - StackSlot slot = asStackSlot(store.getStackSlot()); - Interval interval = allocator.intervalFor(store.getResult()); - interval.setSpillSlot(slot); - interval.setSpillState(SpillState.StartInMemory); } } @@ -666,8 +658,6 @@ if (optimizeMethodArgument(move.getInput())) { return RegisterPriority.None; } - } else if (op instanceof StackStoreOp) { - return RegisterPriority.ShouldHaveRegister; } // all other operands require a register @@ -826,10 +816,6 @@ } } - protected static Boolean neverSpillConstants() { - return BackendOptions.UserOptions.NeverSpillConstants.getValue(); - } - /** * Returns a value for a interval definition, which can be used for re-materialization. * @@ -840,12 +826,12 @@ * reload-locations in case the interval of this instruction is spilled. Currently this * can only be a {@link JavaConstant}. */ - protected static JavaConstant getMaterializedValue(LIRInstruction op, Value operand, Interval interval) { + protected JavaConstant getMaterializedValue(LIRInstruction op, Value operand, Interval interval) { if (op instanceof LoadConstantOp) { LoadConstantOp move = (LoadConstantOp) op; if (move.getConstant() instanceof JavaConstant) { - if (!neverSpillConstants()) { + if (!allocator.neverSpillConstants()) { /* * Check if the interval has any uses which would accept an stack location * (priority == ShouldHaveRegister). Rematerialization of such intervals can
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanOptimizeSpillPositionPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanOptimizeSpillPositionPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,13 +24,13 @@ import static com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph.commonDominator; import static com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph.dominates; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import java.util.Iterator; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,8 +26,8 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -39,24 +39,29 @@ public final class LinearScanPhase extends AllocationPhase { + private boolean neverSpillConstants; + + public void setNeverSpillConstants(boolean neverSpillConstants) { + this.neverSpillConstants = neverSpillConstants; + } + @Override protected <B extends AbstractBlockBase<B>> void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig registerAllocationConfig) { final LinearScan allocator; switch (LinearScanVariant.getValue()) { case SSI_LSRA: - allocator = new SSILinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder); + allocator = new SSILinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder, neverSpillConstants); break; case SSA_LSRA: - allocator = new SSALinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder); + allocator = new SSALinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder, neverSpillConstants); break; case NONSSA_LSAR: - allocator = new LinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder); + allocator = new LinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder, neverSpillConstants); break; default: throw JVMCIError.shouldNotReachHere(); } allocator.allocate(target, lirGenRes, codeEmittingOrder, linearScanOrder, spillMoveFactory, registerAllocationConfig); } - }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanRegisterAllocationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanRegisterAllocationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanResolveDataFlowPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanResolveDataFlowPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.BitSet; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanWalker.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,19 +22,19 @@ */ package com.oracle.graal.lir.alloc.lsra; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.CodeUtil.isOdd; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.CodeUtil.isOdd; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig.AllocatableRegisters; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/MoveResolver.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/MoveResolver.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,21 +22,20 @@ */ package com.oracle.graal.lir.alloc.lsra; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.ArrayList; import java.util.HashSet; import java.util.List; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Indent; @@ -366,7 +365,7 @@ // do not allocate a new spill slot for temporary interval, but // use spill slot assigned to fromInterval. Otherwise moves from // one stack slot to another can happen (not allowed by LIRAssembler - StackSlotValue spillSlot = fromInterval.spillSlot(); + AllocatableValue spillSlot = fromInterval.spillSlot(); if (spillSlot == null) { spillSlot = getAllocator().getFrameMapBuilder().allocateSpillSlot(fromInterval.kind()); fromInterval.setSpillSlot(spillSlot); @@ -374,7 +373,7 @@ spillInterval(spillCandidate, fromInterval, spillSlot); } - protected void spillInterval(int spillCandidate, Interval fromInterval, StackSlotValue spillSlot) { + protected void spillInterval(int spillCandidate, Interval fromInterval, AllocatableValue spillSlot) { assert mappingFrom.get(spillCandidate).equals(fromInterval); Interval spillInterval = getAllocator().createDerivedInterval(fromInterval); spillInterval.setKind(fromInterval.kind());
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/OptimizingLinearScanWalker.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/OptimizingLinearScanWalker.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -22,14 +22,14 @@ */ package com.oracle.graal.lir.alloc.lsra; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/OutOfRegistersException.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/OutOfRegistersException.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.alloc.lsra; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; public class OutOfRegistersException extends BailoutException {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/RegisterVerifier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/RegisterVerifier.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,16 +22,16 @@ */ package com.oracle.graal.lir.alloc.lsra; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.util.ArrayMap;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinarScanResolveDataFlowPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinarScanResolveDataFlowPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,12 +24,12 @@ import static com.oracle.graal.lir.LIRValueUtil.asConstant; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.List; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScan.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScan.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -42,8 +42,8 @@ public final class SSALinearScan extends LinearScan { public SSALinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig, - List<? extends AbstractBlockBase<?>> sortedBlocks) { - super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks); + List<? extends AbstractBlockBase<?>> sortedBlocks, boolean neverSpillConstants) { + super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks, neverSpillConstants); } @Override
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScanEliminateSpillMovePhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScanEliminateSpillMovePhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ package com.oracle.graal.lir.alloc.lsra.ssa; import static com.oracle.graal.compiler.common.BackendOptions.LinearScanVariant; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.ValueUtil.isRegister; import com.oracle.graal.compiler.common.BackendOptions.LSRAVariant; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.lir.LIRInstruction;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSAMoveResolver.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSAMoveResolver.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,23 +22,21 @@ */ package com.oracle.graal.lir.alloc.lsra.ssa; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.asVirtualStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.asVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.Arrays; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.alloc.lsra.Interval; import com.oracle.graal.lir.alloc.lsra.LinearScan; import com.oracle.graal.lir.alloc.lsra.MoveResolver; @@ -93,14 +91,14 @@ return false; } - private int getStackArrayIndex(StackSlotValue stackSlotValue) { + private int getStackArrayIndex(Value stackSlotValue) { if (isStackSlot(stackSlotValue)) { return getStackArrayIndex(asStackSlot(stackSlotValue)); } if (isVirtualStackSlot(stackSlotValue)) { return getStackArrayIndex(asVirtualStackSlot(stackSlotValue)); } - throw JVMCIError.shouldNotReachHere("Unhandled StackSlotValue: " + stackSlotValue); + throw JVMCIError.shouldNotReachHere("value is not a stack slot: " + stackSlotValue); } private int getStackArrayIndex(StackSlot stackSlot) { @@ -125,7 +123,7 @@ protected void setValueBlocked(Value location, int direction) { assert direction == 1 || direction == -1 : "out of bounds"; if (isStackSlotValue(location)) { - int stackIdx = getStackArrayIndex(asStackSlotValue(location)); + int stackIdx = getStackArrayIndex(location); if (stackIdx == STACK_SLOT_IN_CALLER_FRAME_IDX) { // incoming stack arguments can be ignored return; @@ -142,7 +140,7 @@ @Override protected int valueBlocked(Value location) { if (isStackSlotValue(location)) { - int stackIdx = getStackArrayIndex(asStackSlotValue(location)); + int stackIdx = getStackArrayIndex(location); if (stackIdx == STACK_SLOT_IN_CALLER_FRAME_IDX) { // incoming stack arguments are always blocked (aka they can not be written) return 1; @@ -175,7 +173,7 @@ Interval fromInterval = getMappingFrom(stackSpillCandidate); assert isStackSlotValue(fromInterval.location()); // allocate new stack slot - StackSlotValue spillSlot = getAllocator().getFrameMapBuilder().allocateSpillSlot(fromInterval.kind()); + VirtualStackSlot spillSlot = getAllocator().getFrameMapBuilder().allocateSpillSlot(fromInterval.kind()); spillInterval(stackSpillCandidate, fromInterval, spillSlot); } }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScan.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScan.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -41,8 +41,8 @@ public final class SSILinearScan extends LinearScan { public SSILinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig, - List<? extends AbstractBlockBase<?>> sortedBlocks) { - super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks); + List<? extends AbstractBlockBase<?>> sortedBlocks, boolean neverSpillConstants) { + super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks, neverSpillConstants); } @Override
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,9 +26,9 @@ import java.util.EnumSet; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction; import com.oracle.graal.lir.LIRInstruction.OperandFlag;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScanResolveDataFlowPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScanResolveDataFlowPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,13 +25,13 @@ import static com.oracle.graal.lir.LIRValueUtil.asConstant; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.HashMap; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/FixedInterval.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/FixedInterval.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.lir.alloc.trace; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/IntervalHint.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/IntervalHint.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.alloc.trace; -import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.vm.ci.meta.AllocatableValue; /** * An interval that is a hint for an {@code TraceInterval interval}.
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/RegisterVerifier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/RegisterVerifier.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,16 +22,16 @@ */ package com.oracle.graal.lir.alloc.trace; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.util.ArrayMap;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/ShadowedRegisterValue.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/ShadowedRegisterValue.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,8 +27,8 @@ import java.util.EnumSet; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlotValue; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.lir.CompositeValue; import com.oracle.graal.lir.InstructionValueConsumer; @@ -45,9 +45,9 @@ private static final EnumSet<OperandFlag> stackslotFlags = EnumSet.of(STACK); @Component({REG}) protected RegisterValue register; - @Component({STACK}) protected StackSlotValue stackslot; + @Component({STACK}) protected AllocatableValue stackslot; - public ShadowedRegisterValue(RegisterValue register, StackSlotValue stackslot) { + public ShadowedRegisterValue(RegisterValue register, AllocatableValue stackslot) { super(register.getLIRKind()); assert (register.getLIRKind().equals(stackslot.getLIRKind())); this.register = register; @@ -58,14 +58,14 @@ return register; } - public StackSlotValue getStackSlot() { + public AllocatableValue getStackSlot() { return stackslot; } @Override public CompositeValue forEachComponent(LIRInstruction inst, OperandMode mode, InstructionValueProcedure proc) { RegisterValue newRegister = (RegisterValue) proc.doValue(inst, register, mode, registerFlags); - StackSlotValue newStackSlot = (StackSlotValue) proc.doValue(inst, stackslot, mode, stackslotFlags); + AllocatableValue newStackSlot = (AllocatableValue) proc.doValue(inst, stackslot, mode, stackslotFlags); if (register.equals(newRegister) || stackslot.equals(newStackSlot)) { return this; }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceAllocationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceAllocationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceGlobalMoveResolutionPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceGlobalMoveResolutionPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,14 +24,14 @@ import static com.oracle.graal.lir.alloc.trace.TraceUtil.asShadowedRegisterValue; import static com.oracle.graal.lir.alloc.trace.TraceUtil.isShadowedRegisterValue; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isIllegal; import java.util.List; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceGlobalMoveResolver.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceGlobalMoveResolver.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,37 +22,36 @@ */ package com.oracle.graal.lir.alloc.trace; +import static com.oracle.graal.lir.LIRValueUtil.asVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; import static com.oracle.graal.lir.alloc.trace.TraceUtil.asShadowedRegisterValue; import static com.oracle.graal.lir.alloc.trace.TraceUtil.isShadowedRegisterValue; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.asVirtualStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.asAllocatableValue; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Indent; import com.oracle.graal.lir.LIRInsertionBuffer; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMap; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.framemap.FrameMapBuilderTool; @@ -78,7 +77,7 @@ private void setValueBlocked(Value location, int direction) { assert direction == 1 || direction == -1 : "out of bounds"; if (isStackSlotValue(location)) { - int stackIdx = getStackArrayIndex(asStackSlotValue(location)); + int stackIdx = getStackArrayIndex(location); if (stackIdx == STACK_SLOT_IN_CALLER_FRAME_IDX) { // incoming stack arguments can be ignored return; @@ -99,7 +98,7 @@ private int valueBlocked(Value location) { if (isStackSlotValue(location)) { - int stackIdx = getStackArrayIndex(asStackSlotValue(location)); + int stackIdx = getStackArrayIndex(location); if (stackIdx == STACK_SLOT_IN_CALLER_FRAME_IDX) { // incoming stack arguments are always blocked (aka they can not be written) return 1; @@ -182,7 +181,7 @@ for (i = 0; i < mappingTo.size(); i++) { Value to = mappingTo.get(i); - assert !isStackSlotValue(to) || getStackArrayIndex(asStackSlotValue(to)) != STACK_SLOT_IN_CALLER_FRAME_IDX : "Cannot move to in argument: " + to; + assert !isStackSlotValue(to) || getStackArrayIndex(to) != STACK_SLOT_IN_CALLER_FRAME_IDX : "Cannot move to in argument: " + to; } HashSet<Value> usedRegs = new HashSet<>(); @@ -302,7 +301,7 @@ */ private LIRInstruction createMove(Value fromOpr, AllocatableValue toOpr) { if (isStackSlotValue(toOpr) && isStackSlotValue(fromOpr)) { - return getSpillMoveFactory().createStackMove(toOpr, asStackSlotValue(fromOpr)); + return getSpillMoveFactory().createStackMove(toOpr, asAllocatableValue(fromOpr)); } return getSpillMoveFactory().createMove(toOpr, fromOpr); } @@ -367,7 +366,7 @@ // create a new spill interval and assign a stack slot to it Value from = mappingFrom.get(spillCandidate); try (Indent indent = Debug.logAndIndent("BreakCycle: %s", from)) { - StackSlotValue spillSlot = frameMapBuilder.allocateSpillSlot(from.getLIRKind()); + VirtualStackSlot spillSlot = frameMapBuilder.allocateSpillSlot(from.getLIRKind()); if (Debug.isLogEnabled()) { Debug.log("created new slot for spilling: %s", spillSlot); } @@ -413,14 +412,14 @@ appendInsertionBuffer(); } - private int getStackArrayIndex(StackSlotValue stackSlotValue) { + private int getStackArrayIndex(Value stackSlotValue) { if (isStackSlot(stackSlotValue)) { return getStackArrayIndex(asStackSlot(stackSlotValue)); } if (isVirtualStackSlot(stackSlotValue)) { return getStackArrayIndex(asVirtualStackSlot(stackSlotValue)); } - throw JVMCIError.shouldNotReachHere("Unhandled StackSlotValue: " + stackSlotValue); + throw JVMCIError.shouldNotReachHere("value is not a stack slot: " + stackSlotValue); } private int getStackArrayIndex(StackSlot stackSlot) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceInterval.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceInterval.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,27 +23,26 @@ package com.oracle.graal.lir.alloc.trace; import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.util.Util; import com.oracle.graal.debug.TTY; @@ -315,7 +314,7 @@ /** * The stack slot to which all splits of this interval are spilled if necessary. */ - private StackSlotValue spillSlot; + private AllocatableValue spillSlot; /** * The kind of this interval. @@ -437,7 +436,13 @@ return intFrom == Integer.MAX_VALUE && intTo == Integer.MAX_VALUE; } + public void setTo(int pos) { + assert intFrom == Integer.MAX_VALUE || intFrom < pos; + intTo = pos; + } + public void setFrom(int pos) { + assert intTo == Integer.MAX_VALUE || pos < intTo; intFrom = pos; } @@ -477,11 +482,12 @@ /** * Gets the canonical spill slot for this interval. */ - public StackSlotValue spillSlot() { + public AllocatableValue spillSlot() { return splitParent().spillSlot; } - public void setSpillSlot(StackSlotValue slot) { + public void setSpillSlot(AllocatableValue slot) { + assert isStackSlotValue(slot); assert splitParent().spillSlot == null || (isVirtualStackSlot(splitParent().spillSlot) && isStackSlot(slot)) : "connot overwrite existing spill slot"; splitParent().spillSlot = slot; } @@ -892,10 +898,10 @@ assert from < to : "invalid range"; if (from < intFrom) { - intFrom = from; + setFrom(from); } if (intTo == Integer.MAX_VALUE || intTo < to) { - intTo = to; + setTo(to); } } @@ -942,8 +948,8 @@ TraceInterval result = newSplitChild(allocator); // split the ranges - result.intTo = intTo; - result.intFrom = splitPos; + result.setTo(intTo); + result.setFrom(splitPos); intTo = splitPos; // split list of use positions
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceIntervalDumper.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceIntervalDumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.lir.alloc.trace; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.debug.IntervalDumper;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceIntervalWalker.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceIntervalWalker.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.alloc.trace; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Indent;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScan.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScan.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, 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 @@ -24,29 +24,27 @@ import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.CodeUtil.isEven; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.asRegisterValue; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.CodeUtil.isEven; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asRegisterValue; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isLegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.Arrays; import java.util.BitSet; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterAttributes; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterAttributes; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult; @@ -61,6 +59,7 @@ import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.ValueConsumer; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.alloc.trace.TraceLinearScanAllocationPhase.TraceLinearScanAllocationContext; import com.oracle.graal.lir.framemap.FrameMapBuilder; import com.oracle.graal.lir.gen.LIRGenerationResult; @@ -172,9 +171,10 @@ private AbstractBlockBase<?>[] opIdToBlockMap; protected final TraceBuilderResult<?> traceBuilderResult; + private final boolean neverSpillConstants; protected TraceLinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig, - List<? extends AbstractBlockBase<?>> sortedBlocks, TraceBuilderResult<?> traceBuilderResult) { + List<? extends AbstractBlockBase<?>> sortedBlocks, TraceBuilderResult<?> traceBuilderResult, boolean neverSpillConstants) { this.ir = res.getLIR(); this.moveFactory = spillMoveFactory; this.frameMapBuilder = res.getFrameMapBuilder(); @@ -186,6 +186,7 @@ this.fixedIntervals = new FixedInterval[registers.length]; this.blockData = new BlockMap<>(ir.getControlFlowGraph()); this.traceBuilderResult = traceBuilderResult; + this.neverSpillConstants = neverSpillConstants; } public int getFirstLirInstructionId(AbstractBlockBase<?> block) { @@ -468,7 +469,7 @@ * @return the block containing the instruction denoted by {@code opId} */ public AbstractBlockBase<?> blockForId(int opId) { - assert opIdToBlockMap.length > 0 && opId >= 0 && opId <= maxOpId() + 1 : "opId out of range"; + assert opIdToBlockMap.length > 0 && opId >= 0 && opId <= maxOpId() + 1 : "opId out of range: " + opId; return opIdToBlockMap[opIdToIndex(opId)]; } @@ -689,7 +690,7 @@ throw new BailoutException("LinearScan: interval is null"); } - static StackSlotValue canonicalSpillOpr(TraceInterval interval) { + static AllocatableValue canonicalSpillOpr(TraceInterval interval) { assert interval.spillSlot() != null : "canonical spill slot not set"; return interval.spillSlot(); } @@ -987,4 +988,8 @@ return regAllocConfig.getRegisterConfig().areAllAllocatableRegistersCallerSaved(); } + boolean neverSpillConstants() { + return neverSpillConstants; + } + }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanAllocationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanAllocationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanAssignLocationsPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanAssignLocationsPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,22 +24,22 @@ import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; import static com.oracle.graal.lir.alloc.trace.TraceRegisterAllocationPhase.Options.TraceRAshareSpillInformation; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.Collections; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult; @@ -63,7 +63,7 @@ /** * Specialization of {@link com.oracle.graal.lir.alloc.lsra.LinearScanAssignLocationsPhase} that * inserts {@link ShadowedRegisterValue}s to describe {@link RegisterValue}s that are also available - * on the {@link StackSlotValue stack}. + * on the {@link StackSlot stack}. */ final class TraceLinearScanAssignLocationsPhase extends TraceLinearScanAllocationPhase {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanEliminateSpillMovePhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanEliminateSpillMovePhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,13 +23,13 @@ package com.oracle.graal.lir.alloc.trace; import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanLifetimeAnalysisPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,27 +27,25 @@ import static com.oracle.graal.lir.alloc.trace.TraceLinearScan.isVariableOrRegister; import static com.oracle.graal.lir.alloc.trace.TraceRegisterAllocationPhase.Options.TraceRAshareSpillInformation; import static com.oracle.graal.lir.alloc.trace.TraceRegisterAllocationPhase.Options.TraceRAuseInterTraceHints; -import static jdk.internal.jvmci.code.ValueUtil.asRegisterValue; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.asRegisterValue; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.BitSet; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterValue; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; -import com.oracle.graal.compiler.common.BackendOptions; import com.oracle.graal.compiler.common.alloc.ComputeBlockOrder; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult; @@ -62,7 +60,6 @@ import com.oracle.graal.lir.StandardOp.BlockEndOp; import com.oracle.graal.lir.StandardOp.LabelOp; import com.oracle.graal.lir.StandardOp.LoadConstantOp; -import com.oracle.graal.lir.StandardOp.StackStoreOp; import com.oracle.graal.lir.StandardOp.ValueMoveOp; import com.oracle.graal.lir.ValueConsumer; import com.oracle.graal.lir.Variable; @@ -324,21 +321,6 @@ } } - /** - * Optimizes moves related to incoming stack based arguments. The interval for the - * destination of such moves is assigned the stack slot (which is in the caller's frame) as - * its spill slot. - */ - private void handleMethodArguments(LIRInstruction op) { - if (op instanceof StackStoreOp) { - StackStoreOp store = (StackStoreOp) op; - StackSlot slot = asStackSlot(store.getStackSlot()); - TraceInterval interval = allocator.intervalFor(store.getResult()); - interval.setSpillSlot(slot); - interval.setSpillState(SpillState.StartInMemory); - } - } - private void addRegisterHint(final LIRInstruction op, final Value targetValue, OperandMode mode, EnumSet<OperandFlag> flags, final boolean hintAtDef) { if (flags.contains(OperandFlag.HINT) && TraceLinearScan.isVariableOrRegister(targetValue)) { @@ -444,8 +426,6 @@ if (optimizeMethodArgument(move.getInput())) { return RegisterPriority.None; } - } else if (op instanceof StackStoreOp) { - return RegisterPriority.ShouldHaveRegister; } // all other operands require a register @@ -559,10 +539,6 @@ * would be in a register at the call otherwise). */ op.visitEachState(stateProc); - - // special steps for some instructions (especially moves) - handleMethodArguments(op); - } } // end of instruction iteration @@ -628,10 +604,6 @@ } } - protected static Boolean neverSpillConstants() { - return BackendOptions.UserOptions.NeverSpillConstants.getValue(); - } - /** * Returns a value for a interval definition, which can be used for re-materialization. * @@ -642,11 +614,11 @@ * all reload-locations in case the interval of this instruction is spilled. * Currently this can only be a {@link JavaConstant}. */ - private static JavaConstant getMaterializedValue(LIRInstruction op, Value operand, TraceInterval interval) { + private JavaConstant getMaterializedValue(LIRInstruction op, Value operand, TraceInterval interval) { if (op instanceof LoadConstantOp) { LoadConstantOp move = (LoadConstantOp) op; if (move.getConstant() instanceof JavaConstant) { - if (!neverSpillConstants()) { + if (!allocator.neverSpillConstants()) { /* * Check if the interval has any uses which would accept an stack location * (priority == ShouldHaveRegister). Rematerialization of such intervals can
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanRegisterAllocationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanRegisterAllocationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanResolveDataFlowPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanResolveDataFlowPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,15 +25,16 @@ import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; import static com.oracle.graal.lir.LIRValueUtil.asConstant; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import java.util.BitSet; import java.util.List; import java.util.ListIterator; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult; @@ -144,16 +145,44 @@ @SuppressWarnings("try") private void resolveCollectMappings(AbstractBlockBase<?> fromBlock, AbstractBlockBase<?> toBlock, TraceLocalMoveResolver moveResolver) { try (Indent indent0 = Debug.logAndIndent("Edge %s -> %s", fromBlock, toBlock)) { - // collect all intervals that have been split between - // fromBlock and toBlock - SSIUtil.forEachValuePair(allocator.getLIR(), toBlock, fromBlock, new MyPhiValueVisitor(moveResolver, toBlock, fromBlock)); - if (moveResolver.hasMappings()) { - resolveFindInsertPos(fromBlock, toBlock, moveResolver); - moveResolver.resolveAndAppendMoves(); + collectLSRAMappings(fromBlock, toBlock, moveResolver); + collectSSIMappings(fromBlock, toBlock, moveResolver); + } + } + + protected void collectLSRAMappings(AbstractBlockBase<?> fromBlock, AbstractBlockBase<?> toBlock, TraceLocalMoveResolver moveResolver) { + assert moveResolver.checkEmpty(); + + int toBlockFirstInstructionId = allocator.getFirstLirInstructionId(toBlock); + int fromBlockLastInstructionId = allocator.getLastLirInstructionId(fromBlock) + 1; + int numOperands = allocator.operandSize(); + BitSet liveAtEdge = allocator.getBlockData(toBlock).liveIn; + + // visit all variables for which the liveAtEdge bit is set + for (int operandNum = liveAtEdge.nextSetBit(0); operandNum >= 0; operandNum = liveAtEdge.nextSetBit(operandNum + 1)) { + assert operandNum < numOperands : "live information set for not exisiting interval"; + assert allocator.getBlockData(fromBlock).liveOut.get(operandNum) && allocator.getBlockData(toBlock).liveIn.get(operandNum) : "interval not live at this edge"; + + TraceInterval fromInterval = allocator.splitChildAtOpId(allocator.intervalFor(operandNum), fromBlockLastInstructionId, LIRInstruction.OperandMode.DEF); + TraceInterval toInterval = allocator.splitChildAtOpId(allocator.intervalFor(operandNum), toBlockFirstInstructionId, LIRInstruction.OperandMode.DEF); + + if (fromInterval != toInterval && !fromInterval.location().equals(toInterval.location())) { + // need to insert move instruction + moveResolver.addMapping(fromInterval, toInterval); } } } + protected void collectSSIMappings(AbstractBlockBase<?> fromBlock, AbstractBlockBase<?> toBlock, TraceLocalMoveResolver moveResolver) { + // collect all intervals that have been split between + // fromBlock and toBlock + SSIUtil.forEachValuePair(allocator.getLIR(), toBlock, fromBlock, new MyPhiValueVisitor(moveResolver, toBlock, fromBlock)); + if (moveResolver.hasMappings()) { + resolveFindInsertPos(fromBlock, toBlock, moveResolver); + moveResolver.resolveAndAppendMoves(); + } + } + private boolean containedInTrace(AbstractBlockBase<?> block) { return currentTrace() == traceBuilderResult.getTraceForBlock(block); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanWalker.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLinearScanWalker.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,20 +22,20 @@ */ package com.oracle.graal.lir.alloc.trace; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.CodeUtil.isOdd; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.CodeUtil.isOdd; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig.AllocatableRegisters; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -241,6 +241,7 @@ } } + @SuppressWarnings("unused") private int insertIdAtBasicBlockBoundary(int opId) { assert allocator.isBlockBegin(opId) : "Not a block begin: " + opId; assert allocator.instructionForId(opId) instanceof LabelOp; @@ -249,16 +250,13 @@ AbstractBlockBase<?> toBlock = allocator.blockForId(opId); AbstractBlockBase<?> fromBlock = allocator.blockForId(opId - 2); - final int operandId; if (fromBlock.getSuccessorCount() == 1) { // insert move in predecessor - operandId = opId - 2; - } else { - assert toBlock.getPredecessorCount() == 1 : String.format("Critical Edge? %s->%s", fromBlock, toBlock); - // insert move in predecessor - operandId = opId + 2; + return opId - 2; } - return operandId; + assert toBlock.getPredecessorCount() == 1 : String.format("Critical Edge? %s->%s", fromBlock, toBlock); + // insert move in successor + return opId + 2; } private void insertMove(int operandId, TraceInterval srcIt, TraceInterval dstIt) { @@ -290,7 +288,6 @@ moveResolver.addMapping(srcIt, dstIt); } - @SuppressWarnings("unused") private int findOptimalSplitPos(AbstractBlockBase<?> minBlock, AbstractBlockBase<?> maxBlock, int maxSplitPos) { int fromBlockNr = minBlock.getLinearScanNumber(); int toBlockNr = maxBlock.getLinearScanNumber(); @@ -306,13 +303,14 @@ optimalSplitPos = allocator.getFirstLirInstructionId(maxBlock); } - int minLoopDepth = maxBlock.getLoopDepth(); + // minimal block probability + double minProbability = maxBlock.probability(); for (int i = toBlockNr - 1; i >= fromBlockNr; i--) { AbstractBlockBase<?> cur = blockAt(i); - if (cur.getLoopDepth() < minLoopDepth) { - // block with lower loop-depth found . split at the end of this block - minLoopDepth = cur.getLoopDepth(); + if (cur.probability() < minProbability) { + // Block with lower probability found. Split at the end of this block. + minProbability = cur.probability(); optimalSplitPos = allocator.getLastLirInstructionId(cur) + 2; } } @@ -321,16 +319,57 @@ return optimalSplitPos; } - @SuppressWarnings({"static-method", "unused"}) private int findOptimalSplitPos(TraceInterval interval, int minSplitPos, int maxSplitPos, boolean doLoopOptimization) { - // TODO (je) implement - int optimalSplitPos = maxSplitPos; + int optimalSplitPos = findOptimalSplitPos0(interval, minSplitPos, maxSplitPos, doLoopOptimization); if (Debug.isLogEnabled()) { Debug.log("optimal split position: %d", optimalSplitPos); } return optimalSplitPos; } + @SuppressWarnings({"unused"}) + private int findOptimalSplitPos0(TraceInterval interval, int minSplitPos, int maxSplitPos, boolean doLoopOptimization) { + // TODO (je) implement + if (minSplitPos == maxSplitPos) { + // trivial case, no optimization of split position possible + if (Debug.isLogEnabled()) { + Debug.log("min-pos and max-pos are equal, no optimization possible"); + } + return minSplitPos; + + } + assert minSplitPos < maxSplitPos : "must be true then"; + assert minSplitPos > 0 : "cannot access minSplitPos - 1 otherwise"; + + // reason for using minSplitPos - 1: when the minimal split pos is exactly at the + // beginning of a block, then minSplitPos is also a possible split position. + // Use the block before as minBlock, because then minBlock.lastLirInstructionId() + 2 == + // minSplitPos + AbstractBlockBase<?> minBlock = allocator.blockForId(minSplitPos - 1); + + // reason for using maxSplitPos - 1: otherwise there would be an assert on failure + // when an interval ends at the end of the last block of the method + // (in this case, maxSplitPos == allocator().maxLirOpId() + 2, and there is no + // block at this opId) + AbstractBlockBase<?> maxBlock = allocator.blockForId(maxSplitPos - 1); + + assert minBlock.getLinearScanNumber() <= maxBlock.getLinearScanNumber() : "invalid order"; + if (minBlock == maxBlock) { + // split position cannot be moved to block boundary : so split as late as possible + if (Debug.isLogEnabled()) { + Debug.log("cannot move split pos to block boundary because minPos and maxPos are in same block"); + } + return maxSplitPos; + + } + // seach optimal block boundary between minSplitPos and maxSplitPos + if (Debug.isLogEnabled()) { + Debug.log("moving split pos to optimal block boundary between block B%d and B%d", minBlock.getId(), maxBlock.getId()); + } + + return findOptimalSplitPos(minBlock, maxBlock, maxSplitPos); + } + // split an interval at the optimal position between minSplitPos and // maxSplitPos in two parts: // 1) the left part has already a location assigned @@ -345,11 +384,7 @@ assert minSplitPos <= maxSplitPos : "invalid order"; assert maxSplitPos <= interval.to() : "cannot split after end of interval"; - int optimalSplitPos = findOptimalSplitPos(interval, minSplitPos, maxSplitPos, true); - - assert minSplitPos <= optimalSplitPos && optimalSplitPos <= maxSplitPos : "out of range"; - assert optimalSplitPos <= interval.to() : "cannot split after end of interval"; - assert optimalSplitPos > interval.from() : "cannot split at start of interval"; + final int optimalSplitPos = findOptimalSplitPos(interval, minSplitPos, maxSplitPos, true); if (optimalSplitPos == interval.to() && interval.nextUsage(RegisterPriority.MustHaveRegister, minSplitPos) == Integer.MAX_VALUE) { // the split position would be just before the end of the interval @@ -359,27 +394,48 @@ } return; } - // must calculate this before the actual split is performed and before split position is // moved to odd opId - boolean isBlockBegin = allocator.isBlockBegin(optimalSplitPos); - boolean moveNecessary = true; + final int optimalSplitPosFinal; + boolean blockBegin = allocator.isBlockBegin(optimalSplitPos); + if (blockBegin) { + assert (optimalSplitPos & 1) == 0 : "Block begins must be even: " + optimalSplitPos; + // move position after the label (odd optId) + optimalSplitPosFinal = optimalSplitPos + 1; + } else { + // move position before actual instruction (odd opId) + optimalSplitPosFinal = (optimalSplitPos - 1) | 1; + } - if (isBlockBegin) { - optimalSplitPos = insertIdAtBasicBlockBoundary(optimalSplitPos); - } - // move position before actual instruction (odd opId) - optimalSplitPos = (optimalSplitPos - 1) | 1; + // TODO( je) better define what min split pos max split pos mean. + assert minSplitPos <= optimalSplitPosFinal && optimalSplitPosFinal <= maxSplitPos || minSplitPos == maxSplitPos && optimalSplitPosFinal == minSplitPos - 1 : "out of range"; + assert optimalSplitPosFinal <= interval.to() : "cannot split after end of interval"; + assert optimalSplitPosFinal > interval.from() : "cannot split at start of interval"; if (Debug.isLogEnabled()) { - Debug.log("splitting at position %d", optimalSplitPos); + Debug.log("splitting at position %d", optimalSplitPosFinal); } + assert optimalSplitPosFinal > currentPosition : "Can not split interval " + interval + " at current position: " + currentPosition; + + // was: + // assert isBlockBegin || ((optimalSplitPos1 & 1) == 1) : + // "split pos must be odd when not on block boundary"; + // assert !isBlockBegin || ((optimalSplitPos1 & 1) == 0) : + // "split pos must be even on block boundary"; + assert (optimalSplitPosFinal & 1) == 1 : "split pos must be odd"; - assert isBlockBegin || ((optimalSplitPos & 1) == 1) : "split pos must be odd when not on block boundary"; - assert !isBlockBegin || ((optimalSplitPos & 1) == 0) : "split pos must be even on block boundary"; + // TODO (je) duplicate code. try to fold + if (optimalSplitPosFinal == interval.to() && interval.nextUsage(RegisterPriority.MustHaveRegister, minSplitPos) == Integer.MAX_VALUE) { + // the split position would be just before the end of the interval + // . no split at all necessary + if (Debug.isLogEnabled()) { + Debug.log("no split necessary because optimal split position is at end of interval"); + } + return; + } + TraceInterval splitPart = interval.split(optimalSplitPosFinal, allocator); - TraceInterval splitPart = interval.split(optimalSplitPos, allocator); - + boolean moveNecessary = true; splitPart.setInsertMoveWhenActivated(moveNecessary); assert splitPart.from() >= currentPosition : "cannot append new interval before current walk position"; @@ -463,11 +519,10 @@ assert optimalSplitPos < interval.to() : "cannot split at end of interval"; assert optimalSplitPos >= interval.from() : "cannot split before start of interval"; - if (allocator.isBlockBegin(optimalSplitPos)) { - optimalSplitPos = insertIdAtBasicBlockBoundary(optimalSplitPos); + if (!allocator.isBlockBegin(optimalSplitPos)) { + // move position before actual instruction (odd opId) + optimalSplitPos = (optimalSplitPos - 1) | 1; } - // move position before actual instruction (odd opId) - optimalSplitPos = (optimalSplitPos - 1) | 1; try (Indent indent2 = Debug.logAndIndent("splitting at position %d", optimalSplitPos)) { assert allocator.isBlockBegin(optimalSplitPos) || ((optimalSplitPos & 1) == 1) : "split pos must be odd when not on block boundary"; @@ -478,13 +533,16 @@ handleSpillSlot(spilledPart); changeSpillState(spilledPart, optimalSplitPos); - if (allocator.isBlockBegin(optimalSplitPos)) { - optimalSplitPos = insertIdAtBasicBlockBoundary(optimalSplitPos); + if (!allocator.isBlockBegin(optimalSplitPos)) { + if (Debug.isLogEnabled()) { + Debug.log("inserting move from interval %s to %s", interval, spilledPart); + } + insertMove(optimalSplitPos, interval, spilledPart); + } else { + if (Debug.isLogEnabled()) { + Debug.log("no need to insert move. done by data-flow resolution"); + } } - if (Debug.isLogEnabled()) { - Debug.log("inserting move from interval %s to %d", interval, spilledPart); - } - insertMove(optimalSplitPos, interval, spilledPart); // the currentSplitChild is needed later when moves are inserted for reloading assert spilledPart.currentSplitChild() == interval : "overwriting wrong currentSplitChild";
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLocalMoveResolver.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceLocalMoveResolver.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,35 +22,33 @@ */ package com.oracle.graal.lir.alloc.trace; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.asVirtualStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.asVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Indent; import com.oracle.graal.lir.LIRInsertionBuffer; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMap; import com.oracle.graal.lir.framemap.FrameMapBuilderTool; @@ -72,14 +70,14 @@ private int[] stackBlocked; private final int firstVirtualStackIndex; - private int getStackArrayIndex(StackSlotValue stackSlotValue) { + private int getStackArrayIndex(Value stackSlotValue) { if (isStackSlot(stackSlotValue)) { return getStackArrayIndex(asStackSlot(stackSlotValue)); } if (isVirtualStackSlot(stackSlotValue)) { return getStackArrayIndex(asVirtualStackSlot(stackSlotValue)); } - throw JVMCIError.shouldNotReachHere("Unhandled StackSlotValue: " + stackSlotValue); + throw JVMCIError.shouldNotReachHere("value is not a stack slot: " + stackSlotValue); } private int getStackArrayIndex(StackSlot stackSlot) { @@ -103,7 +101,7 @@ protected void setValueBlocked(Value location, int direction) { assert direction == 1 || direction == -1 : "out of bounds"; if (isStackSlotValue(location)) { - int stackIdx = getStackArrayIndex(asStackSlotValue(location)); + int stackIdx = getStackArrayIndex(location); if (stackIdx == STACK_SLOT_IN_CALLER_FRAME_IDX) { // incoming stack arguments can be ignored return; @@ -132,7 +130,7 @@ protected int valueBlocked(Value location) { if (isStackSlotValue(location)) { - int stackIdx = getStackArrayIndex(asStackSlotValue(location)); + int stackIdx = getStackArrayIndex(location); if (stackIdx == STACK_SLOT_IN_CALLER_FRAME_IDX) { // incoming stack arguments are always blocked (aka they can not be written) return 1; @@ -423,7 +421,7 @@ // do not allocate a new spill slot for temporary interval, but // use spill slot assigned to fromInterval. Otherwise moves from // one stack slot to another can happen (not allowed by LIRAssembler - StackSlotValue spillSlot1 = fromInterval1.spillSlot(); + AllocatableValue spillSlot1 = fromInterval1.spillSlot(); if (spillSlot1 == null) { spillSlot1 = getAllocator().getFrameMapBuilder().allocateSpillSlot(fromInterval1.kind()); fromInterval1.setSpillSlot(spillSlot1); @@ -437,11 +435,11 @@ TraceInterval fromInterval = getMappingFrom(stackSpillCandidate); assert isStackSlotValue(fromInterval.location()); // allocate new stack slot - StackSlotValue spillSlot = getAllocator().getFrameMapBuilder().allocateSpillSlot(fromInterval.kind()); + VirtualStackSlot spillSlot = getAllocator().getFrameMapBuilder().allocateSpillSlot(fromInterval.kind()); spillInterval(stackSpillCandidate, fromInterval, spillSlot); } - protected void spillInterval(int spillCandidate, TraceInterval fromInterval, StackSlotValue spillSlot) { + protected void spillInterval(int spillCandidate, TraceInterval fromInterval, AllocatableValue spillSlot) { assert mappingFrom.get(spillCandidate).equals(fromInterval); TraceInterval spillInterval = getAllocator().createDerivedInterval(fromInterval); spillInterval.setKind(fromInterval.kind()); @@ -495,6 +493,8 @@ resolveMappings(); } + assert insertionBuffer.lirList() != newInsertList || newInsertIdx >= insertIdx : String.format("Decreasing insert index: old=%d new=%d", insertIdx, newInsertIdx); + if (insertionBuffer.lirList() != newInsertList) { // block changed . append insertionBuffer because it is // bound to a specific block and create a new insertionBuffer
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.lir.alloc.trace; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder; @@ -91,7 +91,7 @@ if (Options.TraceRAtrivialBlockAllocator.getValue() && isTrivialTrace(lir, trace)) { new TraceTrivialAllocator(resultTraces).apply(target, lirGenRes, codeEmittingOrder, trace, new TraceAllocationContext(spillMoveFactory, registerAllocationConfig), false); } else { - TraceLinearScan allocator = new TraceLinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, trace, resultTraces); + TraceLinearScan allocator = new TraceLinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, trace, resultTraces, false); allocator.allocate(target, lirGenRes, codeEmittingOrder, linearScanOrder, spillMoveFactory, registerAllocationConfig); } Debug.dump(TRACE_DUMP_LEVEL, trace, "After Trace" + traceNumber + ": " + trace);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceTrivialAllocator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceTrivialAllocator.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,8 +28,8 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.alloc.trace; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import static com.oracle.graal.lir.LIRValueUtil.asJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.ArrayList; import java.util.Arrays; @@ -33,26 +33,26 @@ import java.util.List; import java.util.function.Consumer; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.ConstantReference; -import jdk.internal.jvmci.code.CompilationResult.DataSectionReference; -import jdk.internal.jvmci.code.DataSection.Data; -import jdk.internal.jvmci.code.DataSection.DataBuilder; -import jdk.internal.jvmci.code.DebugInfo; -import jdk.internal.jvmci.code.InfopointReason; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.InvokeTarget; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.VMConstant; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.ConstantReference; +import jdk.vm.ci.code.CompilationResult.DataSectionReference; +import jdk.vm.ci.code.DataSection.Data; +import jdk.vm.ci.code.DataSection.DataBuilder; +import jdk.vm.ci.code.DebugInfo; +import jdk.vm.ci.code.InfopointReason; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.InvokeTarget; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.VMConstant; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.asm.AbstractAddress; import com.oracle.graal.asm.Assembler; @@ -150,7 +150,8 @@ * the compilation result. */ public void finish() { - compilationResult.setTargetCode(asm.close(false), asm.position()); + int position = asm.position(); + compilationResult.setTargetCode(asm.close(false), position); // Record exception handlers if they exist if (exceptionInfoList != null) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilderFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilderFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.lir.asm; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.asm.Assembler; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.java Fri Oct 30 20:56:28 2015 +0100 @@ -33,13 +33,13 @@ import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.options.NestedBooleanOptionValue; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.options.NestedBooleanOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.BlockMap;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/DefUseTree.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/DefUseTree.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,8 +26,8 @@ import java.util.List; import java.util.function.Consumer; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.LIRInstruction;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/UseEntry.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/UseEntry.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.constopt; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.LIRInstruction;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/debug/LIRGenerationDebugContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/debug/LIRGenerationDebugContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.debug; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.lir.LIR;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/LocationMarker.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/LocationMarker.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,15 +22,15 @@ */ package com.oracle.graal.lir.dfa; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isIllegal; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.BlockMap;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/LocationMarkerPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/LocationMarkerPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,17 +22,17 @@ */ package com.oracle.graal.lir.dfa; -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 static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.List; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterAttributes; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterAttributes; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/MarkBasePointersPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/MarkBasePointersPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/dfa/RegStackValueSet.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,17 +22,17 @@ */ package com.oracle.graal.lir.dfa; -import static jdk.internal.jvmci.code.ValueUtil.asRegister; -import static jdk.internal.jvmci.code.ValueUtil.asStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.asRegister; +import static jdk.vm.ci.code.ValueUtil.asStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.EnumSet; import java.util.HashSet; import java.util.Objects; import java.util.Set; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; @@ -75,7 +75,7 @@ return; } if (isRegister(v)) { - int index = asRegister(v).getReferenceMapIndex(); + int index = asRegister(v).number; registers.put(index, v); } else if (isStackSlot(v)) { int index = frameMap.offsetForStackSlot(asStackSlot(v)); @@ -109,7 +109,7 @@ return; } if (isRegister(v)) { - int index = asRegister(v).getReferenceMapIndex(); + int index = asRegister(v).number; registers.put(index, null); } else if (isStackSlot(v)) { int index = frameMap.offsetForStackSlot(asStackSlot(v));
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,15 +26,15 @@ import java.util.BitSet; import java.util.List; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.asm.NumUtil;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -25,12 +25,12 @@ import java.util.BitSet; import java.util.List; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.LIRKind; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.meta.LIRKind; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.gen.LIRGenerationResult; import com.oracle.graal.lir.stackslotalloc.StackSlotAllocator;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilderImpl.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilderImpl.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,21 +22,20 @@ */ package com.oracle.graal.lir.framemap; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; import java.util.ArrayList; import java.util.BitSet; import java.util.EnumSet; import java.util.List; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.RegisterConfig; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.RegisterConfig; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug; @@ -44,6 +43,7 @@ import com.oracle.graal.lir.InstructionValueConsumer; import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.gen.LIRGenerationResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilderTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMapBuilderTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.VirtualStackSlot; +import com.oracle.graal.lir.VirtualStackSlot; /** * A {@link FrameMapBuilder} that allows access to the underlying {@link FrameMap}.
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/ReferenceMapBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/ReferenceMapBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.lir.framemap; -import jdk.internal.jvmci.code.ReferenceMap; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.ReferenceMap; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRFrameState;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/SimpleVirtualStackSlot.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/SimpleVirtualStackSlot.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -22,8 +22,9 @@ */ package com.oracle.graal.lir.framemap; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.LIRKind; +import com.oracle.graal.lir.VirtualStackSlot; + +import jdk.vm.ci.meta.LIRKind; /** * Represents a {@link VirtualStackSlot virtual stack slot} for a specific {@link LIRKind kind}.
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/VirtualStackSlotRange.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/VirtualStackSlotRange.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,10 @@ import java.util.BitSet; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.LIRKind; +import com.oracle.graal.lir.VirtualStackSlot; + +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.LIRKind; /** * Represents a {@link #getSlots() numbered} range of {@link VirtualStackSlot virtual stack slot} of
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/ArithmeticLIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/ArithmeticLIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2015, 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 @@ -22,71 +22,111 @@ */ package com.oracle.graal.lir.gen; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; -import com.oracle.graal.compiler.common.calc.FloatConvert; -import com.oracle.graal.compiler.common.type.Stamp; -import com.oracle.graal.lir.LIRFrameState; +import com.oracle.graal.lir.Variable; /** - * This interface can be used to generate LIR for arithmetic operations. - * - * The setFlags flag in emitAdd, emitSub and emitMul indicates, that the instruction must set the - * flags register to be used for a later branch. (On AMD64, the condition codes are set in every - * arithmetic instruction, but other architectures optionally set the flags register) If setFlags is - * set, the instruction must set the flags register; if false, the instruction may or may not set - * the flags register. + * This class traverses the HIR instructions and generates LIR instructions from them. */ -public interface ArithmeticLIRGenerator { +public abstract class ArithmeticLIRGenerator implements ArithmeticLIRGeneratorTool { + + LIRGenerator lirGen; - LIRKind getLIRKind(Stamp stamp); + public LIRGenerator getLIRGen() { + return lirGen; + } - Value emitNegate(Value input); + // automatic derived reference handling - Value emitAdd(Value a, Value b, boolean setFlags); - - Value emitSub(Value a, Value b, boolean setFlags); + protected abstract boolean isNumericInteger(PlatformKind kind); - Value emitMul(Value a, Value b, boolean setFlags); - - Value emitMulHigh(Value a, Value b); + protected abstract Variable emitAdd(LIRKind resultKind, Value a, Value b, boolean setFlags); - Value emitUMulHigh(Value a, Value b); - - Value emitDiv(Value a, Value b, LIRFrameState state); + @Override + public final Variable emitAdd(Value aVal, Value bVal, boolean setFlags) { + LIRKind resultKind; + Value a = aVal; + Value b = bVal; - Value emitRem(Value a, Value b, LIRFrameState state); - - Value emitUDiv(Value a, Value b, LIRFrameState state); + if (isNumericInteger(a.getPlatformKind())) { + LIRKind aKind = a.getLIRKind(); + LIRKind bKind = b.getLIRKind(); + assert a.getPlatformKind() == b.getPlatformKind(); - Value emitURem(Value a, Value b, LIRFrameState state); - - Value emitNot(Value input); - - Value emitAnd(Value a, Value b); + if (aKind.isUnknownReference()) { + resultKind = aKind; + } else if (bKind.isUnknownReference()) { + resultKind = bKind; + } else if (aKind.isValue() && bKind.isValue()) { + resultKind = aKind; + } else if (aKind.isValue()) { + if (bKind.isDerivedReference()) { + resultKind = bKind; + } else { + AllocatableValue allocatable = getLIRGen().asAllocatable(b); + resultKind = bKind.makeDerivedReference(allocatable); + b = allocatable; + } + } else if (bKind.isValue()) { + if (aKind.isDerivedReference()) { + resultKind = aKind; + } else { + AllocatableValue allocatable = getLIRGen().asAllocatable(a); + resultKind = aKind.makeDerivedReference(allocatable); + a = allocatable; + } + } else { + resultKind = aKind.makeUnknownReference(); + } + } else { + resultKind = LIRKind.combine(a, b); + } - Value emitOr(Value a, Value b); - - Value emitXor(Value a, Value b); + return emitAdd(resultKind, a, b, setFlags); + } - Value emitShl(Value a, Value b); - - Value emitShr(Value a, Value b); + protected abstract Variable emitSub(LIRKind resultKind, Value a, Value b, boolean setFlags); - Value emitUShr(Value a, Value b); - - Value emitFloatConvert(FloatConvert op, Value inputVal); + @Override + public final Variable emitSub(Value aVal, Value bVal, boolean setFlags) { + LIRKind resultKind; + Value a = aVal; + Value b = bVal; - Value emitReinterpret(LIRKind to, Value inputVal); + if (isNumericInteger(a.getPlatformKind())) { + LIRKind aKind = a.getLIRKind(); + LIRKind bKind = b.getLIRKind(); + assert a.getPlatformKind() == b.getPlatformKind(); - Value emitNarrow(Value inputVal, int bits); + if (aKind.isUnknownReference()) { + resultKind = aKind; + } else if (bKind.isUnknownReference()) { + resultKind = bKind; + } - Value emitSignExtend(Value inputVal, int fromBits, int toBits); - - Value emitZeroExtend(Value inputVal, int fromBits, int toBits); + if (aKind.isValue() && bKind.isValue()) { + resultKind = aKind; + } else if (bKind.isValue()) { + if (aKind.isDerivedReference()) { + resultKind = aKind; + } else { + AllocatableValue allocatable = getLIRGen().asAllocatable(a); + resultKind = aKind.makeDerivedReference(allocatable); + a = allocatable; + } + } else if (aKind.isDerivedReference() && bKind.isDerivedReference() && aKind.getDerivedReferenceBase().equals(bKind.getDerivedReferenceBase())) { + resultKind = LIRKind.value(a.getPlatformKind()); + } else { + resultKind = aKind.makeUnknownReference(); + } + } else { + resultKind = LIRKind.combine(a, b); + } - Value emitMathAbs(Value input); - - Value emitMathSqrt(Value input); + return emitSub(resultKind, a, b, setFlags); + } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/ArithmeticLIRGeneratorTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2013, 2014, 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.lir.gen; + +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; + +import com.oracle.graal.compiler.common.calc.FloatConvert; +import com.oracle.graal.lir.LIRFrameState; + +/** + * This interface can be used to generate LIR for arithmetic operations. + * + * The setFlags flag in emitAdd, emitSub and emitMul indicates, that the instruction must set the + * flags register to be used for a later branch. (On AMD64, the condition codes are set in every + * arithmetic instruction, but other architectures optionally set the flags register) If setFlags is + * set, the instruction must set the flags register; if false, the instruction may or may not set + * the flags register. + */ +public interface ArithmeticLIRGeneratorTool { + + Value emitNegate(Value input); + + Value emitAdd(Value a, Value b, boolean setFlags); + + Value emitSub(Value a, Value b, boolean setFlags); + + Value emitMul(Value a, Value b, boolean setFlags); + + Value emitMulHigh(Value a, Value b); + + Value emitUMulHigh(Value a, Value b); + + Value emitDiv(Value a, Value b, LIRFrameState state); + + Value emitRem(Value a, Value b, LIRFrameState state); + + Value emitUDiv(Value a, Value b, LIRFrameState state); + + Value emitURem(Value a, Value b, LIRFrameState state); + + Value emitNot(Value input); + + Value emitAnd(Value a, Value b); + + Value emitOr(Value a, Value b); + + Value emitXor(Value a, Value b); + + Value emitShl(Value a, Value b); + + Value emitShr(Value a, Value b); + + Value emitUShr(Value a, Value b); + + Value emitFloatConvert(FloatConvert op, Value inputVal); + + Value emitReinterpret(LIRKind to, Value inputVal); + + Value emitNarrow(Value inputVal, int bits); + + Value emitSignExtend(Value inputVal, int fromBits, int toBits); + + Value emitZeroExtend(Value inputVal, int fromBits, int toBits); + + Value emitMathAbs(Value input); + + Value emitMathSqrt(Value input); + + Value emitBitCount(Value operand); + + Value emitBitScanForward(Value operand); + + Value emitBitScanReverse(Value operand); +}
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/BenchmarkCounterFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/BenchmarkCounterFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.gen; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/BlockValueMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/BlockValueMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.gen; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,30 +27,30 @@ import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.asAllocatableValue; -import static jdk.internal.jvmci.code.ValueUtil.isAllocatableValue; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; +import static jdk.vm.ci.code.ValueUtil.asAllocatableValue; +import static jdk.vm.ci.code.ValueUtil.isAllocatableValue; +import static jdk.vm.ci.code.ValueUtil.isLegal; import java.util.ArrayList; import java.util.List; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterAttributes; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -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.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterAttributes; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.asm.Label; import com.oracle.graal.compiler.common.calc.Condition; @@ -95,11 +95,22 @@ private LIRGenerationResult res; - public LIRGenerator(LIRKindTool lirKindTool, CodeGenProviders providers, CallingConvention cc, LIRGenerationResult res) { + protected final ArithmeticLIRGenerator arithmeticLIRGen; + + public LIRGenerator(LIRKindTool lirKindTool, ArithmeticLIRGenerator arithmeticLIRGen, CodeGenProviders providers, CallingConvention cc, LIRGenerationResult res) { this.lirKindTool = lirKindTool; + this.arithmeticLIRGen = arithmeticLIRGen; this.res = res; this.providers = providers; this.cc = cc; + + assert arithmeticLIRGen.lirGen == null; + arithmeticLIRGen.lirGen = this; + } + + @Override + public ArithmeticLIRGeneratorTool getArithmetic() { + return arithmeticLIRGen; } @Override @@ -126,7 +137,7 @@ return providers.getForeignCalls(); } - protected LIRKindTool getLIRKindTool() { + public LIRKindTool getLIRKindTool() { return lirKindTool; } @@ -194,7 +205,7 @@ * @return True if the constant can be used directly, false if the constant needs to be in a * register. */ - protected abstract boolean canInlineConstant(JavaConstant c); + public abstract boolean canInlineConstant(JavaConstant c); public Value loadNonConst(Value value) { if (isJavaConstant(value) && !canInlineConstant(asJavaConstant(value))) { @@ -426,92 +437,4 @@ public LIRInstruction createMultiBenchmarkCounter(String[] names, String[] groups, Value[] increments) { throw JVMCIError.unimplemented(); } - - // automatic derived reference handling - - protected abstract boolean isNumericInteger(PlatformKind kind); - - protected abstract Variable emitAdd(LIRKind resultKind, Value a, Value b, boolean setFlags); - - public final Variable emitAdd(Value aVal, Value bVal, boolean setFlags) { - LIRKind resultKind; - Value a = aVal; - Value b = bVal; - - if (isNumericInteger(a.getPlatformKind())) { - LIRKind aKind = a.getLIRKind(); - LIRKind bKind = b.getLIRKind(); - assert a.getPlatformKind() == b.getPlatformKind(); - - if (aKind.isUnknownReference()) { - resultKind = aKind; - } else if (bKind.isUnknownReference()) { - resultKind = bKind; - } else if (aKind.isValue() && bKind.isValue()) { - resultKind = aKind; - } else if (aKind.isValue()) { - if (bKind.isDerivedReference()) { - resultKind = bKind; - } else { - AllocatableValue allocatable = asAllocatable(b); - resultKind = bKind.makeDerivedReference(allocatable); - b = allocatable; - } - } else if (bKind.isValue()) { - if (aKind.isDerivedReference()) { - resultKind = aKind; - } else { - AllocatableValue allocatable = asAllocatable(a); - resultKind = aKind.makeDerivedReference(allocatable); - a = allocatable; - } - } else { - resultKind = aKind.makeUnknownReference(); - } - } else { - resultKind = LIRKind.combine(a, b); - } - - return emitAdd(resultKind, a, b, setFlags); - } - - protected abstract Variable emitSub(LIRKind resultKind, Value a, Value b, boolean setFlags); - - public final Variable emitSub(Value aVal, Value bVal, boolean setFlags) { - LIRKind resultKind; - Value a = aVal; - Value b = bVal; - - if (isNumericInteger(a.getPlatformKind())) { - LIRKind aKind = a.getLIRKind(); - LIRKind bKind = b.getLIRKind(); - assert a.getPlatformKind() == b.getPlatformKind(); - - if (aKind.isUnknownReference()) { - resultKind = aKind; - } else if (bKind.isUnknownReference()) { - resultKind = bKind; - } - - if (aKind.isValue() && bKind.isValue()) { - resultKind = aKind; - } else if (bKind.isValue()) { - if (aKind.isDerivedReference()) { - resultKind = aKind; - } else { - AllocatableValue allocatable = asAllocatable(a); - resultKind = aKind.makeDerivedReference(allocatable); - a = allocatable; - } - } else if (aKind.isDerivedReference() && bKind.isDerivedReference() && aKind.getDerivedReferenceBase().equals(bKind.getDerivedReferenceBase())) { - resultKind = LIRKind.value(a.getPlatformKind()); - } else { - resultKind = aKind.makeUnknownReference(); - } - } else { - resultKind = LIRKind.combine(a, b); - } - - return emitSub(resultKind, a, b, setFlags); - } }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,34 +22,34 @@ */ package com.oracle.graal.lir.gen; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterAttributes; -import jdk.internal.jvmci.code.StackSlotValue; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -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.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PlatformKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterAttributes; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PlatformKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.spi.CodeGenProviders; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; +import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.lir.LIRFrameState; import com.oracle.graal.lir.LIRInstruction; import com.oracle.graal.lir.LabelRef; import com.oracle.graal.lir.SwitchStrategy; import com.oracle.graal.lir.Variable; -public interface LIRGeneratorTool extends ArithmeticLIRGenerator, BenchmarkCounterFactory { +public interface LIRGeneratorTool extends BenchmarkCounterFactory { /** * Factory for creating spill moves. @@ -74,6 +74,8 @@ } + ArithmeticLIRGeneratorTool getArithmetic(); + CodeGenProviders getProviders(); TargetDescription target(); @@ -166,7 +168,7 @@ */ void emitData(AllocatableValue dst, byte[] data); - Variable emitAddress(StackSlotValue slot); + Variable emitAddress(AllocatableValue stackslot); void emitMembar(int barriers); @@ -228,26 +230,11 @@ CallingConvention getCallingConvention(); - Variable emitBitCount(Value operand); - - Variable emitBitScanForward(Value operand); - - Variable emitBitScanReverse(Value operand); - Variable emitByteSwap(Value operand); Variable emitArrayEquals(JavaKind kind, Value array1, Value array2, Value length); void emitBlackhole(Value operand); - @SuppressWarnings("unused") - default Value emitCountLeadingZeros(Value value) { - throw JVMCIError.unimplemented(); - } - - @SuppressWarnings("unused") - default Value emitCountTrailingZeros(Value value) { - throw JVMCIError.unimplemented(); - } - + LIRKind getLIRKind(Stamp stamp); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/PhiResolver.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/PhiResolver.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,16 +23,16 @@ package com.oracle.graal.lir.gen; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.isIllegal; -import static jdk.internal.jvmci.code.ValueUtil.isLegal; -import static jdk.internal.jvmci.meta.Value.ILLEGAL; +import static jdk.vm.ci.code.ValueUtil.isIllegal; +import static jdk.vm.ci.code.ValueUtil.isLegal; +import static jdk.vm.ci.meta.Value.ILLEGAL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/SpillMoveFactoryBase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/SpillMoveFactoryBase.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,9 +27,9 @@ import java.util.EnumSet; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.LIRInstruction; import com.oracle.graal.lir.LIRInstruction.OperandFlag;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/AllocationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/AllocationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,10 +25,10 @@ import java.util.List; import java.util.regex.Pattern; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRPhaseSuite.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRPhaseSuite.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; import java.util.ListIterator; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.gen.LIRGenerationResult; @@ -61,6 +61,17 @@ } } + public final <T extends LIRPhase<C>> T findPhaseInstance(Class<T> phaseClass) { + ListIterator<LIRPhase<C>> it = phases.listIterator(); + while (it.hasNext()) { + LIRPhase<C> phase = it.next(); + if (phaseClass.isInstance(phase)) { + return phaseClass.cast(phase); + } + } + return null; + } + public static <C> boolean findNextPhase(ListIterator<LIRPhase<C>> it, Class<? extends LIRPhase<C>> phaseClass) { while (it.hasNext()) { LIRPhase<C> phase = it.next();
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRSuites.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRSuites.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.lir.phases; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.VirtualStackSlot; +import jdk.vm.ci.code.StackSlot; import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.Variable; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.gen.LIRGenerationResult; import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.lir.phases.AllocationPhase.AllocationContext;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/PostAllocationOptimizationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/PostAllocationOptimizationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.gen.BenchmarkCounterFactory;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/PostAllocationOptimizationStage.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/PostAllocationOptimizationStage.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,10 +23,10 @@ package com.oracle.graal.lir.phases; import static com.oracle.graal.lir.phases.LIRPhase.Options.LIROptimization; -import jdk.internal.jvmci.options.NestedBooleanOptionValue; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.NestedBooleanOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.lir.ControlFlowOptimizer; import com.oracle.graal.lir.EdgeMoveOptimizer;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/PreAllocationOptimizationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/PreAllocationOptimizationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.gen.LIRGenerationResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/profiling/MoveProfiling.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/profiling/MoveProfiling.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,19 +22,19 @@ */ package com.oracle.graal.lir.profiling; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; +import static jdk.vm.ci.code.ValueUtil.isStackSlot; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.ConstantValue;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSADestructionPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSADestructionPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.LIR;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAVerifier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssa/SSAVerifier.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,14 +24,14 @@ package com.oracle.graal.lir.ssa; import static com.oracle.graal.lir.LIRValueUtil.isJavaConstant; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.BitSet; import java.util.EnumSet; import java.util.HashMap; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,14 +23,14 @@ package com.oracle.graal.lir.ssi; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIConstructionPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIConstructionPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.Deque; import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.lir.LIR;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIVerifier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIVerifier.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,16 +23,16 @@ package com.oracle.graal.lir.ssi; import static com.oracle.graal.lir.LIRValueUtil.isConstantValue; -import static jdk.internal.jvmci.code.ValueUtil.isRegister; -import static jdk.internal.jvmci.code.ValueUtil.isStackSlotValue; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isStackSlotValue; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import static jdk.vm.ci.code.ValueUtil.isRegister; import java.util.EnumSet; import java.util.HashMap; import java.util.List; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/FixPointIntervalBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/FixPointIntervalBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.lir.stackslotalloc; -import static jdk.internal.jvmci.code.ValueUtil.asVirtualStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.asVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; import java.util.ArrayDeque; import java.util.BitSet; @@ -33,8 +33,7 @@ import java.util.List; import java.util.Set; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.BlockMap; @@ -44,6 +43,7 @@ import com.oracle.graal.lir.InstructionValueConsumer; import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/LSStackSlotAllocator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/LSStackSlotAllocator.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.lir.stackslotalloc; +import static com.oracle.graal.lir.LIRValueUtil.asVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; import static com.oracle.graal.lir.phases.LIRPhase.Options.LIROptimization; -import static jdk.internal.jvmci.code.ValueUtil.asVirtualStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; import java.util.ArrayDeque; import java.util.Arrays; @@ -36,14 +36,13 @@ import java.util.Set; import java.util.function.Consumer; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; -import jdk.internal.jvmci.options.NestedBooleanOptionValue; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; +import jdk.vm.ci.options.NestedBooleanOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -54,6 +53,7 @@ import com.oracle.graal.debug.Indent; import com.oracle.graal.lir.LIR; import com.oracle.graal.lir.LIRInstruction; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.ValueProcedure;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/SimpleStackSlotAllocator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/SimpleStackSlotAllocator.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,15 +22,14 @@ */ package com.oracle.graal.lir.stackslotalloc; -import static jdk.internal.jvmci.code.ValueUtil.asVirtualStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.asVirtualStackSlot; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; import java.util.List; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -39,6 +38,7 @@ import com.oracle.graal.debug.Indent; import com.oracle.graal.lir.LIRInstruction; import com.oracle.graal.lir.ValueProcedure; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMapBuilderTool; import com.oracle.graal.lir.framemap.SimpleVirtualStackSlot; import com.oracle.graal.lir.framemap.VirtualStackSlotRange;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/StackInterval.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/StackInterval.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,10 @@ */ package com.oracle.graal.lir.stackslotalloc; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.LIRKind; +import com.oracle.graal.lir.VirtualStackSlot; + +import jdk.vm.ci.code.StackSlot; +import jdk.vm.ci.meta.LIRKind; public final class StackInterval {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/StackIntervalDumper.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/StackIntervalDumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.lir.stackslotalloc; -import jdk.internal.jvmci.code.VirtualStackSlot; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.debug.IntervalDumper; class StackIntervalDumper implements IntervalDumper {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/StackSlotAllocator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/stackslotalloc/StackSlotAllocator.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.lir.stackslotalloc; -import jdk.internal.jvmci.code.StackSlot; -import jdk.internal.jvmci.code.VirtualStackSlot; +import jdk.vm.ci.code.StackSlot; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric; +import com.oracle.graal.lir.VirtualStackSlot; import com.oracle.graal.lir.framemap.FrameMapBuilderTool; import com.oracle.graal.lir.gen.LIRGenerationResult;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/GenericValueMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/GenericValueMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Map; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.CollectionsFactory;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/IndexedValueMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/IndexedValueMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.EnumSet; import java.util.Objects; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.lir.InstructionValueConsumer; import com.oracle.graal.lir.InstructionValueProcedure;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/ValueMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/ValueMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.util; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; /** * A map interface to map {@link Value}s to other objects.
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/ValueSet.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/ValueSet.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.lir.util; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; public abstract class ValueSet<S extends ValueSet<S>> {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/VariableVirtualStackValueMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/util/VariableVirtualStackValueMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.lir.util; import static com.oracle.graal.lir.LIRValueUtil.asVariable; +import static com.oracle.graal.lir.LIRValueUtil.asVirtualStackSlot; import static com.oracle.graal.lir.LIRValueUtil.isVariable; -import static jdk.internal.jvmci.code.ValueUtil.asVirtualStackSlot; -import static jdk.internal.jvmci.code.ValueUtil.isVirtualStackSlot; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Value; +import static com.oracle.graal.lir.LIRValueUtil.isVirtualStackSlot; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Value; public class VariableVirtualStackValueMap<K extends Value, T> extends ValueMap<K, T> {
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import static com.oracle.graal.loop.MathUtil.add; import static com.oracle.graal.loop.MathUtil.mul; import static com.oracle.graal.loop.MathUtil.sub; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,10 +25,10 @@ import static com.oracle.graal.loop.MathUtil.add; import static com.oracle.graal.loop.MathUtil.divBefore; import static com.oracle.graal.loop.MathUtil.sub; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.Stamp; @@ -175,6 +175,7 @@ } cond = graph.unique(new IntegerLessThanNode(end, v1)); } + assert graph.getGuardsStage().allowsFloatingGuards(); overflowGuard = graph.unique(new GuardNode(cond, AbstractBeginNode.prevBegin(loop.entryPoint()), DeoptimizationReason.LoopLimitCheck, DeoptimizationAction.InvalidateRecompile, true, JavaConstant.NULL_POINTER)); // TODO gd: use speculation loop.loopBegin().setOverflowGuard(overflowGuard);
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.loop.MathUtil.add; import static com.oracle.graal.loop.MathUtil.sub; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/InductionVariable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/InductionVariable.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.loop; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.nodes.StructuredGraph;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,7 +30,7 @@ import java.util.Map; import java.util.Queue; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.cfg.Loop;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.Iterator; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.graph.Graph; import com.oracle.graal.graph.Graph.DuplicationReplacement;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.graph.Graph.DuplicationReplacement;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopPolicies.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopPolicies.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,9 +28,9 @@ import java.util.List; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.ArrayList; import java.util.List; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; import com.oracle.graal.graph.Graph.Mark; import com.oracle.graal.graph.NodePosIterator;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopSafepointEliminationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopSafepointEliminationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -38,7 +38,7 @@ @Override protected void run(StructuredGraph graph, MidTierContext context) { LoopsData loops = new LoopsData(graph); - if (context.getOptimisticOptimizations().useLoopLimitChecks()) { + if (context.getOptimisticOptimizations().useLoopLimitChecks() && graph.getGuardsStage().allowsFloatingGuards()) { loops.detectedCountedLoops(); for (LoopEx loop : loops.countedLoops()) { if (loop.loop().getChildren().isEmpty() && loop.counted().getStamp().getBits() <= 32) { @@ -48,9 +48,7 @@ } if (hasSafepoint) { loop.counted().createOverFlowGuard(); - for (LoopEndNode loopEnd : loop.loopBegin().loopEnds()) { - loopEnd.disableSafepoint(); - } + loop.loopBegin().disableSafepoint(); } } }
--- a/graal/com.oracle.graal.microbenchmarks/src/com/oracle/graal/microbenchmarks/graal/util/GraalState.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.microbenchmarks/src/com/oracle/graal/microbenchmarks/graal/util/GraalState.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.microbenchmarks.graal.util; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.phases.util.Providers; import com.oracle.graal.runtime.RuntimeProvider;
--- a/graal/com.oracle.graal.microbenchmarks/src/com/oracle/graal/microbenchmarks/graal/util/GraalUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.microbenchmarks/src/com/oracle/graal/microbenchmarks/graal/util/GraalUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.lang.reflect.Method; import java.util.List; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration;
--- a/graal/com.oracle.graal.microbenchmarks/src/com/oracle/graal/microbenchmarks/graal/util/GraphState.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.microbenchmarks/src/com/oracle/graal/microbenchmarks/graal/util/GraphState.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.microbenchmarks.graal.util.GraalUtil.getGraph; import static com.oracle.graal.microbenchmarks.graal.util.GraalUtil.getMethodFromMethodSpec; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Scope;
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/AbstractObjectStampTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/AbstractObjectStampTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.test; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Assert;
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/IntegerStampTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import org.junit.Before; import org.junit.Test;
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ package com.oracle.graal.nodes.test; import static org.junit.Assert.assertEquals; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import org.junit.Before; import org.junit.Test;
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.test; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampMeetTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampMeetTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.test; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.test; -import jdk.internal.jvmci.meta.TrustedInterface; +import jdk.vm.ci.meta.TrustedInterface; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.IterableNodeType;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; @@ -37,7 +37,7 @@ import com.oracle.graal.nodes.util.GraphUtil; @NodeInfo -public abstract class AbstractFixedGuardNode extends DeoptimizingFixedWithNextNode implements Simplifiable, GuardingNode { +public abstract class AbstractFixedGuardNode extends DeoptimizingFixedWithNextNode implements Simplifiable, GuardingNode, DeoptimizingGuard { public static final NodeClass<AbstractFixedGuardNode> TYPE = NodeClass.create(AbstractFixedGuardNode.class); @Input(InputType.Condition) protected LogicNode condition; @@ -46,13 +46,18 @@ protected JavaConstant speculation; protected boolean negated; - public LogicNode condition() { + public LogicNode getCondition() { return condition; } - public void setCondition(LogicNode x) { + public LogicNode condition() { + return getCondition(); + } + + public void setCondition(LogicNode x, boolean negated) { updateUsages(condition, x); condition = x; + this.negated = negated; } protected AbstractFixedGuardNode(NodeClass<? extends AbstractFixedGuardNode> c, LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, JavaConstant speculation, @@ -94,15 +99,14 @@ public void simplify(SimplifierTool tool) { while (condition instanceof LogicNegationNode) { LogicNegationNode negation = (LogicNegationNode) condition; - setCondition(negation.getValue()); - negated = !negated; + setCondition(negation.getValue(), !negated); } } public DeoptimizeNode lowerToIf() { FixedNode currentNext = next(); setNext(null); - DeoptimizeNode deopt = graph().add(new DeoptimizeNode(action, reason)); + DeoptimizeNode deopt = graph().add(new DeoptimizeNode(action, reason, speculation)); deopt.setStateBefore(stateBefore()); IfNode ifNode; AbstractBeginNode noDeoptSuccessor;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Graph; @@ -75,7 +75,7 @@ @SuppressWarnings("deprecation") public LogicNode maybeCommuteInputs() { assert this instanceof BinaryCommutative; - if (x.getId() > y.getId()) { + if (!y.isConstant() && x.getId() > y.getId()) { ValueNode tmp = x; x = y; y = tmp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/CallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.List; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,15 +24,15 @@ import java.util.Map; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.VMConstant; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.VMConstant; import com.oracle.graal.compiler.common.type.AbstractObjectStamp; import com.oracle.graal.compiler.common.type.AbstractPointerStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.Value; import com.oracle.graal.debug.Debug; import com.oracle.graal.graph.NodeClass;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizingGuard.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015, 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.nodes; + +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; + +import com.oracle.graal.graph.NodeInterface; + +/** + * Shared interface to capture core methods of {@link AbstractFixedGuardNode} and {@link GuardNode}. + * + */ +public interface DeoptimizingGuard extends NodeInterface { + + LogicNode getCondition(); + + void setCondition(LogicNode x, boolean negated); + + DeoptimizationReason getReason(); + + DeoptimizationAction getAction(); + + JavaConstant getSpeculation(); + + boolean isNegated(); +}
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.List; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EncodedGraph.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EncodedGraph.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes; -import java.util.Set; +import java.util.List; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.NodeClass; @@ -41,7 +41,7 @@ private final Object[] objects; private final NodeClass<?>[] types; private final Assumptions assumptions; - private final Set<ResolvedJavaMethod> inlinedMethods; + private final List<ResolvedJavaMethod> inlinedMethods; /** * The "table of contents" of the encoded graph, i.e., the mapping from orderId numbers to the @@ -49,7 +49,7 @@ */ protected long[] nodeStartOffsets; - public EncodedGraph(byte[] encoding, long startOffset, Object[] objects, NodeClass<?>[] types, Assumptions assumptions, Set<ResolvedJavaMethod> inlinedMethods) { + public EncodedGraph(byte[] encoding, long startOffset, Object[] objects, NodeClass<?>[] types, Assumptions assumptions, List<ResolvedJavaMethod> inlinedMethods) { this.encoding = encoding; this.startOffset = startOffset; this.objects = objects; @@ -78,7 +78,7 @@ return assumptions; } - public Set<ResolvedJavaMethod> getInlinedMethods() { + public List<ResolvedJavaMethod> getInlinedMethods() { return inlinedMethods; } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryMarkerNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryMarkerNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.graph.IterableNodeType; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.graph.IterableNodeType; import com.oracle.graal.graph.NodeClass; @@ -55,8 +55,8 @@ public void simplify(SimplifierTool tool) { super.simplify(tool); - if (condition() instanceof LogicConstantNode) { - LogicConstantNode c = (LogicConstantNode) condition(); + if (getCondition() instanceof LogicConstantNode) { + LogicConstantNode c = (LogicConstantNode) getCondition(); if (c.getValue() == isNegated()) { FixedNode currentNext = this.next(); if (currentNext != null) { @@ -69,8 +69,8 @@ } this.replaceAtUsages(null); graph().removeFixed(this); - } else if (condition() instanceof ShortCircuitOrNode) { - ShortCircuitOrNode shortCircuitOr = (ShortCircuitOrNode) condition(); + } else if (getCondition() instanceof ShortCircuitOrNode) { + ShortCircuitOrNode shortCircuitOr = (ShortCircuitOrNode) getCondition(); if (isNegated() && hasNoUsages()) { graph().addAfterFixed(this, graph().add(new FixedGuardNode(shortCircuitOr.getY(), getReason(), getAction(), getSpeculation(), !shortCircuitOr.isYNegated()))); graph().replaceFixedWithFixed(this, graph().add(new FixedGuardNode(shortCircuitOr.getX(), getReason(), getAction(), getSpeculation(), !shortCircuitOr.isXNegated()))); @@ -90,7 +90,7 @@ * case. */ if (getAction() != DeoptimizationAction.None || getReason() != DeoptimizationReason.RuntimeConstraint) { - ValueNode guard = tool.createGuard(this, condition(), getReason(), getAction(), getSpeculation(), isNegated()).asNode(); + ValueNode guard = tool.createGuard(this, getCondition(), getReason(), getAction(), getSpeculation(), isNegated()).asNode(); this.replaceAtUsages(guard); ValueAnchorNode newAnchor = graph().add(new ValueAnchorNode(guard.asNode())); graph().replaceFixedWithFixed(this, newAnchor);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,20 +22,20 @@ */ package com.oracle.graal.nodes; -import static jdk.internal.jvmci.code.BytecodeFrame.getPlaceholderBciName; -import static jdk.internal.jvmci.code.BytecodeFrame.isPlaceholderBci; +import static jdk.vm.ci.code.BytecodeFrame.getPlaceholderBciName; +import static jdk.vm.ci.code.BytecodeFrame.isPlaceholderBci; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaUtil; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaUtil; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.bytecode.Bytecodes; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FullInfopointNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FullInfopointNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.code.InfopointReason; +import jdk.vm.ci.code.InfopointReason; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Simplifiable;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphDecoder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphDecoder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import static jdk.internal.jvmci.common.JVMCIError.shouldNotReachHere; +import static jdk.vm.ci.common.JVMCIError.shouldNotReachHere; import java.util.ArrayDeque; import java.util.ArrayList; @@ -35,8 +35,8 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.Fields; import com.oracle.graal.compiler.common.util.TypeReader;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphEncoder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GraphEncoder.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.Map; import java.util.Objects; -import jdk.internal.jvmci.code.Architecture; +import jdk.vm.ci.code.Architecture; import com.oracle.graal.compiler.common.Fields; import com.oracle.graal.compiler.common.util.FrequencyEncoder;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node; @@ -50,7 +50,7 @@ * control flow would have reached the guarded node (without taking exceptions into account). */ @NodeInfo(nameTemplate = "Guard(!={p#negated}) {p#reason/s}", allowedUsageTypes = {InputType.Guard}) -public class GuardNode extends FloatingAnchoredNode implements Canonicalizable, GuardingNode { +public class GuardNode extends FloatingAnchoredNode implements Canonicalizable, GuardingNode, DeoptimizingGuard { public static final NodeClass<GuardNode> TYPE = NodeClass.create(GuardNode.class); @Input(InputType.Condition) protected LogicNode condition; @@ -75,19 +75,25 @@ /** * The instruction that produces the tested boolean value. */ - public LogicNode condition() { + public LogicNode getCondition() { return condition; } + public void setCondition(LogicNode x, boolean negated) { + updateUsages(condition, x); + condition = x; + this.negated = negated; + } + public boolean isNegated() { return negated; } - public DeoptimizationReason reason() { + public DeoptimizationReason getReason() { return reason; } - public DeoptimizationAction action() { + public DeoptimizationAction getAction() { return action; } @@ -110,12 +116,12 @@ @Override public Node canonical(CanonicalizerTool tool) { - if (condition() instanceof LogicNegationNode) { - LogicNegationNode negation = (LogicNegationNode) condition(); + if (getCondition() instanceof LogicNegationNode) { + LogicNegationNode negation = (LogicNegationNode) getCondition(); return new GuardNode(negation.getValue(), getAnchor(), reason, action, !negated, speculation); } - if (condition() instanceof LogicConstantNode) { - LogicConstantNode c = (LogicConstantNode) condition(); + if (getCondition() instanceof LogicConstantNode) { + LogicConstantNode c = (LogicConstantNode) getCondition(); if (c.getValue() != negated) { return null; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.IterableNodeType;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,16 +28,16 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.JavaTypeProfile.ProfiledType; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.JavaTypeProfile.ProfiledType; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.calc.Condition; @@ -1146,7 +1146,7 @@ */ public static Constant[] constantValues(ValueNode node, AbstractMergeNode merge, boolean allowNull) { if (node.isConstant()) { - JavaConstant[] result = new JavaConstant[merge.forwardEndCount()]; + Constant[] result = new Constant[merge.forwardEndCount()]; Arrays.fill(result, node.asConstant()); return result; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.List; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.code.InfopointReason; +import jdk.vm.ci.code.InfopointReason; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/Invoke.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.Map; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.Map; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/KillingBeginNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/KillingBeginNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.InputType;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -50,11 +50,25 @@ protected int unswitches; protected int inversionCount; + /** See {@link LoopEndNode#canSafepoint} for more information. */ + boolean canEndsSafepoint; + @OptionalInput(InputType.Guard) GuardingNode overflowGuard; public LoopBeginNode() { super(TYPE); loopFrequency = 1; + this.canEndsSafepoint = true; + } + + /** Disables safepoint for the whole loop, i.e., for all {@link LoopEndNode loop ends}. */ + public void disableSafepoint() { + /* Store flag locally in case new loop ends are created later on. */ + this.canEndsSafepoint = false; + /* Propagate flag to all existing loop ends. */ + for (LoopEndNode loopEnd : loopEnds()) { + loopEnd.disableSafepoint(); + } } public double loopFrequency() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -39,16 +39,31 @@ public static final NodeClass<LoopEndNode> TYPE = NodeClass.create(LoopEndNode.class); @Input(InputType.Association) LoopBeginNode loopBegin; - protected boolean canSafepoint; protected int endIndex; + /** + * Most loop ends need a safepoint (flag set to true) so that garbage collection can interrupt a + * long-running (possibly endless) loop. Safepoints may be disabled for two reasons: 1) Some + * code must be safepoint free, i.e., uninterruptible by garbage collection. 2) An optimization + * phase determined that the loop already has another safepoint or cannot be endless, so there + * is no need for a loop-end safepoint. + * + * Note that 1) is a hard correctness issue: emitting a safepoint in uninterruptible code is a + * bug, i.e., it is not allowed to set the flag back to true once it is false. To ensure that + * loop ends that are created late, e.g., during control flow simplifications, have no + * safepoints in such cases, the safepoints are actually disabled for the + * {@link LoopBeginNode#canEndsSafepoint loop begin}. New loop ends inherit the flag value from + * the loop begin. + */ + boolean canSafepoint; + public LoopEndNode(LoopBeginNode begin) { super(TYPE); int idx = begin.nextEndIndex(); assert idx >= 0; this.endIndex = idx; this.loopBegin = begin; - this.canSafepoint = true; + this.canSafepoint = begin.canEndsSafepoint; } @Override @@ -65,11 +80,16 @@ this.loopBegin = x; } + /** + * Disables safepoints for only this loop end (in contrast to disabling it for + * {@link LoopBeginNode#disableSafepoint() the whole loop}. + */ public void disableSafepoint() { this.canSafepoint = false; } public boolean canSafepoint() { + assert !canSafepoint || loopBegin.canEndsSafepoint : "When safepoints are disabled for loop begin, safepoints must be disabled for all loop ends"; return canSafepoint; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.List; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/NamedLocationIdentity.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/NamedLocationIdentity.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ import java.util.EnumMap; import java.util.HashSet; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaKind.FormatWithToString; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind.FormatWithToString; +import jdk.vm.ci.meta.LocationIdentity; /** * A {@link LocationIdentity} with a name.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.IterableNodeType;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Iterator; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ //JaCoCo Exclude -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.IterableNodeType;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,13 +26,15 @@ import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.Lowerable; +import com.oracle.graal.nodes.spi.LoweringTool; import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * Marks a position in the graph where a safepoint should be emitted. */ @NodeInfo -public final class SafepointNode extends DeoptimizingFixedWithNextNode implements LIRLowerable { +public final class SafepointNode extends DeoptimizingFixedWithNextNode implements Lowerable, LIRLowerable { public static final NodeClass<SafepointNode> TYPE = NodeClass.create(SafepointNode.class); @@ -41,6 +43,11 @@ } @Override + public void lower(LoweringTool tool) { + tool.getLowerer().lower(this, tool); + } + + @Override public void generate(NodeLIRBuilderTool gen) { gen.visitSafepointNode(this); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.code.InfopointReason; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.code.InfopointReason; import com.oracle.graal.graph.IterableNodeType; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimplifyingGraphDecoder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimplifyingGraphDecoder.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.List; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.graph.Graph; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.InputType;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,20 +22,19 @@ */ package com.oracle.graal.nodes; -import java.util.HashMap; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; -import jdk.internal.jvmci.compiler.Compiler; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.Assumption; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.SpeculationLog; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.Assumption; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.SpeculationLog; +import jdk.vm.ci.runtime.JVMCICompiler; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.debug.JavaMethodContext; @@ -128,10 +127,10 @@ private final SpeculationLog speculationLog; /** - * Records the methods that were inlined while constructing this graph along with how many times - * each method was inlined. + * Records the methods that were inlined while constructing this graph, one entry for each time + * a specific method is inlined. */ - private Map<ResolvedJavaMethod, Integer> inlinedMethods = new HashMap<>(); + private final List<ResolvedJavaMethod> inlinedMethods = new ArrayList<>(); private static enum UnsafeAccessState { NO_ACCESS, @@ -154,19 +153,19 @@ * start} node. */ public StructuredGraph(String name, ResolvedJavaMethod method, AllowAssumptions allowAssumptions) { - this(name, method, uniqueGraphIds.incrementAndGet(), Compiler.INVOCATION_ENTRY_BCI, allowAssumptions, null); + this(name, method, uniqueGraphIds.incrementAndGet(), JVMCICompiler.INVOCATION_ENTRY_BCI, allowAssumptions, null); } public StructuredGraph(String name, ResolvedJavaMethod method, AllowAssumptions allowAssumptions, SpeculationLog speculationLog) { - this(name, method, uniqueGraphIds.incrementAndGet(), Compiler.INVOCATION_ENTRY_BCI, allowAssumptions, speculationLog); + this(name, method, uniqueGraphIds.incrementAndGet(), JVMCICompiler.INVOCATION_ENTRY_BCI, allowAssumptions, speculationLog); } public StructuredGraph(ResolvedJavaMethod method, AllowAssumptions allowAssumptions) { - this(null, method, uniqueGraphIds.incrementAndGet(), Compiler.INVOCATION_ENTRY_BCI, allowAssumptions, null); + this(null, method, uniqueGraphIds.incrementAndGet(), JVMCICompiler.INVOCATION_ENTRY_BCI, allowAssumptions, null); } public StructuredGraph(ResolvedJavaMethod method, AllowAssumptions allowAssumptions, SpeculationLog speculationLog) { - this(null, method, uniqueGraphIds.incrementAndGet(), Compiler.INVOCATION_ENTRY_BCI, allowAssumptions, speculationLog); + this(null, method, uniqueGraphIds.incrementAndGet(), JVMCICompiler.INVOCATION_ENTRY_BCI, allowAssumptions, speculationLog); } public StructuredGraph(ResolvedJavaMethod method, int entryBCI, AllowAssumptions allowAssumptions, SpeculationLog speculationLog) { @@ -237,7 +236,7 @@ } public boolean isOSR() { - return entryBCI != Compiler.INVOCATION_ENTRY_BCI; + return entryBCI != JVMCICompiler.INVOCATION_ENTRY_BCI; } public long graphId() { @@ -257,14 +256,10 @@ @Override protected Graph copy(String newName, Consumer<Map<Node, Node>> duplicationMapCallback) { AllowAssumptions allowAssumptions = AllowAssumptions.from(assumptions != null); - boolean enableInlinedMethodRecording = isInlinedMethodRecordingEnabled(); StructuredGraph copy = new StructuredGraph(newName, method, graphId, entryBCI, allowAssumptions, speculationLog); if (allowAssumptions == AllowAssumptions.YES && assumptions != null) { copy.assumptions.record(assumptions); } - if (!enableInlinedMethodRecording) { - copy.disableInlinedMethodRecording(); - } copy.hasUnsafeAccess = hasUnsafeAccess; copy.setGuardsStage(getGuardsStage()); copy.isAfterFloatingReadPhase = isAfterFloatingReadPhase; @@ -546,83 +541,38 @@ } /** - * Disables method inlining recording while constructing this graph. This can be done at most - * once and must be done before any inlined methods are recorded. + * Gets the methods that were inlined while constructing this graph. */ - public void disableInlinedMethodRecording() { - assert inlinedMethods != null : "cannot disable method inlining recording more than once"; - assert inlinedMethods.isEmpty() : "cannot disable method inlining recording once methods have been recorded"; - inlinedMethods = null; - } - - public boolean isInlinedMethodRecordingEnabled() { - return inlinedMethods != null; - } - - /** - * Gets the methods that were inlined while constructing this graph. - * - * @return {@code null} if method inlining recording has been - * {@linkplain #disableInlinedMethodRecording() disabled} - */ - public Set<ResolvedJavaMethod> getInlinedMethods() { - return inlinedMethods == null ? null : inlinedMethods.keySet(); + public List<ResolvedJavaMethod> getInlinedMethods() { + return inlinedMethods; } /** - * If method inlining recording has not been {@linkplain #disableInlinedMethodRecording() - * disabled}, records that {@code inlinedMethod} was inlined to this graph. Otherwise, this - * method does nothing. + * Records that {@code inlinedMethod} was inlined to this graph. */ public void recordInlinedMethod(ResolvedJavaMethod inlinedMethod) { - if (inlinedMethods != null) { - Integer count = inlinedMethods.get(inlinedMethod); - if (count != null) { - inlinedMethods.put(inlinedMethod, count + 1); - } else { - inlinedMethods.put(inlinedMethod, 1); - } - } + inlinedMethods.add(inlinedMethod); } /** - * If method inlining recording has not been {@linkplain #disableInlinedMethodRecording() - * disabled}, updates the {@linkplain #getInlinedMethods() inlined methods} of this graph with - * the inlined methods of another graph. Otherwise, this method does nothing. + * Updates the {@linkplain #getInlinedMethods() inlined methods} of this graph with the inlined + * methods of another graph. */ public void updateInlinedMethods(StructuredGraph other) { - if (inlinedMethods != null) { - assert this != other; - Map<ResolvedJavaMethod, Integer> otherInlinedMethods = other.inlinedMethods; - if (otherInlinedMethods != null) { - for (Map.Entry<ResolvedJavaMethod, Integer> e : otherInlinedMethods.entrySet()) { - ResolvedJavaMethod key = e.getKey(); - Integer count = inlinedMethods.get(key); - if (count != null) { - inlinedMethods.put(key, count + e.getValue()); - } else { - inlinedMethods.put(key, e.getValue()); - } - } - } - } + assert this != other; + this.inlinedMethods.addAll(other.inlinedMethods); } /** * Gets the input bytecode {@linkplain ResolvedJavaMethod#getCodeSize() size} from which this * graph is constructed. This ignores how many bytecodes in each constituent method are actually * parsed (which may be none for methods whose IR is retrieved from a cache or less than the - * full amount for any given method due to profile guided branch pruning). If method inlining - * recording has been {@linkplain #disableInlinedMethodRecording() disabled} for this graph, - * bytecode counts for inlined methods are not included in the returned value. + * full amount for any given method due to profile guided branch pruning). */ public int getBytecodeSize() { int res = method.getCodeSize(); - if (inlinedMethods != null) { - for (Map.Entry<ResolvedJavaMethod, Integer> e : inlinedMethods.entrySet()) { - int inlinedBytes = e.getValue() * e.getKey().getCodeSize(); - res += inlinedBytes; - } + for (ResolvedJavaMethod e : inlinedMethods) { + res += e.getCodeSize(); } return res; }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeCheckHints.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeCheckHints.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,11 +24,11 @@ import java.util.Arrays; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.JavaTypeProfile.ProfiledType; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.JavaTypeProfile.ProfiledType; +import jdk.vm.ci.meta.ResolvedJavaType; /** * Utility for deriving hint types for a type check instruction (e.g. checkcast or instanceof) based
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnaryOpLogicNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNodeUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNodeUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.ArrayList; import java.util.Collection; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.graph.Node; import com.oracle.graal.nodeinfo.Verbosity; @@ -88,9 +88,8 @@ /** * Converts a given instruction to a value string. The representation of an node as a value is - * formed by concatenating the {@linkplain jdk.internal.jvmci.meta.JavaKind#getTypeChar - * character} denoting its {@linkplain ValueNode#getStackKind kind} and its id. For example, - * {@code "i13"}. + * formed by concatenating the {@linkplain jdk.vm.ci.meta.JavaKind#getTypeChar character} + * denoting its {@linkplain ValueNode#getStackKind kind} and its id. For example, {@code "i13"}. * * @param value the instruction to convert to a value string. If {@code value == null}, then "-" * is returned.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AbsNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AbsNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,11 +26,11 @@ import com.oracle.graal.compiler.common.type.ArithmeticOpTable.UnaryOp.Abs; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * Absolute value. @@ -56,7 +56,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitMathAbs(nodeValueMap.operand(getValue()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -32,11 +32,11 @@ import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = "+") public class AddNode extends BinaryArithmeticNode<Add> implements NarrowableArithmeticNode, BinaryCommutative<ValueNode> { @@ -112,7 +112,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { Value op1 = nodeValueMap.operand(getX()); assert op1 != null : getX() + ", this=" + this; Value op2 = nodeValueMap.operand(getY());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.PrimitiveConstant; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -35,11 +35,11 @@ import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; import com.oracle.graal.nodes.util.GraphUtil; @NodeInfo(shortName = "&") @@ -106,7 +106,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitAnd(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.io.Serializable; import java.util.function.Function; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -86,6 +86,10 @@ return null; } + public Stamp tryFoldStamp(Stamp xStamp, Stamp yStamp) { + return getOp(getX(), getY()).foldStamp(xStamp, yStamp); + } + @Override public boolean inferStamp() { return updateStamp(getOp(getX(), getY()).foldStamp(getX().stamp(), getY().stamp()));
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.AbstractObjectStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ package com.oracle.graal.nodes.calc; import static com.oracle.graal.nodes.calc.CompareNode.createCompareNode; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.IntegerStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.graph.NodeInterface;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/DivNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/DivNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.PrimitiveConstant; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -32,11 +32,11 @@ import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = "/") public final class DivNode extends BinaryArithmeticNode<Div> { @@ -94,7 +94,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitDiv(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()), null)); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,21 +24,21 @@ import java.util.EnumMap; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; import com.oracle.graal.compiler.common.calc.FloatConvert; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.FloatConvertOp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; import com.oracle.graal.nodes.spi.Lowerable; import com.oracle.graal.nodes.spi.LoweringTool; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * A {@code FloatConvert} converts between integers and floating point numbers according to Java @@ -117,7 +117,8 @@ tool.getLowerer().lower(this, tool); } - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + @Override + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitFloatConvert(getFloatConvert(), nodeValueMap.operand(getValue()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.FloatStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.FloatStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.IntegerStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.io.Serializable; import java.util.function.Function; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.IntegerConvertOp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; +import jdk.vm.ci.code.CodeUtil; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp; @@ -119,7 +119,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitDiv(gen.operand(getX()), gen.operand(getY()), gen.state(this))); + gen.setResult(this, gen.getLIRGeneratorTool().getArithmetic().emitDiv(gen.operand(getX()), gen.operand(getY()), gen.state(this))); } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.AbstractPointerStamp; @@ -169,6 +169,15 @@ } } } + if (nonConstant instanceof AndNode) { + /* + * a & c == c is the same as a & c != 0, if c is a single bit. + */ + AndNode andNode = (AndNode) nonConstant; + if (constant instanceof PrimitiveConstant && Long.bitCount(((PrimitiveConstant) constant).asLong()) == 1 && andNode.getY().isConstant() && andNode.getY().asJavaConstant().equals(constant)) { + return new LogicNegationNode(new IntegerTestNode(andNode.getX(), andNode.getY())); + } + } return super.canonicalizeSymmetricConstant(tool, constant, nonConstant, mirrored); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.FloatStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; +import jdk.vm.ci.code.CodeUtil; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.graph.NodeClass; @@ -79,7 +79,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitRem(gen.operand(getX()), gen.operand(getY()), gen.state(this))); + gen.setResult(this, gen.getLIRGeneratorTool().getArithmetic().emitRem(gen.operand(getX()), gen.operand(getY()), gen.state(this))); } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.AbstractPointerStamp; import com.oracle.graal.compiler.common.type.ObjectStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,17 +22,17 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.ShiftOp.Shl; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = "<<") public final class LeftShiftNode extends ShiftNode<Shl> { @@ -86,7 +86,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitShl(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -34,11 +34,11 @@ import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = "*") public class MulNode extends BinaryArithmeticNode<Mul> implements NarrowableArithmeticNode, BinaryCommutative<ValueNode> { @@ -97,7 +97,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { Value op1 = nodeValueMap.operand(getX()); Value op2 = nodeValueMap.operand(getY()); if (!getY().isConstant() && !BinaryArithmeticNode.livesLonger(this, getY(), nodeValueMap)) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,10 +29,10 @@ import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * The {@code NarrowNode} converts an integer to a narrower integer. @@ -109,7 +109,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitNarrow(nodeValueMap.operand(getValue()), getResultBits())); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,10 +26,10 @@ import com.oracle.graal.compiler.common.type.ArithmeticOpTable.UnaryOp.Neg; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * The {@code NegateNode} node negates its operand. @@ -60,7 +60,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitNegate(nodeValueMap.operand(getValue()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.FloatStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,11 +26,11 @@ import com.oracle.graal.compiler.common.type.ArithmeticOpTable.UnaryOp.Not; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * Binary negation of long or integer values. @@ -57,7 +57,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitNot(nodeValueMap.operand(getValue()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,13 +22,13 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.AbstractObjectStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.PrimitiveConstant; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -34,11 +34,11 @@ import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; import com.oracle.graal.nodes.util.GraphUtil; @NodeInfo(shortName = "|") @@ -93,7 +93,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitOr(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.AbstractPointerStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,21 +25,21 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.SerializableConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.SerializableConstant; import com.oracle.graal.compiler.common.type.ArithmeticStamp; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * The {@code ReinterpretNode} class represents a reinterpreting conversion that changes the stamp @@ -90,9 +90,9 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { - LIRKind kind = gen.getLIRKind(stamp()); - nodeValueMap.setResult(this, gen.emitReinterpret(kind, nodeValueMap.operand(getValue()))); + public void generate(NodeLIRBuilderTool builder, ArithmeticLIRGeneratorTool gen) { + LIRKind kind = builder.getLIRGeneratorTool().getLIRKind(stamp()); + builder.setResult(this, gen.emitReinterpret(kind, builder.operand(getValue()))); } public static ValueNode reinterpret(JavaKind toKind, ValueNode value) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RemNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RemNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,12 +25,12 @@ import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.Rem; import com.oracle.graal.graph.NodeClass; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.spi.Lowerable; import com.oracle.graal.nodes.spi.LoweringTool; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = "%") public final class RemNode extends BinaryArithmeticNode<Rem> implements Lowerable { @@ -47,7 +47,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitRem(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()), null)); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,18 +22,18 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; +import jdk.vm.ci.code.CodeUtil; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.ShiftOp.Shr; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = ">>") public final class RightShiftNode extends ShiftNode<Shr> { @@ -99,7 +99,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitShr(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()))); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ import java.io.Serializable; import java.util.function.Function; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.ShiftOp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,10 +30,10 @@ import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * The {@code SignExtendNode} converts an integer to a wider integer using sign extension. @@ -105,7 +105,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitSignExtend(nodeValueMap.operand(getValue()), getInputBits(), getResultBits())); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SqrtNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SqrtNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,11 +25,11 @@ import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.UnaryOp.Sqrt; import com.oracle.graal.graph.NodeClass; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * Square root. @@ -44,7 +44,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitMathSqrt(nodeValueMap.operand(getValue()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.PrimitiveConstant; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -33,11 +33,11 @@ import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; import com.oracle.graal.nodes.util.GraphUtil; @NodeInfo(shortName = "-") @@ -156,7 +156,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitSub(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()), false)); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; +import jdk.vm.ci.code.CodeUtil; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.graph.NodeClass; @@ -76,7 +76,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitUDiv(gen.operand(getX()), gen.operand(getY()), gen.state(this))); + gen.setResult(this, gen.getLIRGeneratorTool().getArithmetic().emitUDiv(gen.operand(getX()), gen.operand(getY()), gen.state(this))); } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; +import jdk.vm.ci.code.CodeUtil; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.graph.NodeClass; @@ -75,7 +75,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { - gen.setResult(this, gen.getLIRGeneratorTool().emitURem(gen.operand(getX()), gen.operand(getY()), gen.state(this))); + gen.setResult(this, gen.getLIRGeneratorTool().getArithmetic().emitURem(gen.operand(getX()), gen.operand(getY()), gen.state(this))); } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,18 +22,18 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.ShiftOp.UShr; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = ">>>") public final class UnsignedRightShiftNode extends ShiftNode<UShr> { @@ -87,7 +87,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitUShr(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()))); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.PrimitiveConstant; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.PrimitiveConstant; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; @@ -34,11 +34,11 @@ import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; import com.oracle.graal.nodes.util.GraphUtil; @NodeInfo(shortName = "^") @@ -94,7 +94,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitXor(nodeValueMap.operand(getX()), nodeValueMap.operand(getY()))); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.calc; -import jdk.internal.jvmci.code.CodeUtil; +import jdk.vm.ci.code.CodeUtil; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.type.ArithmeticOpTable; @@ -34,10 +34,10 @@ import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * The {@code ZeroExtendNode} converts an integer to a wider integer using zero extension. @@ -119,7 +119,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitZeroExtend(nodeValueMap.operand(getValue()), getInputBits(), getResultBits())); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Block.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Block.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Iterator; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.List; import java.util.ListIterator; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph; import com.oracle.graal.compiler.common.cfg.CFGVerifier;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/HIRLoop.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/HIRLoop.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.cfg; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.cfg.Loop; import com.oracle.graal.nodes.LoopBeginNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/LocationSet.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/LocationSet.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; public class LocationSet { private LocationIdentity firstLocation;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.debug; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.Collections; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,10 +24,10 @@ import java.util.List; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; @@ -70,6 +70,7 @@ this.arguments = new NodeInputList<>(this, arguments); this.descriptor = descriptor; this.foreignCalls = foreignCalls; + assert descriptor.getArgumentTypes().length == this.arguments.size() : "wrong number of arguments to " + this; } public ForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp) { @@ -84,6 +85,7 @@ this.arguments = new NodeInputList<>(this, arguments); this.descriptor = descriptor; this.foreignCalls = foreignCalls; + assert descriptor.getArgumentTypes().length == this.arguments.size() : "wrong number of arguments to " + this; } @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/GetClassNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/GetClassNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.ArrayList; import java.util.Arrays; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaWriteNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaWriteNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.Arrays; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; import com.oracle.graal.compiler.common.type.AbstractPointerStamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCopyNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCopyNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaField; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes.extended; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaField; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -83,7 +83,7 @@ if (currentNext.getGuard() == anchored) { GraphUtil.removeFixedWithUnusedInputs(this); return; - } else if (currentNext.getGuard() == null && anchored instanceof GuardNode && ((GuardNode) anchored).condition() instanceof IsNullNode) { + } else if (currentNext.getGuard() == null && anchored instanceof GuardNode && ((GuardNode) anchored).getCondition() instanceof IsNullNode) { // coalesce null check guards into subsequent read/write currentNext.setGuard((GuardingNode) anchored); tool.addToWorkList(next());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaField; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessMonitorNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import sun.misc.Unsafe; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import sun.misc.Unsafe; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,16 +23,16 @@ package com.oracle.graal.nodes.java; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.NOT_FREQUENT_PROBABILITY; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.ArrayStoreException; -import static jdk.internal.jvmci.meta.DeoptimizationReason.ClassCastException; -import static jdk.internal.jvmci.meta.DeoptimizationReason.UnreachedCode; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.TriState; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.ArrayStoreException; +import static jdk.vm.ci.meta.DeoptimizationReason.ClassCastException; +import static jdk.vm.ci.meta.DeoptimizationReason.UnreachedCode; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ClassIsAssignableFromNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ClassIsAssignableFromNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,9 +23,9 @@ //JaCoCo Exclude package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.lang.reflect.Modifier; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Canonicalizable;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,14 +23,14 @@ package com.oracle.graal.nodes.java; import static com.oracle.graal.graph.iterators.NodePredicates.isNotA; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredAtomicReadAndWriteNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredAtomicReadAndWriteNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import sun.misc.Unsafe; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,16 +22,16 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.IterableNodeType; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.IterableNodeType; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Collections; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.lang.ref.Reference; import java.util.Collections; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RawMonitorEnterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RawMonitorEnterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.graph.IterableNodeType;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,8 +23,8 @@ package com.oracle.graal.nodes.java; import static com.oracle.graal.nodes.java.ForeignCallDescriptors.REGISTER_FINALIZER; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; import com.oracle.graal.compiler.common.spi.ForeignCallLinkage; import com.oracle.graal.compiler.common.type.ObjectStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaField; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeCheckNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.nodes.java; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.util.ArrayList; import java.util.Arrays; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.AbstractPointerStamp; import com.oracle.graal.compiler.common.type.ObjectStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/AbstractWriteNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/AbstractWriteNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/Access.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/Access.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.nodes.extended.GuardedNode; import com.oracle.graal.nodes.memory.address.AddressNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FixedAccessNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FixedAccessNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FloatableAccessNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FloatableAccessNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FloatingAccessNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FloatingAccessNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FloatingReadNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/FloatingReadNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryAccess.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; /** * This interface marks nodes that access some memory location, and that have an edge to the last
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryCheckpoint.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryCheckpoint.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.FixedNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Collection; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; /** * Maps a {@linkplain LocationIdentity location} to the last node that (potentially) wrote to the
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryMapNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryMapNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.LocationIdentity.any; import java.util.ArrayList; import java.util.Collection; @@ -30,7 +30,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryPhiNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/MemoryPhiNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/ReadNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/ReadNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,11 +23,11 @@ package com.oracle.graal.nodes.memory; import static com.oracle.graal.nodes.NamedLocationIdentity.ARRAY_LENGTH_LOCATION; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/WriteNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/WriteNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.memory; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.Simplifiable;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/address/OffsetAddressNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/address/OffsetAddressNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.memory.address; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRLowerable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRLowerable.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,14 @@ */ package com.oracle.graal.nodes.spi; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodes.ArithmeticOperation; -public interface ArithmeticLIRLowerable extends ArithmeticOperation { +public interface ArithmeticLIRLowerable extends ArithmeticOperation, LIRLowerable { - void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen); + default void generate(NodeLIRBuilderTool builder) { + generate(builder, builder.getLIRGeneratorTool().getArithmetic()); + } + + void generate(NodeLIRBuilderTool builder, ArithmeticLIRGeneratorTool gen); }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.spi; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LoweringTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.spi; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.nodes.FixedNode; import com.oracle.graal.nodes.FixedWithNextNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/MemoryProxy.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/MemoryProxy.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.nodes.spi; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.nodes.memory.MemoryNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.util.Collection; import java.util.List; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.BlockMap; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeValueMap.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeValueMap.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ package com.oracle.graal.nodes.spi; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.lang.reflect.Type; import java.util.Collection; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.api.replacements.ClassSubstitution; import com.oracle.graal.api.replacements.MethodSubstitution;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ReplacementsProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ReplacementsProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.spi; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.api.replacements.SnippetReflectionProvider;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/UncheckedInterfaceProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/UncheckedInterfaceProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.spi; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/VirtualizerTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,10 +24,10 @@ import java.util.List; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.Collection; import java.util.Iterator; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.AbstractObjectStamp; import com.oracle.graal.compiler.common.type.AbstractPointerStamp;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,12 +27,12 @@ import java.util.Collection; import java.util.Iterator; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.code.SourceStackTrace; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.code.SourceStackTrace; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeWorkList;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.nio.ByteOrder; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import sun.misc.Unsafe; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualBoxingNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualBoxingNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.virtual; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.nodes.virtual; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualObjectNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.nodes.virtual; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.IterableNodeType;
--- a/graal/com.oracle.graal.phases.common.test/src/com/oracle/graal/phases/common/test/StampFactoryTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common.test/src/com/oracle/graal/phases/common/test/StampFactoryTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,13 +24,13 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; import org.junit.Assert; import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.runtime.RuntimeProvider;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.phases.common; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,9 +27,9 @@ import java.util.Objects; import java.util.Set; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.Stamp; @@ -487,12 +487,12 @@ } private GuardedStamp computeGuardedStamp(GuardNode guard) { - if (guard.condition() instanceof IntegerBelowNode) { + if (guard.getCondition() instanceof IntegerBelowNode) { if (guard.isNegated()) { // Not sure how to reason about negated guards return null; } - IntegerBelowNode below = (IntegerBelowNode) guard.condition(); + IntegerBelowNode below = (IntegerBelowNode) guard.getCondition(); if (below.getX().getStackKind() == JavaKind.Int && below.getX().isConstant() && !below.getY().isConstant()) { Stamp stamp = StampTool.unsignedCompare(below.getX().stamp(), below.getY().stamp()); if (stamp != null) { @@ -543,8 +543,8 @@ } GuardNode existingGuard = null; - if (guard.condition() instanceof IntegerBelowNode) { - IntegerBelowNode below = (IntegerBelowNode) guard.condition(); + if (guard.getCondition() instanceof IntegerBelowNode) { + IntegerBelowNode below = (IntegerBelowNode) guard.getCondition(); IntegerStamp xStamp = (IntegerStamp) below.getX().stamp(); IntegerStamp yStamp = (IntegerStamp) below.getY().stamp(); GuardedStamp cstamp = state.valueConstraints.get(below.getX()); @@ -566,22 +566,22 @@ if (xStamp.isPositive() && xStamp.upperBound() < yStamp.lowerBound()) { // Proven true existingGuard = cstamp.getGuard(); - Debug.log("existing guard %s %1s proves %1s", existingGuard, existingGuard.condition(), guard.condition()); + Debug.log("existing guard %s %1s proves %1s", existingGuard, existingGuard.getCondition(), guard.getCondition()); } else if (xStamp.isStrictlyNegative() || xStamp.lowerBound() >= yStamp.upperBound()) { // An earlier guard proves that this will always fail but it's probably // not worth trying to use it. } } } - } else if (guard.condition() instanceof IntegerEqualsNode && guard.isNegated()) { - IntegerEqualsNode equals = (IntegerEqualsNode) guard.condition(); + } else if (guard.getCondition() instanceof IntegerEqualsNode && guard.isNegated()) { + IntegerEqualsNode equals = (IntegerEqualsNode) guard.getCondition(); GuardedStamp cstamp = state.valueConstraints.get(equals.getY()); if (cstamp != null && equals.getX().isConstant()) { IntegerStamp stamp = (IntegerStamp) cstamp.getStamp(); if (!stamp.contains(equals.getX().asJavaConstant().asLong())) { // x != n is true if n is outside the range of the stamp existingGuard = cstamp.getGuard(); - Debug.log("existing guard %s %1s proves !%1s", existingGuard, existingGuard.condition(), guard.condition()); + Debug.log("existing guard %s %1s proves !%1s", existingGuard, existingGuard.getCondition(), guard.getCondition()); } } } @@ -595,7 +595,7 @@ } private boolean tryReplaceWithExistingGuard(GuardNode guard) { - GuardingNode existingGuard = guard.isNegated() ? state.falseConditions.get(guard.condition()) : state.trueConditions.get(guard.condition()); + GuardingNode existingGuard = guard.isNegated() ? state.falseConditions.get(guard.getCondition()) : state.trueConditions.get(guard.getCondition()); if (existingGuard != null && existingGuard != guard) { eliminateGuard(guard, existingGuard); return true; @@ -617,7 +617,7 @@ // information Stamp result = conditional.getStamp().join(other.getStamp()); if (result == conditional.getStamp()) { - Debug.log("%1s overrides existing value %1s", guard.condition(), other.getGuard().condition()); + Debug.log("%1s overrides existing value %1s", guard.getCondition(), other.getGuard().getCondition()); state.valueConstraints.put(conditional.getValue(), conditional); } else if (result == other.getStamp()) { // existing type constraint is best @@ -879,7 +879,7 @@ // to see if they can be deleted using type constraints. for (GuardNode guard : begin.guards().snapshot()) { if (provers.contains(guard) || !(tryReplaceWithExistingGuard(guard) || testImpliedGuard(guard))) { - registerCondition(!guard.isNegated(), guard.condition(), guard); + registerCondition(!guard.isNegated(), guard.getCondition(), guard); } } assert assertImpliedGuard(provers);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,10 +26,10 @@ import java.util.List; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.debug.Debug; import com.oracle.graal.graph.Node; @@ -201,7 +201,7 @@ FixedNode next = deoptPred.next(); if (!(next instanceof DeoptimizeNode)) { - DeoptimizeNode newDeoptNode = graph.add(new DeoptimizeNode(deoptAction, deoptReason)); + DeoptimizeNode newDeoptNode = graph.add(new DeoptimizeNode(deoptAction, deoptReason, speculation)); deoptPred.setNext(newDeoptNode); assert deoptPred == newDeoptNode.predecessor(); GraphUtil.killCFG(next);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.function.BiConsumer; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DominatorConditionalEliminationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.phases.common; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.UnreachedCode; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.UnreachedCode; import java.util.ArrayDeque; import java.util.ArrayList; @@ -33,11 +33,16 @@ import java.util.List; import java.util.function.Function; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph; import com.oracle.graal.compiler.common.cfg.BlockMap; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.And; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.Or; +import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.debug.Debug; @@ -62,6 +67,9 @@ import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.UnaryOpLogicNode; import com.oracle.graal.nodes.ValueNode; +import com.oracle.graal.nodes.calc.AndNode; +import com.oracle.graal.nodes.calc.BinaryArithmeticNode; +import com.oracle.graal.nodes.calc.IntegerEqualsNode; import com.oracle.graal.nodes.cfg.Block; import com.oracle.graal.nodes.cfg.ControlFlowGraph; import com.oracle.graal.nodes.extended.GuardingNode; @@ -70,6 +78,7 @@ import com.oracle.graal.nodes.extended.ValueAnchorNode; import com.oracle.graal.nodes.java.CheckCastNode; import com.oracle.graal.nodes.java.TypeSwitchNode; +import com.oracle.graal.nodes.spi.NodeWithState; import com.oracle.graal.nodes.util.GraphUtil; import com.oracle.graal.phases.Phase; import com.oracle.graal.phases.common.LoweringPhase.Frame; @@ -165,6 +174,18 @@ instance.processBlock(startBlock); } + static class PendingTest { + private final LogicNode condition; + private final boolean negated; + private final ValueNode guard; + + public PendingTest(LogicNode condition, boolean negated, ValueNode guard) { + this.condition = condition; + this.negated = negated; + this.guard = guard; + } + } + private static class Instance { private NodeMap<Info> map; @@ -172,11 +193,17 @@ private final Function<Block, Iterable<? extends Node>> blockToNodes; private final Function<Node, Block> nodeToBlock; + /** + * Tests which may be eliminated because post dominating tests to prove a broader condition. + */ + private Deque<PendingTest> pendingTests; + public Instance(StructuredGraph graph, Function<Block, Iterable<? extends Node>> blockToNodes, Function<Node, Block> nodeToBlock) { map = graph.createNodeMap(); loopExits = new ArrayDeque<>(); this.blockToNodes = blockToNodes; this.nodeToBlock = nodeToBlock; + pendingTests = new ArrayDeque<>(); } public void processBlock(Block startBlock) { @@ -231,6 +258,9 @@ loopExits = oldLoopExits; }); } + + // For now conservatively collect guards only within the same block. + pendingTests.clear(); for (Node n : blockToNodes.apply(block)) { if (n.isAlive()) { processNode(n, undoOperations); @@ -239,6 +269,9 @@ } private void processNode(Node node, List<Runnable> undoOperations) { + if (node instanceof NodeWithState && !(node instanceof GuardingNode)) { + pendingTests.clear(); + } if (node instanceof AbstractBeginNode) { processAbstractBegin((AbstractBeginNode) node, undoOperations); } else if (node instanceof FixedGuardNode) { @@ -315,10 +348,66 @@ Stamp newStampY = binaryOpLogicNode.getSucceedingStampForY(negated); registerNewStamp(y, newStampY, guard, undoOperations); } + if (condition instanceof IntegerEqualsNode && guard instanceof FixedGuardNode && !negated) { + if (y.isConstant() && x instanceof AndNode) { + AndNode and = (AndNode) x; + if (and.getY() == y) { + /* + * This 'and' proves something about some of the bits in and.getX(). + * It's equivalent to or'ing in the mask value since those values are + * known to be set. + */ + BinaryOp<Or> op = ArithmeticOpTable.forStamp(x.stamp()).getOr(); + IntegerStamp newStampX = (IntegerStamp) op.foldStamp(and.getX().stamp(), y.stamp()); + registerNewStamp(and.getX(), newStampX, guard, undoOperations); + foldPendingTest(negated, guard, and.getX(), newStampX); + } + } + } } + pendingTests.push(new PendingTest(condition, negated, guard)); registerCondition(condition, negated, guard, undoOperations); } + private void foldPendingTest(boolean negated, ValueNode guard, ValueNode originalX, IntegerStamp newStampX) { + for (PendingTest pending : pendingTests) { + if (pending.condition instanceof BinaryOpLogicNode) { + TriState result = TriState.UNKNOWN; + BinaryOpLogicNode binaryOpLogicNode = (BinaryOpLogicNode) pending.condition; + ValueNode x = binaryOpLogicNode.getX(); + ValueNode y = binaryOpLogicNode.getY(); + if (binaryOpLogicNode.getX() == originalX) { + result = binaryOpLogicNode.tryFold(newStampX, binaryOpLogicNode.getY().stamp()); + } else if (binaryOpLogicNode instanceof IntegerEqualsNode && y.isConstant() && x instanceof AndNode) { + AndNode and2 = (AndNode) x; + if (and2.getY() == y) { + BinaryOp<And> andOp = ArithmeticOpTable.forStamp(originalX.stamp()).getAnd(); + result = binaryOpLogicNode.tryFold(andOp.foldStamp(newStampX, y.stamp()), y.stamp()); + } + } + /* + * If the failure of the pending guard would also be triggered by the failure of + * this guard, then it's safe to replace the earlier guard with this guard. + */ + if (result.isKnown()) { + if (pending.guard instanceof FixedGuardNode && guard instanceof FixedGuardNode) { + FixedGuardNode fix = (FixedGuardNode) pending.guard; + FixedGuardNode thisGuard = (FixedGuardNode) guard; + if (fix.getAction() == thisGuard.getAction() && fix.getReason() == thisGuard.getReason() && fix.getSpeculation() == thisGuard.getSpeculation()) { + if (pending.negated == negated && result.isTrue() || pending.negated && result.isFalse()) { + assert !negated; + FixedGuardNode newFix = (FixedGuardNode) thisGuard.copyWithInputs(); + guard.graph().replaceFixedWithFixed(fix, newFix); + guard.replaceAtUsages(newFix); + guard.graph().removeFixed(thisGuard); + } + } + } + } + } + } + } + private void registerCondition(LogicNode condition, boolean negated, ValueNode guard, List<Runnable> undoOperations) { registerNewStamp(condition, negated ? StampFactory.contradiction() : StampFactory.tautology(), guard, undoOperations); } @@ -416,6 +505,25 @@ return rewireGuards(infoElement.getGuard(), result.toBoolean(), rewireGuardFunction); } } + /* + * For complex expressions involving constants, see if it's possible to fold the + * tests by using stamps one level up in the expression. For instance, (x + n < y) + * might fold if something is known about x and all other values are constants. The + * reason for the constant restriction is that if more than 1 real value is involved + * the code might need to adopt multiple guards to have proper dependences. + */ + if (x instanceof BinaryArithmeticNode<?> && y.isConstant()) { + BinaryArithmeticNode<?> binary = (BinaryArithmeticNode<?>) x; + if (binary.getY().isConstant()) { + for (InfoElement infoElement : getInfoElements(binary.getX())) { + Stamp newStampX = binary.tryFoldStamp(infoElement.getStamp(), binary.getY().stamp()); + TriState result = binaryOpLogicNode.tryFold(newStampX, y.stamp()); + if (result.isKnown()) { + return rewireGuards(infoElement.getGuard(), result.toBoolean(), rewireGuardFunction); + } + } + } + } } else if (node instanceof ShortCircuitOrNode) { final ShortCircuitOrNode shortCircuitOrNode = (ShortCircuitOrNode) node; if (this.loopExits.isEmpty()) { @@ -468,11 +576,11 @@ } private void processGuard(GuardNode node, List<Runnable> undoOperations) { - if (!tryProofCondition(node.condition(), (guard, result) -> { + if (!tryProofCondition(node.getCondition(), (guard, result) -> { if (result != node.isNegated()) { node.replaceAndDelete(guard); } else { - DeoptimizeNode deopt = node.graph().add(new DeoptimizeNode(node.action(), node.reason())); + DeoptimizeNode deopt = node.graph().add(new DeoptimizeNode(node.getAction(), node.getReason(), node.getSpeculation())); AbstractBeginNode beginNode = (AbstractBeginNode) node.getAnchor(); FixedNode next = beginNode.next(); beginNode.setNext(deopt); @@ -480,7 +588,7 @@ } return true; })) { - registerNewCondition(node.condition(), node.isNegated(), node, undoOperations); + registerNewCondition(node.getCondition(), node.isNegated(), node, undoOperations); } }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.graph.Graph; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.graph.Graph.NodeEvent.NODE_ADDED; import static com.oracle.graal.graph.Graph.NodeEvent.ZERO_USAGES; -import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.LocationIdentity.any; import java.util.Collection; import java.util.EnumSet; @@ -34,7 +34,7 @@ import java.util.Map; import java.util.Set; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.cfg.Loop;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FrameStateAssignmentPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.iterators.NodePredicate;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.Map; import java.util.Map.Entry; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaConstant; import com.oracle.graal.compiler.common.cfg.Loop; import com.oracle.graal.debug.Debug; @@ -173,7 +173,7 @@ PiNode piNode = (PiNode) guard; guardNode = (GuardNode) piNode.getGuard(); } - LogicNode condition = guardNode.condition(); + LogicNode condition = guardNode.getCondition(); guardNode.replaceAndDelete(fixedAccess); if (condition.hasNoUsages()) { GraphUtil.killWithUnusedFloatingInputs(condition); @@ -184,8 +184,8 @@ private void processGuard(Node node) { GuardNode guard = (GuardNode) node; - if (guard.isNegated() && guard.condition() instanceof IsNullNode && (guard.getSpeculation() == null || guard.getSpeculation().equals(JavaConstant.NULL_POINTER))) { - ValueNode obj = ((IsNullNode) guard.condition()).getValue(); + if (guard.isNegated() && guard.getCondition() instanceof IsNullNode && (guard.getSpeculation() == null || guard.getSpeculation().equals(JavaConstant.NULL_POINTER))) { + ValueNode obj = ((IsNullNode) guard.getCondition()).getValue(); nullGuarded.put(obj, guard); } } @@ -228,7 +228,7 @@ AbstractBeginNode fastPath = graph.add(new BeginNode()); @SuppressWarnings("deprecation") int debugId = useGuardIdAsDebugId ? guard.getId() : DeoptimizeNode.DEFAULT_DEBUG_ID; - DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.action(), guard.reason(), debugId, guard.getSpeculation(), null)); + DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.getAction(), guard.getReason(), debugId, guard.getSpeculation(), null)); AbstractBeginNode deoptBranch = BeginNode.begin(deopt); AbstractBeginNode trueSuccessor; AbstractBeginNode falseSuccessor; @@ -240,7 +240,7 @@ trueSuccessor = fastPath; falseSuccessor = deoptBranch; } - IfNode ifNode = graph.add(new IfNode(guard.condition(), trueSuccessor, falseSuccessor, trueSuccessor == fastPath ? 1 : 0)); + IfNode ifNode = graph.add(new IfNode(guard.getCondition(), trueSuccessor, falseSuccessor, trueSuccessor == fastPath ? 1 : 0)); guard.replaceAndDelete(fastPath); insert(ifNode, fastPath); }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import static com.oracle.graal.graph.Graph.NodeEvent.NODE_ADDED; import static com.oracle.graal.graph.Graph.NodeEvent.ZERO_USAGES; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; import com.oracle.graal.graph.Graph.NodeEventScope; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,12 +34,12 @@ import java.util.Iterator; import java.util.List; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Graph.Mark;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -63,6 +63,9 @@ @Override protected void run(StructuredGraph graph) { + if (!graph.getGuardsStage().allowsFloatingGuards()) { + return; + } LazyCFG cfg = new LazyCFG(graph); for (AbstractBeginNode begin : graph.getNodes(AbstractBeginNode.TYPE)) { if (!(begin instanceof StartNode || begin.predecessor() instanceof ControlSplitNode)) { @@ -104,14 +107,14 @@ AbstractBeginNode successor = findMinimumUsagesSuccessor(controlSplit); int successorCount = controlSplit.successors().count(); for (GuardNode guard : successor.guards().snapshot()) { - if (guard.isDeleted() || guard.condition().getUsageCount() < successorCount) { + if (guard.isDeleted() || guard.getCondition().getUsageCount() < successorCount) { continue; } List<GuardNode> otherGuards = new ArrayList<>(successorCount - 1); HashSet<Node> successorsWithoutGuards = new HashSet<>(controlSplit.successors().count()); controlSplit.successors().snapshotTo(successorsWithoutGuards); successorsWithoutGuards.remove(guard.getAnchor()); - for (GuardNode conditonGuard : guard.condition().usages().filter(GuardNode.class)) { + for (GuardNode conditonGuard : guard.getCondition().usages().filter(GuardNode.class)) { if (conditonGuard != guard) { AnchoringNode conditionGuardAnchor = conditonGuard.getAnchor(); if (conditionGuardAnchor.asNode().predecessor() == controlSplit && compatibleGuards(guard, conditonGuard)) { @@ -124,7 +127,7 @@ if (successorsWithoutGuards.isEmpty()) { assert otherGuards.size() >= successorCount - 1; AbstractBeginNode anchor = computeOptimalAnchor(cfg.get(), AbstractBeginNode.prevBegin(controlSplit)); - GuardNode newGuard = controlSplit.graph().unique(new GuardNode(guard.condition(), anchor, guard.reason(), guard.action(), guard.isNegated(), guard.getSpeculation())); + GuardNode newGuard = controlSplit.graph().unique(new GuardNode(guard.getCondition(), anchor, guard.getReason(), guard.getAction(), guard.isNegated(), guard.getSpeculation())); for (GuardNode otherGuard : otherGuards) { otherGuard.replaceAndDelete(newGuard); } @@ -136,7 +139,7 @@ } private static boolean compatibleGuards(GuardNode guard, GuardNode conditonGuard) { - return conditonGuard.isNegated() == guard.isNegated() && conditonGuard.action() == guard.action() && conditonGuard.reason() == guard.reason() && + return conditonGuard.isNegated() == guard.isNegated() && conditonGuard.getAction() == guard.getAction() && conditonGuard.getReason() == guard.getReason() && conditonGuard.getSpeculation().equals(guard.getSpeculation()); }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.List; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugMetric;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.Map; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.nodes.Invoke; import com.oracle.graal.nodes.StructuredGraph;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,23 +24,23 @@ import static com.oracle.graal.compiler.common.GraalOptions.HotSpotPrintInlining; import static com.oracle.graal.compiler.common.GraalOptions.UseGraalInstrumentation; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.NullCheckException; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.NullCheckException; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.MethodSubstitution; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.Invoke;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AssumptionInlineInfo.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AssumptionInlineInfo.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.Collection; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.CallTargetNode.InvokeKind;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/ExactInlineInfo.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/ExactInlineInfo.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Collection; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.Invoke;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Collection; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.Invoke;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,12 +30,12 @@ import java.util.List; import java.util.Set; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaTypeProfile.ProfiledType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaTypeProfile.ProfiledType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,10 +24,10 @@ import java.util.Collection; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/Inlineable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/Inlineable.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common.inlining.info.elem; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.Invoke; import com.oracle.graal.phases.common.CanonicalizerPhase;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,8 +29,8 @@ import java.util.ArrayList; import java.util.List; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.debug.Debug; @@ -196,13 +196,6 @@ private static StructuredGraph parseBytecodes(ResolvedJavaMethod method, HighTierContext context, CanonicalizerPhase canonicalizer, StructuredGraph caller) { StructuredGraph newGraph = new StructuredGraph(method, AllowAssumptions.from(caller.getAssumptions() != null)); try (Debug.Scope s = Debug.scope("InlineGraph", newGraph)) { - if (!caller.isInlinedMethodRecordingEnabled()) { - // Don't record inlined methods in the callee if - // the caller doesn't want them. This decision is - // preserved in the graph cache (if used) which is - // ok since the graph cache is compilation local. - newGraph.disableInlinedMethodRecording(); - } if (!caller.isUnsafeAccessTrackingEnabled()) { newGraph.disableUnsafeAccessTracking(); }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/AbstractInliningPolicy.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/AbstractInliningPolicy.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,8 +26,8 @@ import java.util.Map; -import jdk.internal.jvmci.meta.ProfilingInfo; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ProfilingInfo; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.Invoke; import com.oracle.graal.nodes.StructuredGraph;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/InlineEverythingPolicy.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/InlineEverythingPolicy.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,7 +23,7 @@ package com.oracle.graal.phases.common.inlining.policy; import static com.oracle.graal.compiler.common.GraalOptions.MaximumDesiredSize; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.nodes.spi.Replacements;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/InlineMethodSubstitutionsPolicy.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/policy/InlineMethodSubstitutionsPolicy.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common.inlining.policy; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.CallTargetNode; import com.oracle.graal.nodes.java.MethodCallTargetNode;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.common.inlining.walker; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.StructuredGraph;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolderExplorable.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/CallsiteHolderExplorable.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.Set; import java.util.function.ToDoubleFunction; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.FixedNode;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,12 +34,12 @@ import java.util.Iterator; import java.util.Set; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/MethodInvocation.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/MethodInvocation.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.BitSet; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.nodes.CallTargetNode; import com.oracle.graal.nodes.java.MethodCallTargetNode;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/ExtractInstrumentationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/ExtractInstrumentationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -37,6 +37,7 @@ import com.oracle.graal.nodes.FixedNode; import com.oracle.graal.nodes.FixedWithNextNode; import com.oracle.graal.nodes.FrameState; +import com.oracle.graal.nodes.Invoke; import com.oracle.graal.nodes.LoopEndNode; import com.oracle.graal.nodes.ParameterNode; import com.oracle.graal.nodes.ReturnNode; @@ -55,7 +56,7 @@ import com.oracle.graal.phases.common.instrumentation.nodes.MonitorProxyNode; import com.oracle.graal.phases.tiers.HighTierContext; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; public class ExtractInstrumentationPhase extends BasePhase<HighTierContext> { @@ -63,11 +64,11 @@ protected void run(StructuredGraph graph, HighTierContext context) { for (InstrumentationBeginNode begin : graph.getNodes().filter(InstrumentationBeginNode.class)) { Instrumentation instrumentation = new Instrumentation(begin); - InstrumentationNode instrumentationNode = instrumentation.createInstrumentationNode(); - - graph.addBeforeFixed(begin, instrumentationNode); - Debug.dump(instrumentationNode.instrumentationGraph(), "After extracted instrumentation at " + instrumentation); - + if (!instrumentation.inspectingIntrinsic()) { + InstrumentationNode instrumentationNode = instrumentation.createInstrumentationNode(); + graph.addBeforeFixed(begin, instrumentationNode); + Debug.dump(instrumentationNode.instrumentationGraph(), "After extracted instrumentation at " + instrumentation); + } instrumentation.unlink(); } @@ -175,6 +176,10 @@ } } + public boolean inspectingIntrinsic() { + return begin.inspectInvocation() && !(target instanceof Invoke); + } + public InstrumentationNode createInstrumentationNode() { ValueNode newTarget = target; // MonitorEnterNode may be deleted during PEA
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/InstrumentationBeginNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/InstrumentationBeginNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,8 +29,8 @@ import com.oracle.graal.nodes.FixedWithNextNode; import com.oracle.graal.nodes.ValueNode; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; @NodeInfo public final class InstrumentationBeginNode extends FixedWithNextNode { @@ -38,21 +38,25 @@ public static final NodeClass<InstrumentationBeginNode> TYPE = NodeClass.create(InstrumentationBeginNode.class); private final int offset; + private final boolean inspectInvocation; - public InstrumentationBeginNode(ValueNode offset) { + public InstrumentationBeginNode(ValueNode offset, boolean inspectInvocation) { super(TYPE, StampFactory.forVoid()); if (!(offset instanceof ConstantNode)) { throw JVMCIError.shouldNotReachHere("should pass constant integer to instrumentationBegin(int)"); } - - ConstantNode constantNode = (ConstantNode) offset; - JavaConstant constant = (JavaConstant) constantNode.asConstant(); - this.offset = constant.asInt(); + JavaConstant constant = ((ConstantNode) offset).asJavaConstant(); + this.offset = constant == null ? 0 : constant.asInt(); + this.inspectInvocation = inspectInvocation; } public int getOffset() { return offset; } + public boolean inspectInvocation() { + return inspectInvocation; + } + }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/InstrumentationNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/InstrumentationNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -55,8 +55,8 @@ import com.oracle.graal.nodes.virtual.EscapeObjectState; import com.oracle.graal.nodes.virtual.VirtualObjectNode; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; @NodeInfo public class InstrumentationNode extends DeoptimizingFixedWithNextNode implements Virtualizable { @@ -102,13 +102,16 @@ public void virtualize(VirtualizerTool tool) { // InstrumentationNode allows non-materialized inputs. During the inlining of the // InstrumentationNode, non-materialized inputs will be replaced by null. - if (target != null) { + if (!(target == null || (target instanceof VirtualObjectNode))) { ValueNode alias = tool.getAlias(target); if (alias instanceof VirtualObjectNode) { tool.replaceFirstInput(target, alias); } } for (ValueNode input : weakDependencies) { + if (input instanceof VirtualObjectNode) { + continue; + } ValueNode alias = tool.getAlias(input); if (alias instanceof VirtualObjectNode) { tool.replaceFirstInput(input, alias);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/IsMethodInlinedNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/IsMethodInlinedNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.FixedNode; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; @NodeInfo public final class IsMethodInlinedNode extends InstrumentationContentNode {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/RootNameNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/RootNameNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,8 +30,8 @@ import com.oracle.graal.nodes.spi.Lowerable; import com.oracle.graal.nodes.spi.LoweringTool; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ResolvedJavaMethod; @NodeInfo public final class RootNameNode extends InstrumentationContentNode implements Lowerable {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/RuntimePathNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/instrumentation/nodes/RuntimePathNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,7 +34,7 @@ import com.oracle.graal.nodes.LoopEndNode; import com.oracle.graal.nodes.ValuePhiNode; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; @NodeInfo public final class RuntimePathNode extends InstrumentationContentNode {
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/BasePhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/BasePhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -142,9 +142,9 @@ if (dumpGraph && Debug.isDumpEnabled(BEFORE_PHASE_DUMP_LEVEL)) { Debug.dump(BEFORE_PHASE_DUMP_LEVEL, graph, "Before phase %s", getName()); } + inputNodesCount.add(graph.getNodeCount()); this.run(graph, context); executionCount.increment(); - inputNodesCount.add(graph.getNodeCount()); if (dumpGraph && Debug.isDumpEnabled(PHASE_DUMP_LEVEL)) { Debug.dump(PHASE_DUMP_LEVEL, graph, "%s", getName()); }
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,8 +25,8 @@ import java.util.EnumSet; import java.util.Set; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.ProfilingInfo; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.ProfilingInfo; import com.oracle.graal.compiler.common.GraalOptions; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/MemoryScheduleVerification.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/MemoryScheduleVerification.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.List; import java.util.Set; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.cfg.BlockMap;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,7 +31,7 @@ import java.util.Formatter; import java.util.List; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.SuppressFBWarnings; import com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph; @@ -158,7 +158,7 @@ this.nodeToBlockMap = graph.createNodeMap(); this.blockToNodesMap = new BlockMap<>(cfg); NodeBitMap visited = graph.createNodeBitMap(); - scheduleEarliestIterative(blockToNodesMap, nodeToBlockMap, visited, graph); + scheduleEarliestIterative(blockToNodesMap, nodeToBlockMap, visited, graph, null); return; } else { boolean isOutOfLoops = selectedStrategy == SchedulingStrategy.LATEST_OUT_OF_LOOPS; @@ -166,19 +166,20 @@ NodeMap<Block> currentNodeMap = graph.createNodeMap(); BlockMap<List<Node>> earliestBlockToNodesMap = new BlockMap<>(cfg); NodeBitMap visited = graph.createNodeBitMap(); + NodeBitMap unreachableNodes = immutableGraph ? graph.createNodeBitMap() : null; // Assign early so we are getting a context in case of an exception. this.blockToNodesMap = earliestBlockToNodesMap; this.nodeToBlockMap = currentNodeMap; - scheduleEarliestIterative(earliestBlockToNodesMap, currentNodeMap, visited, graph); + scheduleEarliestIterative(earliestBlockToNodesMap, currentNodeMap, visited, graph, unreachableNodes); BlockMap<List<Node>> latestBlockToNodesMap = new BlockMap<>(cfg); for (Block b : cfg.getBlocks()) { latestBlockToNodesMap.put(b, new ArrayList<Node>()); } - BlockMap<ArrayList<FloatingReadNode>> watchListMap = calcLatestBlocks(isOutOfLoops, currentNodeMap, earliestBlockToNodesMap, visited, latestBlockToNodesMap); + BlockMap<ArrayList<FloatingReadNode>> watchListMap = calcLatestBlocks(isOutOfLoops, currentNodeMap, earliestBlockToNodesMap, visited, latestBlockToNodesMap, unreachableNodes); sortNodesLatestWithinBlock(cfg, earliestBlockToNodesMap, latestBlockToNodesMap, currentNodeMap, watchListMap, visited); assert verifySchedule(cfg, latestBlockToNodesMap, currentNodeMap); @@ -195,7 +196,7 @@ @SuppressFBWarnings(value = "RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE", justification = "false positive found by findbugs") private BlockMap<ArrayList<FloatingReadNode>> calcLatestBlocks(boolean isOutOfLoops, NodeMap<Block> currentNodeMap, BlockMap<List<Node>> earliestBlockToNodesMap, NodeBitMap visited, - BlockMap<List<Node>> latestBlockToNodesMap) { + BlockMap<List<Node>> latestBlockToNodesMap, NodeBitMap unreachableNodes) { BlockMap<ArrayList<FloatingReadNode>> watchListMap = null; for (Block b : cfg.postOrder()) { List<Node> blockToNodes = earliestBlockToNodesMap.get(b); @@ -212,7 +213,7 @@ Block currentBlock = b; assert currentBlock != null; - Block latestBlock = calcLatestBlock(b, isOutOfLoops, currentNode, currentNodeMap); + Block latestBlock = calcLatestBlock(b, isOutOfLoops, currentNode, currentNodeMap, unreachableNodes); assert checkLatestEarliestRelation(currentNode, currentBlock, latestBlock); if (latestBlock != currentBlock) { if (currentNode instanceof FloatingReadNode) { @@ -480,10 +481,19 @@ } - private static Block calcLatestBlock(Block earliestBlock, boolean scheduleOutOfLoops, Node currentNode, NodeMap<Block> currentNodeMap) { + private Block calcLatestBlock(Block earliestBlock, boolean scheduleOutOfLoops, Node currentNode, NodeMap<Block> currentNodeMap, NodeBitMap unreachableNodes) { Block block = null; assert currentNode.hasUsages(); for (Node usage : currentNode.usages()) { + if (unreachableNodes != null && unreachableNodes.contains(usage)) { + /* + * Normally, dead nodes are deleted by the scheduler before we reach this point. + * Only when the scheduler is asked to not modify a graph, we can see dead nodes + * here. + */ + assert immutableGraph; + continue; + } block = calcBlockForUsage(currentNode, usage, block, currentNodeMap); assert checkLatestEarliestRelation(currentNode, earliestBlock, block); if (scheduleOutOfLoops) { @@ -525,7 +535,7 @@ return currentBlock; } - private void scheduleEarliestIterative(BlockMap<List<Node>> blockToNodes, NodeMap<Block> nodeToBlock, NodeBitMap visited, StructuredGraph graph) { + private void scheduleEarliestIterative(BlockMap<List<Node>> blockToNodes, NodeMap<Block> nodeToBlock, NodeBitMap visited, StructuredGraph graph, NodeBitMap unreachableNodes) { BitSet floatingReads = new BitSet(cfg.getBlocks().size()); @@ -593,11 +603,16 @@ } while (unmarkedPhi && changed); // Check for dead nodes. - if (!immutableGraph && visited.getCounter() < graph.getNodeCount()) { + if (visited.getCounter() < graph.getNodeCount()) { for (Node n : graph.getNodes()) { if (!visited.isMarked(n)) { - n.clearInputs(); - n.markDeleted(); + if (!immutableGraph) { + n.clearInputs(); + n.markDeleted(); + } else if (unreachableNodes != null) { + /* We are not allowed to modify the graph, so remember that node is dead. */ + unreachableNodes.mark(n); + } } } }
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/LowTierContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/LowTierContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.tiers; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.phases.util.Providers;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/MidTierContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/MidTierContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.phases.tiers; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.ProfilingInfo; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.ProfilingInfo; import com.oracle.graal.phases.OptimisticOptimizations; import com.oracle.graal.phases.util.Providers;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/PhaseContext.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/PhaseContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.phases.tiers; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.nodes.spi.LoweringProvider; import com.oracle.graal.nodes.spi.Replacements;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/TargetProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/tiers/TargetProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.tiers; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; public interface TargetProvider {
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/GraphOrder.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.cfg.Loop; import com.oracle.graal.graph.GraalGraphJVMCIError;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/MethodDebugValueName.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/MethodDebugValueName.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.phases.util; -import jdk.internal.jvmci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaMethod; import com.oracle.graal.phases.LazyName;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/Providers.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/util/Providers.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.phases.util; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.spi.CodeGenProviders; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyCallerSensitiveMethods.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyCallerSensitiveMethods.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.phases.verify; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import sun.reflect.CallerSensitive; import sun.reflect.Reflection;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyDebugUsage.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyDebugUsage.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.phases.verify; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.debug.Debug; import com.oracle.graal.nodes.CallTargetNode;
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyUsageWithEquals.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/verify/VerifyUsageWithEquals.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.phases.verify; -import jdk.internal.jvmci.meta.JavaKind; -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 jdk.internal.jvmci.meta.TrustedInterface; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; +import jdk.vm.ci.meta.TrustedInterface; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.nodes.ParameterNode;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java Fri Oct 30 20:56:28 2015 +0100 @@ -37,10 +37,10 @@ import java.util.Map; import java.util.Map.Entry; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Signature; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.compiler.common.cfg.BlockMap; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,12 +27,12 @@ import java.util.Map; import java.util.TreeMap; -import jdk.internal.jvmci.code.DebugInfo; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaUtil; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.DebugInfo; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaUtil; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,13 +34,13 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.service.Services; import com.oracle.graal.code.DisassemblerProvider; import com.oracle.graal.compiler.common.GraalOptions;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CompilationPrinter.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CompilationPrinter.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,15 +31,15 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.code.ReferenceMap; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.code.RegisterSaveLayout; -import jdk.internal.jvmci.code.VirtualObject; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.JavaValue; -import jdk.internal.jvmci.meta.MetaUtil; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.code.ReferenceMap; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.code.RegisterSaveLayout; +import jdk.vm.ci.code.VirtualObject; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaValue; +import jdk.vm.ci.meta.MetaUtil; import com.oracle.graal.debug.LogStream; import com.oracle.graal.debug.TTY;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraalDebugConfigCustomizer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraalDebugConfigCustomizer.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import static com.oracle.graal.compiler.common.GraalOptions.PrintBackendCFG; import static com.oracle.graal.compiler.common.GraalOptions.PrintBinaryGraphs; import static com.oracle.graal.compiler.common.GraalOptions.PrintCFG; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.DebugConfig;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinter.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinter.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.io.Closeable; import java.io.IOException; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Graph; import com.oracle.graal.phases.schedule.SchedulePhase;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/GraphPrinterDumpHandler.java Fri Oct 30 20:56:28 2015 +0100 @@ -48,8 +48,8 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/IdealGraphPrinter.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/IdealGraphPrinter.java Fri Oct 30 20:56:28 2015 +0100 @@ -32,7 +32,7 @@ import java.util.Map.Entry; import java.util.Set; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Graph; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/NoDeadCodeVerifyHandler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/NoDeadCodeVerifyHandler.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,10 +26,10 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.debug.DebugVerifyHandler; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import static com.oracle.graal.nodes.extended.BranchProbabilityNode.SLOW_PATH_PROBABILITY; import static com.oracle.graal.nodes.extended.BranchProbabilityNode.probability; import static com.oracle.graal.replacements.SnippetTemplate.DEFAULT_REPLACER; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountLeadingZerosNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountLeadingZerosNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,28 +22,29 @@ */ package com.oracle.graal.replacements.amd64; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; +import com.oracle.graal.lir.amd64.AMD64ArithmeticLIRGeneratorTool; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.UnaryNode; -import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * Count the number of leading zeros using the {@code lzcntq} or {@code lzcntl} instructions. */ @NodeInfo -public final class AMD64CountLeadingZerosNode extends UnaryNode implements LIRLowerable { +public final class AMD64CountLeadingZerosNode extends UnaryNode implements ArithmeticLIRLowerable { public static final NodeClass<AMD64CountLeadingZerosNode> TYPE = NodeClass.create(AMD64CountLeadingZerosNode.class); public AMD64CountLeadingZerosNode(ValueNode value) { @@ -83,8 +84,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value result = gen.getLIRGeneratorTool().emitCountLeadingZeros(gen.operand(getValue())); - gen.setResult(this, result); + public void generate(NodeLIRBuilderTool builder, ArithmeticLIRGeneratorTool gen) { + builder.setResult(this, ((AMD64ArithmeticLIRGeneratorTool) gen).emitCountLeadingZeros(builder.operand(getValue()))); } }
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountTrailingZerosNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountTrailingZerosNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,28 +22,29 @@ */ package com.oracle.graal.replacements.amd64; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; +import com.oracle.graal.lir.amd64.AMD64ArithmeticLIRGeneratorTool; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.UnaryNode; -import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * Count the number of trailing zeros using the {@code tzcntq} or {@code tzcntl} instructions. */ @NodeInfo -public final class AMD64CountTrailingZerosNode extends UnaryNode implements LIRLowerable { +public final class AMD64CountTrailingZerosNode extends UnaryNode implements ArithmeticLIRLowerable { public static final NodeClass<AMD64CountTrailingZerosNode> TYPE = NodeClass.create(AMD64CountTrailingZerosNode.class); public AMD64CountTrailingZerosNode(ValueNode value) { @@ -79,8 +80,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value result = gen.getLIRGeneratorTool().emitCountTrailingZeros(gen.operand(getValue())); - gen.setResult(this, result); + public void generate(NodeLIRBuilderTool builder, ArithmeticLIRGeneratorTool gen) { + builder.setResult(this, ((AMD64ArithmeticLIRGeneratorTool) gen).emitCountTrailingZeros(builder.operand(getValue()))); } }
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,13 +26,13 @@ import com.oracle.graal.compiler.common.type.ArithmeticOpTable.FloatConvertOp; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.FloatConvertNode; import com.oracle.graal.nodes.calc.UnaryArithmeticNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** * This node has the semantics of the AMD64 floating point conversions. It is used in the lowering @@ -56,7 +56,8 @@ return this; } - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + @Override + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { nodeValueMap.setResult(this, gen.emitFloatConvert(op, nodeValueMap.operand(getValue()))); } }
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64GraphBuilderPlugins.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64GraphBuilderPlugins.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,10 +25,10 @@ import static com.oracle.graal.compiler.target.Backend.ARITHMETIC_EXP; import static com.oracle.graal.replacements.amd64.AMD64MathIntrinsicNode.Operation.LOG; import static com.oracle.graal.replacements.amd64.AMD64MathIntrinsicNode.Operation.LOG10; -import jdk.internal.jvmci.amd64.AMD64; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; import sun.misc.Unsafe; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64MathIntrinsicNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64MathIntrinsicNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,23 +22,23 @@ */ package com.oracle.graal.replacements.amd64; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.FloatStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.amd64.AMD64ArithmeticLIRGenerator; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.amd64.AMD64ArithmeticLIRGeneratorTool; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.UnaryNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo public final class AMD64MathIntrinsicNode extends UnaryNode implements ArithmeticLIRLowerable { @@ -81,8 +81,8 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator lirGen) { - AMD64ArithmeticLIRGenerator gen = (AMD64ArithmeticLIRGenerator) lirGen; + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool lirGen) { + AMD64ArithmeticLIRGeneratorTool gen = (AMD64ArithmeticLIRGeneratorTool) lirGen; Value input = nodeValueMap.operand(getValue()); Value result; switch (operation()) {
--- a/graal/com.oracle.graal.replacements.sparc/src/com/oracle/graal/replacements/sparc/SPARCGraphBuilderPlugins.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.sparc/src/com/oracle/graal/replacements/sparc/SPARCGraphBuilderPlugins.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,8 +29,8 @@ import static com.oracle.graal.compiler.target.Backend.ARITHMETIC_POW; import static com.oracle.graal.compiler.target.Backend.ARITHMETIC_SIN; import static com.oracle.graal.compiler.target.Backend.ARITHMETIC_TAN; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider; import com.oracle.graal.graphbuilderconf.ForeignCallPlugin;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/BitOpNodesTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/BitOpNodesTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CheckCastTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CheckCastTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.JavaTypeProfile; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CompiledExceptionHandlerTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CompiledExceptionHandlerTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/DeoptimizeOnExceptionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/DeoptimizeOnExceptionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Random; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/DerivedOopTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/DerivedOopTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Objects; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/DynamicNewArrayTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/DynamicNewArrayTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.lang.reflect.Array; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,10 +28,10 @@ import java.util.Map; import java.util.TreeMap; -import jdk.internal.jvmci.code.CompilationResult.Call; -import jdk.internal.jvmci.code.CompilationResult.Mark; -import jdk.internal.jvmci.code.CompilationResult.Site; -import jdk.internal.jvmci.meta.JavaTypeProfile; +import jdk.vm.ci.code.CompilationResult.Call; +import jdk.vm.ci.code.CompilationResult.Mark; +import jdk.vm.ci.code.CompilationResult.Site; +import jdk.vm.ci.meta.JavaTypeProfile; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/MethodSubstitutionTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/MethodSubstitutionTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.lang.reflect.InvocationTargetException; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.api.replacements.MethodSubstitution; import com.oracle.graal.compiler.test.GraalCompilerTest;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewMultiArrayTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewMultiArrayTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,9 +26,9 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PEGraphDecoderTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PEGraphDecoderTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTrackingTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTrackingTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ReplacementsParseTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ReplacementsParseTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2015, 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 @@ -24,13 +24,13 @@ import java.util.function.Function; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test; import com.oracle.graal.api.replacements.ClassSubstitution; import com.oracle.graal.api.replacements.MethodSubstitution; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.compiler.test.GraalCompilerTest; import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/StandardMethodSubstitutionsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/StandardMethodSubstitutionsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.util.HashMap; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/StringSubstitutionsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/StringSubstitutionsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/SubstitutionsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/SubstitutionsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import static com.oracle.graal.nodeinfo.InputType.Guard; import static com.oracle.graal.nodeinfo.InputType.Memory; import static org.hamcrest.CoreMatchers.instanceOf; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/TypeCheckTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/TypeCheckTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.JavaTypeProfile.ProfiledType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.JavaTypeProfile.ProfiledType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.TriState; import com.oracle.graal.compiler.test.GraalCompilerTest; import com.oracle.graal.nodes.StructuredGraph;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/UnsafeSubstitutionsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/UnsafeSubstitutionsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Assert; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/WordTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/WordTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.test; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/NodeIntrinsicVerifier.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/NodeIntrinsicVerifier.java Fri Oct 30 20:56:28 2015 +0100 @@ -66,7 +66,7 @@ } private TypeMirror resolvedJavaTypeType() { - return env.getElementUtils().getTypeElement("jdk.internal.jvmci.meta.ResolvedJavaType").asType(); + return env.getElementUtils().getTypeElement("jdk.vm.ci.meta.ResolvedJavaType").asType(); } private TypeMirror structuralInputType() {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ArraySubstitutions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; import com.oracle.graal.nodes.DeoptimizeNode; import com.oracle.graal.nodes.java.ArrayLengthNode;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,11 +28,11 @@ import java.util.EnumMap; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CachingPEGraphDecoder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CachingPEGraphDecoder.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,8 +27,8 @@ import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.debug.Debug; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ConstantBindingParameterPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ConstantBindingParameterPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,28 +24,28 @@ import static com.oracle.graal.nodes.NamedLocationIdentity.ARRAY_LENGTH_LOCATION; import static com.oracle.graal.nodes.java.ArrayLengthNode.readArrayLength; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_POST_VOLATILE_READ; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_POST_VOLATILE_WRITE; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_PRE_VOLATILE_READ; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_PRE_VOLATILE_WRITE; -import static jdk.internal.jvmci.meta.DeoptimizationAction.InvalidateReprofile; -import static jdk.internal.jvmci.meta.DeoptimizationReason.BoundsCheckException; +import static jdk.vm.ci.code.MemoryBarriers.JMM_POST_VOLATILE_READ; +import static jdk.vm.ci.code.MemoryBarriers.JMM_POST_VOLATILE_WRITE; +import static jdk.vm.ci.code.MemoryBarriers.JMM_PRE_VOLATILE_READ; +import static jdk.vm.ci.code.MemoryBarriers.JMM_PRE_VOLATILE_WRITE; +import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; +import static jdk.vm.ci.meta.DeoptimizationReason.BoundsCheckException; import java.util.ArrayList; import java.util.BitSet; import java.util.List; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -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 jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.type.IntegerStamp;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,13 +29,13 @@ import java.util.ArrayList; import java.util.List; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -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 jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.graph.Graph; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InlineDuringParsingPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InlineDuringParsingPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import static com.oracle.graal.compiler.common.GraalOptions.TrivialInliningSize; import static com.oracle.graal.java.BytecodeParserOptions.InlineDuringParsingMaxDepth; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graphbuilderconf.GraphBuilderContext; import com.oracle.graal.graphbuilderconf.InlineInvokePlugin;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; -import jdk.internal.jvmci.code.TargetDescription; +import jdk.vm.ci.code.TargetDescription; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.calc.Condition;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/IntrinsicGraphBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/IntrinsicGraphBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,16 +22,16 @@ */ package com.oracle.graal.replacements; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -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 jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/Log.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/Log.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.io.PrintStream; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.spi.ForeignCallDescriptor; import com.oracle.graal.graph.Node.ConstantNodeParameter;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MethodHandlePlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/MethodHandlePlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.replacements; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MethodHandleAccessProvider; -import jdk.internal.jvmci.meta.MethodHandleAccessProvider.IntrinsicMethod; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MethodHandleAccessProvider; +import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.NodeInputList; import com.oracle.graal.graphbuilderconf.GraphBuilderContext;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,23 +22,23 @@ */ package com.oracle.graal.replacements; -import static jdk.internal.jvmci.meta.MetaUtil.resolveJavaTypes; +import static jdk.vm.ci.meta.MetaUtil.resolveJavaTypes; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.PrimitiveConstant; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.PrimitiveConstant; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.api.replacements.SnippetReflectionProvider;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,19 +23,19 @@ package com.oracle.graal.replacements; import static com.oracle.graal.replacements.NodeIntrinsificationPhase.COULD_NOT_FOLD; -import static jdk.internal.jvmci.meta.MetaUtil.resolveJavaTypes; +import static jdk.vm.ci.meta.MetaUtil.resolveJavaTypes; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -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 jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.api.replacements.Fold; import com.oracle.graal.compiler.common.type.ObjectStamp;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/PEGraphDecoder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/PEGraphDecoder.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,25 +25,25 @@ import static com.oracle.graal.java.BytecodeParserOptions.DumpDuringGraphBuilding; import static com.oracle.graal.java.BytecodeParserOptions.FailedLoopExplosionIsFatal; import static com.oracle.graal.java.BytecodeParserOptions.MaximumLoopExplosionCount; -import static jdk.internal.jvmci.common.JVMCIError.unimplemented; +import static jdk.vm.ci.common.JVMCIError.unimplemented; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.BytecodePosition; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.BytecodePosition; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,7 +29,7 @@ import static com.oracle.graal.java.BytecodeParserOptions.InlineIntrinsicsDuringParsing; import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.Required; import static java.lang.String.format; -import static jdk.internal.jvmci.meta.MetaUtil.toInternalName; +import static jdk.vm.ci.meta.MetaUtil.toInternalName; import java.lang.reflect.Array; import java.lang.reflect.Constructor; @@ -46,17 +46,17 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicReference; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -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 jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.OptionValue.OverrideScope; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.OptionValue.OverrideScope; import sun.misc.Launcher; import com.oracle.graal.api.replacements.ClassSubstitution; @@ -598,8 +598,6 @@ // to be valid for the entire run of the VM. final StructuredGraph graph = new StructuredGraph(methodToParse, AllowAssumptions.NO); - // They will also never evolve or have breakpoints set in them - graph.disableInlinedMethodRecording(); // They are not user code so they do not participate in unsafe access tracking graph.disableUnsafeAccessTracking();
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetCounterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetCounterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,9 +28,9 @@ import java.lang.reflect.Field; import java.util.Arrays; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LocationIdentity; import sun.misc.Unsafe; import com.oracle.graal.api.replacements.Fold;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import static com.oracle.graal.phases.common.DeadCodeEliminationPhase.Optionality.Required; import static com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates.UseSnippetTemplateCache; import static java.util.FormattableFlags.ALTERNATE; -import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.LocationIdentity.any; import java.lang.reflect.Array; import java.lang.reflect.Method; @@ -46,17 +46,17 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -import jdk.internal.jvmci.code.TargetDescription; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Local; -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 jdk.vm.ci.code.TargetDescription; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Local; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.type.Stamp; @@ -655,9 +655,6 @@ final StructuredGraph snippetCopy = new StructuredGraph(snippetGraph.name, snippetGraph.method(), AllowAssumptions.NO); try (Debug.Scope scope = Debug.scope("SpecializeSnippet", snippetCopy)) { - if (!snippetGraph.isInlinedMethodRecordingEnabled()) { - snippetCopy.disableInlinedMethodRecording(); - } if (!snippetGraph.isUnsafeAccessTrackingEnabled()) { snippetCopy.disableUnsafeAccessTracking(); }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/StandardGraphBuilderPlugins.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,10 +23,10 @@ package com.oracle.graal.replacements; import static com.oracle.graal.compiler.common.GraalOptions.UseGraalInstrumentation; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_POST_VOLATILE_READ; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_POST_VOLATILE_WRITE; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_PRE_VOLATILE_READ; -import static jdk.internal.jvmci.code.MemoryBarriers.JMM_PRE_VOLATILE_WRITE; +import static jdk.vm.ci.code.MemoryBarriers.JMM_POST_VOLATILE_READ; +import static jdk.vm.ci.code.MemoryBarriers.JMM_POST_VOLATILE_WRITE; +import static jdk.vm.ci.code.MemoryBarriers.JMM_PRE_VOLATILE_READ; +import static jdk.vm.ci.code.MemoryBarriers.JMM_PRE_VOLATILE_WRITE; import java.lang.reflect.Array; import java.lang.reflect.Field; @@ -99,17 +99,17 @@ import com.oracle.graal.replacements.nodes.arithmetic.IntegerMulExactNode; import com.oracle.graal.replacements.nodes.arithmetic.IntegerSubExactNode; -import jdk.internal.jvmci.common.JVMCIError; -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.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionValue; import sun.misc.Unsafe; /** @@ -719,7 +719,13 @@ if (UseGraalInstrumentation.getValue()) { r.register1("instrumentationBegin", int.class, new InvocationPlugin() { public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode offset) { - b.add(new InstrumentationBeginNode(offset)); + b.add(new InstrumentationBeginNode(offset, false)); + return true; + } + }); + r.register1("instrumentationToInvokeBegin", int.class, new InvocationPlugin() { + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode offset) { + b.add(new InstrumentationBeginNode(offset, true)); return true; } });
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/WordOperationPlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/WordOperationPlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,17 +24,17 @@ import static com.oracle.graal.nodes.ConstantNode.forInt; import static com.oracle.graal.nodes.ConstantNode.forIntegerKind; -import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.LocationIdentity.any; import java.lang.reflect.Constructor; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaTypeProfile; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaTypeProfile; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.calc.Condition;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/AssertionNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/AssertionNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicArrayCopyNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicArrayCopyNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.replacements.nodes; -import static jdk.internal.jvmci.meta.LocationIdentity.any; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import static jdk.vm.ci.meta.LocationIdentity.any; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,13 +24,13 @@ import java.util.Collections; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,25 +22,25 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.UnaryNode; -import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo -public final class BitCountNode extends UnaryNode implements LIRLowerable { +public final class BitCountNode extends UnaryNode implements ArithmeticLIRLowerable { public static final NodeClass<BitCountNode> TYPE = NodeClass.create(BitCountNode.class); @@ -67,8 +67,7 @@ } @Override - public void generate(NodeLIRBuilderTool gen) { - Value result = gen.getLIRGeneratorTool().emitBitCount(gen.operand(getValue())); - gen.setResult(this, result); + public void generate(NodeLIRBuilderTool builder, ArithmeticLIRGeneratorTool gen) { + builder.setResult(this, gen.emitBitCount(builder.operand(getValue()))); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,21 +22,21 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.UnaryNode; -import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** @@ -44,7 +44,7 @@ * input is zero. */ @NodeInfo -public final class BitScanForwardNode extends UnaryNode implements LIRLowerable { +public final class BitScanForwardNode extends UnaryNode implements ArithmeticLIRLowerable { public static final NodeClass<BitScanForwardNode> TYPE = NodeClass.create(BitScanForwardNode.class); @@ -125,8 +125,7 @@ public static native int unsafeScan(int v); @Override - public void generate(NodeLIRBuilderTool gen) { - Value result = gen.getLIRGeneratorTool().emitBitScanForward(gen.operand(getValue())); - gen.setResult(this, result); + public void generate(NodeLIRBuilderTool builder, ArithmeticLIRGeneratorTool gen) { + builder.setResult(this, gen.emitBitScanForward(builder.operand(getValue()))); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,21 +22,21 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.PrimitiveStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.UnaryNode; -import com.oracle.graal.nodes.spi.LIRLowerable; +import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; /** @@ -44,7 +44,7 @@ * input is zero. */ @NodeInfo -public final class BitScanReverseNode extends UnaryNode implements LIRLowerable { +public final class BitScanReverseNode extends UnaryNode implements ArithmeticLIRLowerable { public static final NodeClass<BitScanReverseNode> TYPE = NodeClass.create(BitScanReverseNode.class); @@ -121,9 +121,8 @@ public static native int unsafeScan(long v); @Override - public void generate(NodeLIRBuilderTool gen) { - Value result = gen.getLIRGeneratorTool().emitBitScanReverse(gen.operand(getValue())); - gen.setResult(this, result); + public void generate(NodeLIRBuilderTool builder, ArithmeticLIRGeneratorTool gen) { + builder.setResult(this, gen.emitBitScanReverse(builder.operand(getValue()))); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DeferredPiNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DeferredPiNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ //JaCoCo Exclude -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.ObjectStamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,13 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.lir.gen.LIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.FixedWithNextNode; import com.oracle.graal.nodes.StateSplit; @@ -66,23 +67,24 @@ * @see com.oracle.graal.replacements.DefaultJavaLoweringProvider#createUnsafeRead */ @Override - public void generate(NodeLIRBuilderTool gen) { - LIRKind kind = gen.getLIRGeneratorTool().target().getLIRKind(readKind); - Value loaded = gen.getLIRGeneratorTool().emitLoad(kind, gen.operand(address), null); + public void generate(NodeLIRBuilderTool builder) { + LIRGeneratorTool gen = builder.getLIRGeneratorTool(); + LIRKind kind = gen.target().getLIRKind(readKind); + Value loaded = gen.emitLoad(kind, builder.operand(address), null); switch (readKind) { case Byte: - loaded = gen.getLIRGeneratorTool().emitSignExtend(loaded, 8, 32); + loaded = gen.getArithmetic().emitSignExtend(loaded, 8, 32); break; case Short: - loaded = gen.getLIRGeneratorTool().emitSignExtend(loaded, 16, 32); + loaded = gen.getArithmetic().emitSignExtend(loaded, 16, 32); break; case Boolean: - loaded = gen.getLIRGeneratorTool().emitZeroExtend(loaded, 8, 32); + loaded = gen.getArithmetic().emitZeroExtend(loaded, 8, 32); break; case Char: - loaded = gen.getLIRGeneratorTool().emitZeroExtend(loaded, 16, 32); + loaded = gen.getArithmetic().emitZeroExtend(loaded, 16, 32); break; } - gen.setResult(this, loaded); + builder.setResult(this, loaded); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.replacements.nodes; -import static jdk.internal.jvmci.code.BytecodeFrame.isPlaceholderBci; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import static jdk.vm.ci.code.BytecodeFrame.isPlaceholderBci; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.MethodSubstitution; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.code.BytecodeFrame; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.code.BytecodeFrame; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.InputType;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MethodHandleNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MethodHandleNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,16 +25,16 @@ import java.lang.invoke.MethodHandle; import java.util.Arrays; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.Assumptions; -import jdk.internal.jvmci.meta.Assumptions.AssumptionResult; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MethodHandleAccessProvider; -import jdk.internal.jvmci.meta.MethodHandleAccessProvider.IntrinsicMethod; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Signature; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions.AssumptionResult; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MethodHandleAccessProvider; +import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; @@ -166,7 +166,7 @@ * @param target the target, already loaded from the member name node * @return invoke node for the member name target */ - private static InvokeNode getTargetInvokeNode(Assumptions assumptions, IntrinsicMethod intrinsicMethod, int bci, JavaType returnType, ValueNode[] arguments, ResolvedJavaMethod target, + private static InvokeNode getTargetInvokeNode(Assumptions assumptions, IntrinsicMethod intrinsicMethod, int bci, JavaType returnType, ValueNode[] originalArguments, ResolvedJavaMethod target, ResolvedJavaMethod original) { if (target == null) { return null; @@ -180,6 +180,9 @@ final boolean isStatic = target.isStatic(); final int receiverSkip = isStatic ? 0 : 1; + // Don't mutate the passed in arguments + ValueNode[] arguments = originalArguments.clone(); + // Cast receiver to its type. if (!isStatic) { JavaType receiverType = target.getDeclaringClass();
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/PureFunctionMacroNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ResolvedMethodHandleCallTargetNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ResolvedMethodHandleCallTargetNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,9 +29,9 @@ import java.lang.invoke.MethodHandle; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.NodeInputList;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/VirtualizableInvokeMacroNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/VirtualizableInvokeMacroNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.nodeinfo.NodeInfo;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements.nodes; -import jdk.internal.jvmci.code.Register; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,9 +25,9 @@ import static com.oracle.graal.compiler.common.type.IntegerStamp.addOverflowsNegatively; import static com.oracle.graal.compiler.common.type.IntegerStamp.addOverflowsPositively; import static com.oracle.graal.compiler.common.type.IntegerStamp.carryBits; -import jdk.internal.jvmci.code.CodeUtil; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.code.CodeUtil; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactSplitNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerAddExactSplitNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.nodes.arithmetic; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass; @@ -41,6 +41,6 @@ @Override protected Value generateArithmetic(NodeLIRBuilderTool gen) { - return gen.getLIRGeneratorTool().emitAdd(gen.operand(getX()), gen.operand(getY()), true); + return gen.getLIRGeneratorTool().getArithmetic().emitAdd(gen.operand(getX()), gen.operand(getY()), true); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerExactArithmeticSplitNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerExactArithmeticSplitNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.replacements.nodes.arithmetic; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements.nodes.arithmetic; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactSplitNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulExactSplitNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.nodes.arithmetic; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass; @@ -41,6 +41,6 @@ @Override protected Value generateArithmetic(NodeLIRBuilderTool gen) { - return gen.getLIRGeneratorTool().emitMul(gen.operand(getX()), gen.operand(getY()), true); + return gen.getLIRGeneratorTool().getArithmetic().emitMul(gen.operand(getX()), gen.operand(getY()), true); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulHighNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerMulHighNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,20 +24,20 @@ import java.util.function.BiFunction; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.BinaryNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = "*H") public final class IntegerMulHighNode extends BinaryNode implements ArithmeticLIRLowerable { @@ -87,7 +87,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { Value a = nodeValueMap.operand(getX()); Value b = nodeValueMap.operand(getY()); nodeValueMap.setResult(this, gen.emitMulHigh(a, b));
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.replacements.nodes.arithmetic; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.graph.NodeClass;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactSplitNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/IntegerSubExactSplitNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.replacements.nodes.arithmetic; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.graph.NodeClass; @@ -41,6 +41,6 @@ @Override protected Value generateArithmetic(NodeLIRBuilderTool gen) { - return gen.getLIRGeneratorTool().emitSub(gen.operand(getX()), gen.operand(getY()), true); + return gen.getLIRGeneratorTool().getArithmetic().emitSub(gen.operand(getX()), gen.operand(getY()), true); } }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/UnsignedMulHighNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/arithmetic/UnsignedMulHighNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,20 +24,20 @@ import java.util.function.BiFunction; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.IntegerStamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.spi.CanonicalizerTool; -import com.oracle.graal.lir.gen.ArithmeticLIRGenerator; +import com.oracle.graal.lir.gen.ArithmeticLIRGeneratorTool; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodes.ConstantNode; import com.oracle.graal.nodes.ValueNode; import com.oracle.graal.nodes.calc.BinaryNode; import com.oracle.graal.nodes.spi.ArithmeticLIRLowerable; -import com.oracle.graal.nodes.spi.NodeValueMap; +import com.oracle.graal.nodes.spi.NodeLIRBuilderTool; @NodeInfo(shortName = "|*H|") public final class UnsignedMulHighNode extends BinaryNode implements ArithmeticLIRLowerable { @@ -92,7 +92,7 @@ } @Override - public void generate(NodeValueMap nodeValueMap, ArithmeticLIRGenerator gen) { + public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen) { Value a = nodeValueMap.operand(getX()); Value b = nodeValueMap.operand(getY()); nodeValueMap.setResult(this, gen.emitUMulHigh(a, b));
--- a/graal/com.oracle.graal.runtime/src/com/oracle/graal/runtime/RuntimeProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.runtime/src/com/oracle/graal/runtime/RuntimeProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.runtime; -import jdk.internal.jvmci.code.Architecture; +import jdk.vm.ci.code.Architecture; import com.oracle.graal.compiler.target.Backend;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/Salver.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2015, 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.salver; + +import static com.oracle.graal.salver.SalverOptions.SalverAddress; +import static com.oracle.graal.salver.SalverOptions.SalverPort; + +import java.net.InetSocketAddress; + +import com.oracle.graal.salver.util.ECIDUtil; + +public final class Salver { + + /** + * The Execution Context Identifier is a unique identifier that simplifies the grouping of + * events created in different DumpHandlers or Threads. It should be added as a special property + * to all :begin trace events. + */ + public static final String ECID = ECIDUtil.random(); + + private Salver() { + } + + public static InetSocketAddress getSocketAddress() { + return new InetSocketAddress(SalverAddress.getValue(), SalverPort.getValue()); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/SalverDebugConfigCustomizer.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2015, 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.salver; + +import static com.oracle.graal.salver.SalverOptions.Salver; + +import com.oracle.graal.debug.DebugConfig; +import com.oracle.graal.debug.DebugConfigCustomizer; +import com.oracle.graal.salver.handler.GraphDumpHandler; + +import jdk.vm.ci.service.ServiceProvider; + +@ServiceProvider(DebugConfigCustomizer.class) +public class SalverDebugConfigCustomizer implements DebugConfigCustomizer { + + public void customize(DebugConfig config) { + if (Salver.getValue()) { + config.dumpHandlers().add(new GraphDumpHandler()); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/SalverOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2015, 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.salver; + +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; + +public final class SalverOptions { + + //@formatter:off + @Option(help = "Enable dumps via Salver trace events.", type = OptionType.Debug) + public static final OptionValue<Boolean> Salver = new OptionValue<>(false); + + @Option(help = "Network address (Salver).", type = OptionType.Debug) + public static final OptionValue<String> SalverAddress = new OptionValue<>("127.0.0.1"); + + @Option(help = "Network port (Salver).", type = OptionType.Debug) + public static final OptionValue<Integer> SalverPort = new OptionValue<>(2343); + + @Option(help = "Dump to files as opposed to sending them over the network (Salver).", type = OptionType.Debug) + public static final OptionValue<Boolean> SalverToFile = new OptionValue<>(false); + + //@Option(help = "Use binary format for dumps (Salver).", type = OptionType.Debug) + //public static final OptionValue<Boolean> SalverDumpBinary = new OptionValue<>(false); + //@formatter:on +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/data/DataDict.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015, 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.salver.data; + +import java.util.LinkedHashMap; + +public class DataDict extends LinkedHashMap<Object, Object> { + + private static final long serialVersionUID = 1L; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/data/DataList.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015, 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.salver.data; + +import java.util.ArrayList; + +public class DataList extends ArrayList<Object> { + + private static final long serialVersionUID = 1L; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/dumper/AbstractGraalDumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2015, 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.salver.dumper; + +import java.io.IOException; + +import com.oracle.graal.salver.Salver; +import com.oracle.graal.salver.data.DataDict; + +public class AbstractGraalDumper extends AbstractSerializerDumper { + + public static final String EVENT_NAMESPACE = "graal"; + + private int eventCounter; + + public void beginDump() throws IOException { + beginDump(EVENT_NAMESPACE); + } + + protected void beginDump(String namespace) throws IOException { + beginDump(namespace, getBeginDumpDataDict()); + } + + protected void beginDump(String namespace, DataDict dataDict) throws IOException { + DataDict eventDict = createEventDict(":begin"); + eventDict.put("@time", System.currentTimeMillis()); + eventDict.put("@ecid", Salver.ECID); + if (namespace != null) { + eventDict.put("@namespace", namespace); + } + if (dataDict != null) { + eventDict.put("@data", dataDict); + } + serializeAndFlush(eventDict); + } + + protected DataDict getBeginDumpDataDict() { + DataDict dataDict = new DataDict(); + dataDict.put("dumper", getClass().getSimpleName()); + dataDict.put("thread", Thread.currentThread().getName()); + return dataDict; + } + + public void endDump() throws IOException { + DataDict eventDict = createEventDict(":end"); + eventDict.put("@time", System.currentTimeMillis()); + serializeAndFlush(eventDict); + } + + @Override + public void close() throws IOException { + endDump(); + } + + protected DataDict createEventDict(String name) { + DataDict eventDict = new DataDict(); + eventDict.put("@event", name); + eventDict.put("@n", eventCounter++); + return eventDict; + } + + protected DataDict createEventDict(String name, DataDict data) { + DataDict eventDict = createEventDict(name); + eventDict.put("@data", data); + return eventDict; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/dumper/AbstractMethodScopeDumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2015, 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.salver.dumper; + +import java.io.IOException; +import java.lang.reflect.Modifier; +import java.util.ArrayDeque; +import java.util.Collections; +import java.util.Deque; + +import com.oracle.graal.java.BytecodeDisassembler; +import com.oracle.graal.salver.data.DataDict; +import com.oracle.graal.salver.data.DataList; +import com.oracle.graal.salver.util.MethodContext; + +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; + +public abstract class AbstractMethodScopeDumper extends AbstractGraalDumper { + + protected MethodContext previousMethodContext; + + protected final Deque<Integer> pathStack = new ArrayDeque<>(); + protected int pathCounter; + protected final Deque<Integer> itemIdStack = new ArrayDeque<>(); + protected int itemIdCounter; + + protected void resolveMethodContext() throws IOException { + // Get all current JavaMethod instances in the context. + MethodContext methodContext = new MethodContext(); + // Reverse list such that inner method comes after outer method. + Collections.reverse(methodContext); + + int size = methodContext.size(); + int previousSize = previousMethodContext != null ? previousMethodContext.size() : 0; + // Check for method scopes that must be closed since the previous dump. + for (int i = 0; i < previousSize; ++i) { + if (i >= size || !methodContext.itemEquals(i, previousMethodContext)) { + for (int inlineDepth = previousSize - 1; inlineDepth >= i; --inlineDepth) { + closeScope(); + } + break; + } + } + // Check for method scopes that must be opened since the previous dump. + for (int i = 0; i < size; ++i) { + if (i >= previousSize || !methodContext.itemEquals(i, previousMethodContext)) { + for (int inlineDepth = i; inlineDepth < size; ++inlineDepth) { + openScope(methodContext.get(inlineDepth)); + } + break; + } + } + // Save inline context for next dump. + previousMethodContext = methodContext; + } + + protected void openScope(MethodContext.Item item) throws IOException { + int debugId = item.getDebugId(); + pathStack.push(debugId != -1 ? debugId : pathCounter); + itemIdStack.push(itemIdCounter); + pathCounter = 0; + itemIdCounter = 0; + + processMethod(item.getMethod(), item.getName()); + } + + @SuppressWarnings("unused") + protected void closeScope() throws IOException { + if (!pathStack.isEmpty()) { + pathCounter = pathStack.pop(); + pathCounter++; + } + if (!itemIdStack.isEmpty()) { + itemIdCounter = itemIdStack.pop(); + } + } + + protected void processMethod(JavaMethod method, String name) throws IOException { + DataDict dataDict = new DataDict(); + dataDict.put("name", name); + + if (method instanceof ResolvedJavaMethod) { + DataDict methodDict = new DataDict(); + dataDict.put("method", methodDict); + + ResolvedJavaMethod resolvedMethod = (ResolvedJavaMethod) method; + + methodDict.put("modifiers", Modifier.toString(resolvedMethod.getModifiers())); + methodDict.put("code", new BytecodeDisassembler(false).disassemble(resolvedMethod)); + } + serializeAndFlush(createEventDictWithId("method", dataDict, false)); + } + + protected int nextItemId() { + return itemIdCounter++; + } + + protected DataDict createEventDictWithId(String name, boolean isItem) { + DataDict eventDict = createEventDict(name); + + DataDict idDict = new DataDict(); + eventDict.put("@id", idDict); + + DataList pathList = new DataList(); + idDict.put("path", pathList); + + for (int i : pathStack) { + pathList.add(i); + } + if (isItem) { + pathList.add(pathCounter++); + } + return eventDict; + } + + protected DataDict createEventDictWithId(String name, DataDict dataDict, boolean isItem) { + DataDict eventDict = createEventDictWithId(name, isItem); + eventDict.put("@data", dataDict); + return eventDict; + } + + protected DataDict createEventDictWithId(String name) { + return createEventDictWithId(name, true); + } + + protected DataDict createEventDictWithId(String name, DataDict dataDict) { + return createEventDictWithId(name, dataDict, true); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/dumper/AbstractSerializerDumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2015, 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.salver.dumper; + +import java.io.IOException; + +import com.oracle.graal.salver.serialize.Serializer; + +public abstract class AbstractSerializerDumper implements Dumper { + + protected Serializer serializer; + + public AbstractSerializerDumper() { + } + + public AbstractSerializerDumper(Serializer serializer) { + this.serializer = serializer; + } + + public Serializer getSerializer() { + return serializer; + } + + public void setSerializer(Serializer serializer) { + this.serializer = serializer; + } + + protected void serialize(Object obj) throws IOException { + if (serializer != null) { + serializer.serialize(obj); + } + } + + protected void serializeAndFlush(Object obj) throws IOException { + if (serializer != null) { + serializer.serialize(obj); + serializer.flush(); + } + } + + @Override + public void close() throws IOException { + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/dumper/Dumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2015, 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.salver.dumper; + +import java.io.Closeable; + +public interface Dumper extends Closeable, AutoCloseable { + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/dumper/GraphDumper.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,353 @@ +/* + * Copyright (c) 2015, 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.salver.dumper; + +import static com.oracle.graal.compiler.common.GraalOptions.PrintGraphProbabilities; +import static com.oracle.graal.compiler.common.GraalOptions.PrintIdealGraphSchedule; + +import java.io.IOException; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import com.oracle.graal.compiler.common.Fields; +import com.oracle.graal.compiler.common.cfg.BlockMap; +import com.oracle.graal.debug.Debug; +import com.oracle.graal.debug.Debug.Scope; +import com.oracle.graal.graph.Edges; +import com.oracle.graal.graph.Edges.Type; +import com.oracle.graal.graph.Graph; +import com.oracle.graal.graph.InputEdges; +import com.oracle.graal.graph.Node; +import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.graph.NodeList; +import com.oracle.graal.graph.NodeMap; +import com.oracle.graal.graph.iterators.NodeIterable; +import com.oracle.graal.nodes.AbstractBeginNode; +import com.oracle.graal.nodes.AbstractEndNode; +import com.oracle.graal.nodes.AbstractMergeNode; +import com.oracle.graal.nodes.ControlSinkNode; +import com.oracle.graal.nodes.ControlSplitNode; +import com.oracle.graal.nodes.FixedNode; +import com.oracle.graal.nodes.PhiNode; +import com.oracle.graal.nodes.ProxyNode; +import com.oracle.graal.nodes.StructuredGraph; +import com.oracle.graal.nodes.VirtualState; +import com.oracle.graal.nodes.cfg.Block; +import com.oracle.graal.nodes.cfg.ControlFlowGraph; +import com.oracle.graal.phases.schedule.SchedulePhase; +import com.oracle.graal.salver.data.DataDict; +import com.oracle.graal.salver.data.DataList; + +public class GraphDumper extends AbstractMethodScopeDumper { + + public static final String EVENT_NAMESPACE = "graal/graph"; + + private static final Map<Class<?>, String> nodeClassCategoryMap; + + static { + nodeClassCategoryMap = new LinkedHashMap<>(); + nodeClassCategoryMap.put(ControlSinkNode.class, "ControlSink"); + nodeClassCategoryMap.put(ControlSplitNode.class, "ControlSplit"); + nodeClassCategoryMap.put(AbstractMergeNode.class, "Merge"); + nodeClassCategoryMap.put(AbstractBeginNode.class, "Begin"); + nodeClassCategoryMap.put(AbstractEndNode.class, "End"); + nodeClassCategoryMap.put(FixedNode.class, "Fixed"); + nodeClassCategoryMap.put(VirtualState.class, "State"); + nodeClassCategoryMap.put(PhiNode.class, "Phi"); + nodeClassCategoryMap.put(ProxyNode.class, "Proxy"); + // nodeClassCategoryMap.put(Object.class, "Floating"); + } + + @Override + public void beginDump() throws IOException { + beginDump(EVENT_NAMESPACE); + } + + @SuppressWarnings("try") + public void dump(Graph graph, String msg) throws IOException { + resolveMethodContext(); + + try (Scope s = Debug.sandbox(getClass().getSimpleName(), null)) { + SchedulePhase predefinedSchedule = null; + for (Object obj : Debug.context()) { + if (obj instanceof SchedulePhase) { + predefinedSchedule = (SchedulePhase) obj; + } + } + processGraph(graph, msg, predefinedSchedule); + } catch (IOException e) { + throw e; + } catch (Throwable e) { + throw Debug.handle(e); + } + } + + private void processGraph(Graph graph, String name, SchedulePhase predefinedSchedule) throws IOException { + SchedulePhase schedule = predefinedSchedule; + if (schedule == null) { + // Also provide a schedule when an error occurs + if (PrintIdealGraphSchedule.getValue() || Debug.contextLookup(Throwable.class) != null) { + if (graph instanceof StructuredGraph) { + schedule = new SchedulePhase(); + schedule.apply((StructuredGraph) graph); + } + } + } + + ControlFlowGraph cfg = null; + List<Block> blocks = null; + NodeMap<Block> nodeToBlock = null; + BlockMap<List<Node>> blockToNodes = null; + + if (schedule != null) { + cfg = schedule.getCFG(); + if (cfg != null) { + blocks = cfg.getBlocks(); + nodeToBlock = schedule.getNodeToBlockMap(); + blockToNodes = schedule.getBlockToNodesMap(); + } + } + + DataDict dataDict = new DataDict(); + dataDict.put("id", nextItemId()); + dataDict.put("name", name); + + DataDict graphDict = new DataDict(); + dataDict.put("graph", graphDict); + + processNodes(graphDict, graph.getNodes(), nodeToBlock, cfg); + + if (blocks != null && blockToNodes != null) { + processBlocks(graphDict, blocks, blockToNodes); + } + serializeAndFlush(createEventDictWithId("graph", dataDict)); + } + + private static void processNodes(DataDict graphDict, NodeIterable<Node> nodes, NodeMap<Block> nodeToBlock, ControlFlowGraph cfg) { + Map<NodeClass<?>, Integer> classMap = new HashMap<>(); + + DataList classList = new DataList(); + graphDict.put("classes", classList); + + DataList nodeList = new DataList(); + graphDict.put("nodes", nodeList); + + DataList edgeList = new DataList(); + graphDict.put("edges", edgeList); + + for (Node node : nodes) { + NodeClass<?> nodeClass = node.getNodeClass(); + + DataDict nodeDict = new DataDict(); + nodeDict.put("id", getNodeId(node)); + nodeDict.put("class", getNodeClassId(classMap, classList, nodeClass)); + + if (nodeToBlock != null) { + if (nodeToBlock.isNew(node)) { + nodeDict.put("block", -1); + } else { + Block block = nodeToBlock.get(node); + if (block != null) { + nodeDict.put("block", block.getId()); + } + } + } + + if (cfg != null && PrintGraphProbabilities.getValue() && node instanceof FixedNode) { + try { + nodeDict.put("probability", cfg.blockFor(node).probability()); + } catch (Throwable t) { + nodeDict.put("probability", t); + } + } + + Map<Object, Object> debugProperties = node.getDebugProperties(); + if (!debugProperties.isEmpty()) { + DataDict propertyDict = new DataDict(); + nodeDict.put("properties", propertyDict); + for (Map.Entry<Object, Object> entry : debugProperties.entrySet()) { + propertyDict.put(entry.getKey().toString(), entry.getValue()); + } + } + + nodeList.add(nodeDict); + appendEdges(edgeList, node, Type.Inputs); + appendEdges(edgeList, node, Type.Successors); + } + } + + private static void processBlocks(DataDict graphDict, List<Block> blocks, BlockMap<List<Node>> blockToNodes) { + DataList blockList = new DataList(); + graphDict.put("blocks", blockList); + + for (Block block : blocks) { + List<Node> nodes = blockToNodes.get(block); + if (nodes != null) { + DataDict blockDict = new DataDict(); + blockDict.put("id", block.getId()); + + DataList nodeList = new DataList(); + blockDict.put("nodes", nodeList); + + for (Node node : nodes) { + nodeList.add(getNodeId(node)); + } + + DataList successorList = new DataList(); + blockDict.put("successors", successorList); + for (Block successor : block.getSuccessors()) { + successorList.add(successor.getId()); + } + + blockList.add(blockDict); + } + } + } + + private static void appendEdges(DataList edgeList, Node node, Edges.Type type) { + NodeClass<?> nodeClass = node.getNodeClass(); + + Edges edges = nodeClass.getEdges(type); + final long[] curOffsets = edges.getOffsets(); + + for (int i = 0; i < edges.getDirectCount(); i++) { + Node other = Edges.getNode(node, curOffsets, i); + if (other != null) { + DataDict edgeDict = new DataDict(); + + DataDict nodeDict = new DataDict(); + nodeDict.put("node", getNodeId(node)); + nodeDict.put("field", edges.getName(i)); + + edgeDict.put("from", type == Type.Inputs ? getNodeId(other) : nodeDict); + edgeDict.put("to", type == Type.Inputs ? nodeDict : getNodeId(other)); + edgeList.add(edgeDict); + } + } + for (int i = edges.getDirectCount(); i < edges.getCount(); i++) { + NodeList<Node> list = Edges.getNodeList(node, curOffsets, i); + if (list != null) { + for (int index = 0; index < list.size(); index++) { + Node other = list.get(index); + if (other != null) { + DataDict edgeDict = new DataDict(); + + DataDict nodeDict = new DataDict(); + nodeDict.put("node", getNodeId(node)); + nodeDict.put("field", edges.getName(i)); + nodeDict.put("index", index); + + edgeDict.put("from", type == Type.Inputs ? getNodeId(other) : nodeDict); + edgeDict.put("to", type == Type.Inputs ? nodeDict : getNodeId(other)); + edgeList.add(edgeDict); + } + } + } + } + } + + @SuppressWarnings("deprecation") + private static int getNodeId(Node node) { + return node != null ? node.getId() : -1; + } + + private static int getNodeClassId(Map<NodeClass<?>, Integer> classMap, DataList classList, NodeClass<?> nodeClass) { + if (classMap.containsKey(nodeClass)) { + return classMap.get(nodeClass); + } + int classId = classMap.size(); + classMap.put(nodeClass, classId); + + Class<?> javaClass = nodeClass.getJavaClass(); + + DataDict classDict = new DataDict(); + classList.add(classDict); + + classDict.put("id", classId); + classDict.put("name", nodeClass.getNameTemplate()); + classDict.put("jtype", javaClass.getName()); + + String category = getNodeClassCategory(javaClass); + if (category != null) { + classDict.put("category", category); + } + + Object propertyInfo = getPropertyInfo(nodeClass); + if (propertyInfo != null) { + classDict.put("properties", propertyInfo); + } + + Object inputInfo = getEdgeInfo(nodeClass, Type.Inputs); + if (inputInfo != null) { + classDict.put("inputs", inputInfo); + } + Object successorInfo = getEdgeInfo(nodeClass, Type.Successors); + if (successorInfo != null) { + classDict.put("successors", successorInfo); + } + return classId; + } + + private static DataDict getPropertyInfo(NodeClass<?> nodeClass) { + Fields properties = nodeClass.getData(); + if (properties.getCount() > 0) { + DataDict propertyInfoDict = new DataDict(); + for (int i = 0; i < properties.getCount(); i++) { + DataDict propertyDict = new DataDict(); + String name = properties.getName(i); + propertyDict.put("name", name); + propertyDict.put("jtype", properties.getType(i).getName()); + propertyInfoDict.put(name, propertyDict); + } + return propertyInfoDict; + } + return null; + } + + private static DataDict getEdgeInfo(NodeClass<?> nodeClass, Edges.Type type) { + DataDict edgeInfoDict = new DataDict(); + Edges edges = nodeClass.getEdges(type); + for (int i = 0; i < edges.getCount(); i++) { + DataDict edgeDict = new DataDict(); + String name = edges.getName(i); + edgeDict.put("name", name); + edgeDict.put("jtype", edges.getType(i).getName()); + if (type == Type.Inputs) { + edgeDict.put("type", ((InputEdges) edges).getInputType(i)); + } + edgeInfoDict.put(name, edgeDict); + } + return edgeInfoDict.isEmpty() ? null : edgeInfoDict; + } + + private static String getNodeClassCategory(Class<?> clazz) { + for (Map.Entry<Class<?>, String> entry : nodeClassCategoryMap.entrySet()) { + if (entry.getKey().isAssignableFrom(clazz)) { + return entry.getValue(); + } + } + return null; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/handler/AbstractDumpHandler.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2015, 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.salver.handler; + +import static java.nio.file.StandardOpenOption.CREATE; +import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING; +import static java.nio.file.StandardOpenOption.WRITE; + +import java.io.IOException; +import java.net.SocketAddress; +import java.nio.channels.FileChannel; +import java.nio.channels.SocketChannel; +import java.nio.channels.WritableByteChannel; +import java.nio.file.OpenOption; +import java.nio.file.Path; + +import com.oracle.graal.salver.dumper.Dumper; +import com.oracle.graal.salver.writer.ChannelDumpWriter; +import com.oracle.graal.salver.writer.DumpWriter; + +public abstract class AbstractDumpHandler<D extends Dumper> implements DumpHandler { + + protected String label; + + protected DumpWriter writer; + protected D dumper; + + public AbstractDumpHandler() { + setLabel(getClass().getSimpleName() + ":" + Thread.currentThread().getName()); + } + + public String getLabel() { + return label; + } + + protected void setLabel(String label) { + this.label = label; + } + + public DumpWriter getWriter() { + return writer; + } + + protected void setWriter(DumpWriter writer) { + this.writer = writer; + } + + protected void setWriter(WritableByteChannel channel) { + setWriter(new ChannelDumpWriter(channel)); + } + + protected void setWriter(SocketAddress remote) throws IOException { + setWriter(SocketChannel.open(remote)); + } + + protected void setWriter(Path path) throws IOException { + setWriter(path, WRITE, TRUNCATE_EXISTING, CREATE); + } + + protected void setWriter(Path path, OpenOption... options) throws IOException { + setWriter(FileChannel.open(path, options)); + } + + public D getDumper() { + return dumper; + } + + protected void setDumper(D dumper) { + this.dumper = dumper; + } + + public void close() throws IOException { + if (dumper != null) { + try { + dumper.close(); + } finally { + dumper = null; + } + } + if (writer != null) { + try { + writer.close(); + } finally { + writer = null; + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/handler/AbstractGraalDumpHandler.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2015, 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.salver.handler; + +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.channels.ClosedByInterruptException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import com.oracle.graal.debug.DebugDumpHandler; +import com.oracle.graal.debug.TTY; +import com.oracle.graal.salver.Salver; +import com.oracle.graal.salver.SalverOptions; +import com.oracle.graal.salver.dumper.AbstractGraalDumper; +import com.oracle.graal.salver.serialize.JSONSerializer; +import com.oracle.graal.salver.serialize.Serializer; + +public abstract class AbstractGraalDumpHandler<D extends AbstractGraalDumper> extends AbstractDumpHandler<D> implements DebugDumpHandler { + + private Serializer serializer; + + private static final int MAX_FAILURES = 7; + private int failures; + + public static final class NotInitializedException extends IOException { + + private static final long serialVersionUID = 1L; + } + + protected void ensureInitialized() throws IOException { + if (writer == null) { + if (failures < MAX_FAILURES) { + if (SalverOptions.SalverToFile.getValue()) { + initializeFileChannelWriter(); + } else { + initializeSocketChannelWriter(); + } + } + if (writer == null) { + throw new NotInitializedException(); + } + } + if (dumper == null) { + dumper = createDumper(); + if (dumper == null) { + throw new NotInitializedException(); + } + if (serializer == null) { + serializer = createSerializer(); + } + if (serializer.getWriter() != writer) { + serializer.setWriter(writer); + } + dumper.setSerializer(serializer); + dumper.beginDump(); + } + } + + protected abstract D createDumper(); + + protected Serializer createSerializer() { + return new JSONSerializer(); + } + + protected abstract void handle(Object obj, String msg) throws IOException; + + protected void initializeSocketChannelWriter() { + InetSocketAddress socketAddress = Salver.getSocketAddress(); + try { + setWriter(socketAddress); + printlnTTY("Connected to %s:%d (ECID = %s)", socketAddress.getHostName(), socketAddress.getPort(), Salver.ECID); + } catch (ClosedByInterruptException e) { + // May be caused by a cancelled Graal compilation + } catch (IOException e) { + printlnTTY("Couldn't connect to %s:%d (%s)", socketAddress.getHostName(), socketAddress.getPort(), e); + failures++; + } + } + + private static final ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat>() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("YYYY-MM-dd_HH-mm"); + } + }; + + protected void initializeFileChannelWriter() { + String filename = sdf.get().format(new Date()); + if (label != null) { + filename += "_" + Salver.ECID + "_" + label.replaceAll("(?i)[^a-z0-9-]", "-"); + } + String fileExt = JSONSerializer.getFileExtension(); + File file = new File(filename + "." + fileExt); + try { + for (int i = 1; file.exists(); i++) { + if (i < 1 << 7) { + file = new File(filename + "_" + i + "." + fileExt); + } else { + throw new IOException(); + } + } + setWriter(file.toPath()); + printlnTTY("Dumping to \"%s\"", file.getName()); + } catch (ClosedByInterruptException e) { + // May be caused by a cancelled Graal compilation + } catch (IOException e) { + printlnTTY("Failed to open %s for dumping (%s)", file.getName(), e); + failures++; + } + } + + public void dump(Object obj) { + dump(obj, null); + } + + @Override + public void dump(Object obj, String msg) { + try { + handle(obj, msg); + } catch (NotInitializedException e) { + // Ignore + } catch (IOException e) { + printlnTTY("%s", e); + if (failures < MAX_FAILURES) { + failures++; + } else { + close(); + } + } + } + + @Override + public void close() { + try { + super.close(); + } catch (IOException e) { + printlnTTY("%s", e); + } finally { + failures = 0; + } + } + + protected void printlnTTY(String format, Object... args) { + if (label != null) { + TTY.println("[" + label + "] " + format, args); + } else { + TTY.println(format, args); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/handler/DumpHandler.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2015, 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.salver.handler; + +import java.io.Closeable; +import java.io.IOException; + +public interface DumpHandler extends Closeable, AutoCloseable { + + void dump(Object obj, String msg) throws IOException; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/handler/GraphDumpHandler.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2015, 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.salver.handler; + +import java.io.IOException; + +import com.oracle.graal.graph.Graph; +import com.oracle.graal.salver.dumper.GraphDumper; + +public class GraphDumpHandler extends AbstractGraalDumpHandler<GraphDumper> { + + @Override + protected GraphDumper createDumper() { + return new GraphDumper(); + } + + @Override + public void handle(Object obj, String msg) throws IOException { + if (obj instanceof Graph) { + ensureInitialized(); + dumper.dump((Graph) obj, msg); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/package-info.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2015, 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. + */ +/** + * <p> + * This package provides the basic functionality to send debug dumps to a + * server that is able to process Salver trace events. + * </p> + * + * <p> + * Salver is a Web Application Framework for Trace Visualization which + * defines an interface for sending trace information via serializable events, + * e.g. as JSON text representation. Events are grouped into separate + * namespaces to simplify event processing. Listeners can register for a + * certain namespace and will receive all relevant events. + * </p> + * + * <p> + * In order to process trace events of this package the server needs to listen + * for the "graal/graph" namespace. + * </p> + * + * <p> + * See {@link com.oracle.graal.salver.SalverOptions SalverOptions} for all + * available options. + * <p> + * + * <p> + * Basic components of this package: + * <ul> + * <li>DumpHandler:<br/> + * Initialization of the corresponding Dumper in case a given object can + * be processed. + * </li> + * <li>Dumper:<br/> + * Processing the object about to be dumped and extract all necessary + * information in order to produce a serializable data object. + * </li> + * <li>Serializer:<br/> + * Serializing a given data object, e.g. to a JSON text representation. + * </li> + * <li>Writer:<br/> + * Writing the actual data, e.g. to a WritableByteChannel. + * </li> + * </ul> + * </p> + * + * <p> + * Currently available {@link com.oracle.graal.debug.DebugDumpHandler DebugDumpHandlers}: + * <ul> + * <li>{@link com.oracle.graal.salver.handler.GraphDumpHandler GraphDumpHandler}:<br> + * Dumps {@link com.oracle.graal.graph.Graph Graphs} (extracts almost the + * same information as IGV's dump handler). + * </li> + * </ul> + * </p> + */ +package com.oracle.graal.salver; +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/serialize/AbstractSerializer.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2015, 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.salver.serialize; + +import java.io.IOException; + +import com.oracle.graal.salver.writer.DumpWriter; + +public abstract class AbstractSerializer implements Serializer { + + protected DumpWriter writer; + + public AbstractSerializer() { + } + + public AbstractSerializer(DumpWriter writer) { + if (writer != null) { + setWriter(writer); + } + } + + public DumpWriter getWriter() { + return writer; + } + + public void setWriter(DumpWriter writer) { + this.writer = writer; + } + + public void reset() throws IOException { + } + + public void flush() throws IOException { + if (writer != null) { + writer.flush(); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/serialize/JSONSerializer.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2015, 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.salver.serialize; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import com.oracle.graal.salver.writer.DumpWriter; + +public class JSONSerializer extends AbstractSerializer { + + public static final String MEDIA_TYPE = "application/json"; + public static final String FILE_EXTENSION = "json"; + + public JSONSerializer() { + } + + public JSONSerializer(DumpWriter writer) { + super(writer); + } + + public JSONSerializer serialize(Object obj) throws IOException { + if (writer != null) { + writer.write(appendValue(new StringBuilder(), obj).append('\n')); + } + return this; + } + + public static StringBuilder stringify(StringBuilder sb, Object obj) { + return appendValue(sb, obj); + } + + public static String stringify(Object obj) { + return appendValue(new StringBuilder(), obj).toString(); + } + + public static String getMediaType() { + return MEDIA_TYPE; + } + + public static String getFileExtension() { + return FILE_EXTENSION; + } + + @SuppressWarnings("unchecked") + private static StringBuilder appendValue(StringBuilder sb, Object val) { + if (val instanceof Map<?, ?>) { + return appendDict(sb, (Map<Object, Object>) val); + } + if (val instanceof List<?>) { + return appendList(sb, (List<Object>) val); + } + if (val instanceof byte[]) { + return appendByteArray(sb, (byte[]) val); + } + if (val instanceof Number) { + return sb.append(val); + } + if (val instanceof Boolean) { + return sb.append(val); + } + if (val == null) { + return sb.append("null"); + } + return appendString(sb, String.valueOf(val)); + } + + private static StringBuilder appendDict(StringBuilder sb, Map<Object, Object> dict) { + sb.append('{'); + boolean comma = false; + for (Map.Entry<Object, Object> entry : dict.entrySet()) { + if (comma) { + sb.append(','); + } else { + comma = true; + } + appendString(sb, String.valueOf(entry.getKey())); + sb.append(':'); + appendValue(sb, entry.getValue()); + } + return sb.append('}'); + } + + private static StringBuilder appendList(StringBuilder sb, List<Object> list) { + sb.append('['); + boolean comma = false; + for (Object val : list) { + if (comma) { + sb.append(','); + } else { + comma = true; + } + appendValue(sb, val); + } + return sb.append(']'); + } + + private static StringBuilder appendString(StringBuilder sb, String str) { + sb.append('"'); + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + switch (c) { + case '"': + sb.append("\\\""); + break; + case '\\': + sb.append("\\\\"); + break; + case '\b': + sb.append("\\b"); + break; + case '\f': + sb.append("\\f"); + break; + case '\n': + sb.append("\\n"); + break; + case '\r': + sb.append("\\r"); + break; + case '\t': + sb.append("\\t"); + break; + default: { + if (Character.isISOControl(c)) { + sb.append("\\u00"); + sb.append(Character.forDigit((c >> 4) & 0xF, 16)); + sb.append(Character.forDigit(c & 0xF, 16)); + } else { + sb.append(c); + } + } + } + } + return sb.append('"'); + } + + private static StringBuilder appendByteArray(StringBuilder sb, byte[] arr) { + if (arr.length > 0) { + sb.append("0x"); + for (byte b : arr) { + sb.append(String.format("%02x", b)); + } + return sb; + } + return sb.append("null"); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/serialize/Serializer.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015, 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.salver.serialize; + +import java.io.Flushable; +import java.io.IOException; + +import com.oracle.graal.salver.writer.DumpWriter; + +public interface Serializer extends Flushable { + + DumpWriter getWriter(); + + void setWriter(DumpWriter writer); + + Serializer serialize(Object obj) throws IOException; + + void reset() throws IOException; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/util/ECIDUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2015, 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.salver.util; + +import java.security.SecureRandom; +import java.util.Random; + +public class ECIDUtil { + + private static final Random RANDOM = new SecureRandom(); + + private static final String BASE58_ALPHABET = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz123456789"; + + public static String random() { + return random(8); + } + + public static String random(int length) { + StringBuilder sb = new StringBuilder(); + byte[] bytes = new byte[length]; + RANDOM.nextBytes(bytes); + for (byte b : bytes) { + sb.append(BASE58_ALPHABET.charAt((b & 0xff) % 58)); + } + return sb.toString(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/util/MethodContext.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2015, 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.salver.util; + +import static com.oracle.graal.debug.GraalDebugConfig.asJavaMethod; + +import java.util.ArrayList; + +import com.oracle.graal.debug.Debug; +import com.oracle.graal.debug.DebugDumpScope; +import com.oracle.graal.graph.Graph; +import com.oracle.graal.salver.util.MethodContext.Item; + +import jdk.vm.ci.meta.JavaMethod; + +public class MethodContext extends ArrayList<Item> { + + private static final long serialVersionUID = 1L; + + public static final class Item { + + private String name; + private JavaMethod method; + private int debugId; + + private Item(String name, JavaMethod method, int debugId) { + this.name = name; + this.method = method; + this.debugId = debugId; + } + + private Item(JavaMethod method) { + this(method.format("%H::%n(%p)"), method, -1); + } + + private Item(String name) { + this(name, null, -1); + } + + public String getName() { + return name; + } + + public JavaMethod getMethod() { + return method; + } + + public int getDebugId() { + return debugId; + } + } + + public MethodContext() { + Object lastMethodOrGraph = null; + for (Object obj : Debug.context()) { + JavaMethod method = asJavaMethod(obj); + if (method != null) { + JavaMethod lastAsMethod = asJavaMethod(lastMethodOrGraph); + if (lastAsMethod == null || !lastAsMethod.equals(method)) { + add(new Item(method)); + } else { + /* + * This prevents multiple adjacent method context objects for the same method + * from resulting in multiple IGV tree levels. This works on the assumption that + * real inlining debug scopes will have a graph context object between the + * inliner and inlinee context objects. + */ + } + } else if (obj instanceof DebugDumpScope) { + DebugDumpScope debugDumpScope = (DebugDumpScope) obj; + if (debugDumpScope.decorator && !isEmpty()) { + try { + get(size() - 1).debugId = Integer.parseInt(debugDumpScope.name); + } catch (NumberFormatException e) { + // Ignore + } + } else { + add(new Item(debugDumpScope.name)); + } + } + if (obj instanceof JavaMethod || obj instanceof Graph) { + lastMethodOrGraph = obj; + } + } + if (isEmpty()) { + add(new Item("Top Scope")); + } + } + + public boolean itemEquals(int index, MethodContext context) { + Item i1 = get(index); + Item i2 = context != null ? context.get(index) : null; + if (i1 != null && i2 != null && i1.name != null && i2.name != null) { + return i1.name.equals(i2.name) && i1.debugId == i2.debugId; + } + return false; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/writer/ChannelDumpWriter.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2015, 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.salver.writer; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.ReadOnlyBufferException; +import java.nio.channels.WritableByteChannel; +import java.nio.charset.CharsetEncoder; +import java.nio.charset.CoderResult; +import java.nio.charset.StandardCharsets; + +public class ChannelDumpWriter implements DumpWriter { + + private static final int BUFFER_CAPACITY = 256 * 1024; + + protected final WritableByteChannel channel; + protected final ByteBuffer buffer; + + public ChannelDumpWriter(WritableByteChannel channel) { + this(channel, ByteBuffer.allocateDirect(BUFFER_CAPACITY)); + } + + public ChannelDumpWriter(WritableByteChannel channel, ByteBuffer buffer) { + this.channel = channel; + this.buffer = buffer; + } + + private void ensureAvailable(int len) throws IOException { + if (buffer.isReadOnly()) { + throw new ReadOnlyBufferException(); + } + if (buffer.capacity() < len) { + throw new IllegalArgumentException(); + } + while (buffer.remaining() < len) { + flush(); + } + } + + public ChannelDumpWriter write(byte b) throws IOException { + ensureAvailable(1); + buffer.put(b); + return this; + } + + public ChannelDumpWriter write(byte[] arr) throws IOException { + if (buffer.isReadOnly()) { + throw new ReadOnlyBufferException(); + } + int offset = 0; + while (offset < arr.length) { + int available = buffer.remaining(); + int length = Math.min(available, arr.length - offset); + buffer.put(arr, offset, length); + if (!buffer.hasRemaining()) { + flush(); + } + offset += length; + } + return this; + } + + public ChannelDumpWriter write(ByteBuffer buf) throws IOException { + if (buf == buffer) { + throw new IllegalArgumentException(); + } + if (buffer.isReadOnly()) { + throw new ReadOnlyBufferException(); + } + while (buf.hasRemaining()) { + int available = buffer.remaining(); + int remaining = buf.remaining(); + for (int i = 0, n = Math.min(available, remaining); i < n; i++) { + buffer.put(buf.get()); + } + if (!buffer.hasRemaining()) { + flush(); + } + } + return this; + } + + public ChannelDumpWriter write(CharSequence csq) throws IOException { + if (buffer.isReadOnly()) { + throw new ReadOnlyBufferException(); + } + CharsetEncoder encoder = StandardCharsets.UTF_8.newEncoder(); + CharBuffer buf = CharBuffer.wrap(csq); + while (true) { + CoderResult result = encoder.encode(buf, buffer, true); + if (result.isError()) { + throw new IOException(result.toString()); + } + if (!buffer.hasRemaining()) { + flush(); + } + if (result.isOverflow()) { + continue; + } + break; + } + return this; + } + + public ChannelDumpWriter writeChar(char v) throws IOException { + ensureAvailable(1 << 1); + buffer.putChar(v); + return this; + } + + public ChannelDumpWriter writeShort(short v) throws IOException { + ensureAvailable(1 << 1); + buffer.putShort(v); + return this; + } + + public ChannelDumpWriter writeInt(int v) throws IOException { + ensureAvailable(1 << 2); + buffer.putInt(v); + return this; + } + + public ChannelDumpWriter writeLong(long v) throws IOException { + ensureAvailable(1 << 3); + buffer.putLong(v); + return this; + } + + public ChannelDumpWriter writeFloat(float v) throws IOException { + ensureAvailable(1 << 2); + buffer.putFloat(v); + return this; + } + + public ChannelDumpWriter writeDouble(double v) throws IOException { + ensureAvailable(1 << 3); + buffer.putDouble(v); + return this; + } + + public void flush() throws IOException { + if (buffer != null && channel != null) { + buffer.flip(); + channel.write(buffer); + buffer.compact(); + } + } + + public void close() throws IOException { + if (channel != null) { + try { + flush(); + } finally { + channel.close(); + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.salver/src/com/oracle/graal/salver/writer/DumpWriter.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2015, 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.salver.writer; + +import java.io.Closeable; +import java.io.Flushable; +import java.io.IOException; +import java.nio.ByteBuffer; + +public interface DumpWriter extends Closeable, Flushable, AutoCloseable { + + DumpWriter write(byte b) throws IOException; + + DumpWriter write(byte[] arr) throws IOException; + + DumpWriter write(ByteBuffer buf) throws IOException; + + DumpWriter write(CharSequence csq) throws IOException; + + DumpWriter writeChar(char v) throws IOException; + + DumpWriter writeShort(short v) throws IOException; + + DumpWriter writeInt(int v) throws IOException; + + DumpWriter writeLong(long v) throws IOException; + + DumpWriter writeFloat(float v) throws IOException; + + DumpWriter writeDouble(double v) throws IOException; +}
--- a/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64OptimizedCallTargetInstrumentationFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64OptimizedCallTargetInstrumentationFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.truffle.hotspot.amd64; -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 jdk.vm.ci.amd64.AMD64; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.Label;
--- a/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64RawNativeCallNodeFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot.amd64/src/com/oracle/graal/truffle/hotspot/amd64/AMD64RawNativeCallNodeFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,9 +22,9 @@ */ package com.oracle.graal.truffle.hotspot.amd64; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.hotspot.amd64.AMD64RawNativeCallNode; import com.oracle.graal.nodes.FixedWithNextNode;
--- a/graal/com.oracle.graal.truffle.hotspot.sparc/src/com/oracle/graal/truffle/hotspot/sparc/SPARCOptimizedCallTargetInstumentationFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot.sparc/src/com/oracle/graal/truffle/hotspot/sparc/SPARCOptimizedCallTargetInstumentationFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,13 +25,13 @@ 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 static jdk.vm.ci.code.CallingConvention.Type.JavaCall; +import static jdk.vm.ci.meta.JavaKind.Object; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.Register; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.asm.Assembler; import com.oracle.graal.asm.Label;
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,8 +29,8 @@ import static com.oracle.graal.truffle.TruffleCompilerOptions.TraceTruffleTransferToInterpreter; import static com.oracle.graal.truffle.TruffleCompilerOptions.TruffleCompilationExceptionsAreThrown; import static com.oracle.graal.truffle.hotspot.UnsafeAccess.UNSAFE; -import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention; -import static jdk.internal.jvmci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; import java.util.Arrays; import java.util.Collection; @@ -46,27 +46,28 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.function.Supplier; import java.util.stream.Collectors; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CallingConvention.Type; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.stack.StackIntrospection; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntime; -import jdk.internal.jvmci.hotspot.HotSpotResolvedJavaMethod; -import jdk.internal.jvmci.hotspot.HotSpotSpeculationLog; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.runtime.JVMCI; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.stack.StackIntrospection; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; +import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod; +import jdk.vm.ci.hotspot.HotSpotSpeculationLog; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.runtime.JVMCI; +import jdk.vm.ci.service.Services; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.runtime.GraalRuntime; import com.oracle.graal.compiler.CompilerThreadFactory; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.debug.Debug; @@ -108,7 +109,6 @@ import com.oracle.nfi.api.NativeFunctionInterface; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.RootCallTarget; -import com.oracle.truffle.api.TruffleRuntime; import com.oracle.truffle.api.nodes.RootNode; /** @@ -118,10 +118,6 @@ private final Map<RootCallTarget, Void> callTargets = Collections.synchronizedMap(new WeakHashMap<RootCallTarget, Void>()); - public static TruffleRuntime makeInstance() { - return new HotSpotTruffleRuntime(); - } - static class Lazy { private Map<OptimizedCallTarget, Future<?>> compilations = Collections.synchronizedMap(new IdentityHashMap<>()); private final ExecutorService compileQueue; @@ -157,7 +153,8 @@ } } - private HotSpotTruffleRuntime() { + public HotSpotTruffleRuntime(Supplier<GraalRuntime> graalRuntime) { + super(graalRuntime); setDontInlineCallBoundaryMethod(); } @@ -191,7 +188,7 @@ @Override public TruffleCompiler getTruffleCompiler() { if (truffleCompiler == null) { - truffleCompiler = DefaultTruffleCompiler.create(); + truffleCompiler = DefaultTruffleCompiler.create(this); } return truffleCompiler; } @@ -231,7 +228,7 @@ } @SuppressWarnings("try") - public static void installOptimizedCallTargetCallMethod() { + public void installOptimizedCallTargetCallMethod() { Providers providers = getHotSpotProviders(); MetaAccessProvider metaAccess = providers.getMetaAccess(); ResolvedJavaType type = metaAccess.lookupJavaType(OptimizedCallTarget.class); @@ -248,7 +245,7 @@ } } - private static CompilationResultBuilderFactory getOptimizedCallTargetInstrumentationFactory(String arch) { + private CompilationResultBuilderFactory getOptimizedCallTargetInstrumentationFactory(String arch) { for (OptimizedCallTargetInstrumentationFactory factory : Services.load(OptimizedCallTargetInstrumentationFactory.class)) { if (factory.getArchitecture().equals(arch)) { factory.init(config(), getHotSpotProviders().getRegisters()); @@ -259,7 +256,7 @@ return CompilationResultBuilderFactory.Default; } - private static CompilationResult compileMethod(ResolvedJavaMethod javaMethod) { + private CompilationResult compileMethod(ResolvedJavaMethod javaMethod) { HotSpotProviders providers = getHotSpotProviders(); SuitesProvider suitesProvider = providers.getSuites(); Suites suites = suitesProvider.createSuites(); @@ -281,12 +278,12 @@ return compileGraph(graph, cc, javaMethod, providers, backend, graphBuilderSuite, OptimisticOptimizations.ALL, getProfilingInfo(graph), suites, lirSuites, new CompilationResult(), factory); } - private static HotSpotBackend getHotSpotBackend() { - RuntimeProvider runtimeProvider = Graal.getRequiredCapability(RuntimeProvider.class); + private HotSpotBackend getHotSpotBackend() { + RuntimeProvider runtimeProvider = getRequiredGraalCapability(RuntimeProvider.class); return (HotSpotBackend) runtimeProvider.getHostBackend(); } - private static HotSpotProviders getHotSpotProviders() { + private HotSpotProviders getHotSpotProviders() { return getHotSpotBackend().getProviders(); } @@ -438,7 +435,7 @@ return null; } - public static NativeFunctionInterface createNativeFunctionInterface() { + public NativeFunctionInterface createNativeFunctionInterface() { HotSpotVMConfig config = config(); Backend backend = getHotSpotBackend(); RawNativeCallNodeFactory factory = getRawNativeCallNodeFactory(backend.getTarget().arch.getName());
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntimeAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntimeAccess.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,101 @@ */ package com.oracle.graal.truffle.hotspot; -import jdk.internal.jvmci.service.ServiceProvider; +import java.util.function.Supplier; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.runtime.JVMCI; +import jdk.vm.ci.runtime.JVMCICompiler; +import jdk.vm.ci.runtime.JVMCICompilerFactory; +import jdk.vm.ci.service.ServiceProvider; +import jdk.vm.ci.service.Services; + +import com.oracle.graal.api.runtime.GraalJVMCICompiler; +import com.oracle.graal.api.runtime.GraalRuntime; +import com.oracle.graal.hotspot.HotSpotGraalCompilerFactory; import com.oracle.truffle.api.TruffleRuntime; import com.oracle.truffle.api.TruffleRuntimeAccess; @ServiceProvider(TruffleRuntimeAccess.class) public class HotSpotTruffleRuntimeAccess implements TruffleRuntimeAccess { + + static class Options { + // @formatter:off + @Option(help = "Select a graal compiler for Truffle compilation (default: use JVMCI system compiler).") + public static final OptionValue<String> TruffleCompiler = new OptionValue<>(null); + // @formatter:on + } + public TruffleRuntime getRuntime() { - return HotSpotTruffleRuntime.makeInstance(); + // initialize JVMCI to make sure the TruffleCompiler option is parsed + JVMCI.initialize(); + + Supplier<GraalRuntime> lazyRuntime; + if (Options.TruffleCompiler.hasDefaultValue()) { + lazyRuntime = new LazySystemGraalRuntime(); + } else { + HotSpotGraalCompilerFactory factory = findCompilerFactory(Options.TruffleCompiler.getValue()); + lazyRuntime = new LazyCustomGraalRuntime(factory); + } + + return new HotSpotTruffleRuntime(lazyRuntime); + } + + private static HotSpotGraalCompilerFactory findCompilerFactory(String name) { + for (JVMCICompilerFactory factory : Services.load(JVMCICompilerFactory.class)) { + if (factory instanceof HotSpotGraalCompilerFactory) { + if (name.equals(factory.getCompilerName())) { + return (HotSpotGraalCompilerFactory) factory; + } + } + } + throw new JVMCIError("Graal compiler configuration '%s' not found.", name); + } + + private abstract static class LazyGraalRuntime implements Supplier<GraalRuntime> { + + private volatile GraalRuntime graalRuntime; + + public GraalRuntime get() { + if (graalRuntime == null) { + synchronized (this) { + if (graalRuntime == null) { + graalRuntime = getCompiler().getGraalRuntime(); + } + } + } + return graalRuntime; + } + + protected abstract GraalJVMCICompiler getCompiler(); + } + + private static final class LazyCustomGraalRuntime extends LazyGraalRuntime { + + private final HotSpotGraalCompilerFactory factory; + + private LazyCustomGraalRuntime(HotSpotGraalCompilerFactory factory) { + this.factory = factory; + } + + @Override + protected GraalJVMCICompiler getCompiler() { + return factory.createCompiler(JVMCI.getRuntime()); + } + } + + private static final class LazySystemGraalRuntime extends LazyGraalRuntime { + + @Override + protected GraalJVMCICompiler getCompiler() { + JVMCICompiler compiler = JVMCI.getRuntime().getCompiler(); + if (compiler instanceof GraalJVMCICompiler) { + return (GraalJVMCICompiler) compiler; + } else { + throw new JVMCIError("JVMCI system compiler '%s' is not a Graal compiler.", compiler.getClass().getName()); + } + } } }
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentation.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentation.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,12 +26,12 @@ import java.lang.reflect.Field; -import jdk.internal.jvmci.code.CodeCacheProvider; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.CompilationResult.Mark; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult.Mark; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import com.oracle.graal.asm.Assembler; import com.oracle.graal.compiler.common.spi.ForeignCallsProvider;
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentationFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/OptimizedCallTargetInstrumentationFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.hotspot; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.hotspot.HotSpotVMConfig; import com.oracle.graal.hotspot.meta.HotSpotRegistersProvider; import com.oracle.graal.lir.asm.CompilationResultBuilder;
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionHandle.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionHandle.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,10 +24,10 @@ import java.util.Arrays; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.code.InvalidInstalledCodeException; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope;
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterface.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,19 +23,19 @@ package com.oracle.graal.truffle.hotspot.nfi; import static com.oracle.graal.truffle.hotspot.nfi.NativeCallStubGraphBuilder.getGraph; -import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention; -import static jdk.internal.jvmci.common.UnsafeUtil.createCString; -import static jdk.internal.jvmci.common.UnsafeUtil.writeCString; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; +import static jdk.vm.ci.common.UnsafeUtil.createCString; +import static jdk.vm.ci.common.UnsafeUtil.writeCString; import java.lang.reflect.Field; -import jdk.internal.jvmci.code.CallingConvention; -import jdk.internal.jvmci.code.CallingConvention.Type; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.hotspot.HotSpotVMConfig; -import jdk.internal.jvmci.meta.DefaultProfilingInfo; -import jdk.internal.jvmci.meta.TriState; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.hotspot.HotSpotVMConfig; +import jdk.vm.ci.meta.DefaultProfilingInfo; +import jdk.vm.ci.meta.TriState; import sun.misc.Unsafe; import com.oracle.graal.compiler.GraalCompiler;
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterfaceAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/HotSpotNativeFunctionInterfaceAccess.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,17 +22,23 @@ */ package com.oracle.graal.truffle.hotspot.nfi; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.graal.truffle.hotspot.HotSpotTruffleRuntime; import com.oracle.nfi.api.NativeFunctionInterface; import com.oracle.nfi.api.NativeFunctionInterfaceAccess; +import com.oracle.truffle.api.Truffle; @ServiceProvider(NativeFunctionInterfaceAccess.class) public class HotSpotNativeFunctionInterfaceAccess implements NativeFunctionInterfaceAccess { - private final NativeFunctionInterface instance = HotSpotTruffleRuntime.createNativeFunctionInterface(); + private final NativeFunctionInterface instance = createNativeFunctionInterface(); public NativeFunctionInterface getNativeFunctionInterface() { return instance; } + + private static NativeFunctionInterface createNativeFunctionInterface() { + HotSpotTruffleRuntime runtime = (HotSpotTruffleRuntime) Truffle.getRuntime(); + return runtime.createNativeFunctionInterface(); + } }
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/NativeCallStubGraphBuilder.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/NativeCallStubGraphBuilder.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,18 +22,18 @@ */ package com.oracle.graal.truffle.hotspot.nfi; -import static jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayBaseOffset; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.hotspot.meta.HotSpotProviders;
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/RawNativeCallNodeFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/RawNativeCallNodeFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.truffle.hotspot.nfi; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.nodes.FixedWithNextNode; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/CompilerAssertsTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/CompilerAssertsTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.test; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; import org.junit.After; import org.junit.Assert;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/ConditionAnchoringTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/ConditionAnchoringTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,9 +26,9 @@ import static com.oracle.graal.graph.test.matchers.NodeIterableIsEmpty.isEmpty; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertThat; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; import org.junit.Test;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/InstrumentationPETestLanguage.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/InstrumentationPETestLanguage.java Fri Oct 30 20:56:28 2015 +0100 @@ -31,9 +31,6 @@ import com.oracle.truffle.api.frame.MaterializedFrame; import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.instrument.ASTProber; -import com.oracle.truffle.api.instrument.AdvancedInstrumentResultListener; -import com.oracle.truffle.api.instrument.AdvancedInstrumentRoot; -import com.oracle.truffle.api.instrument.AdvancedInstrumentRootFactory; import com.oracle.truffle.api.instrument.EventHandlerNode; import com.oracle.truffle.api.instrument.Instrumenter; import com.oracle.truffle.api.instrument.KillException; @@ -127,11 +124,6 @@ } @Override - protected AdvancedInstrumentRootFactory createAdvancedInstrumentRootFactory(String expr, AdvancedInstrumentResultListener resultListener) throws IOException { - return null; - } - - @Override protected Object createContext(Env env) { return null; } @@ -288,23 +280,4 @@ } } - static class TestAdvancedInstrumentCounterRoot extends AdvancedInstrumentRoot { - - private long count; - - @Override - public Object executeRoot(Node node, VirtualFrame vFrame) { - count++; - return null; - } - - public long getCount() { - return count; - } - - public String instrumentationInfo() { - return null; - } - } - }
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/LazyInitializationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/LazyInitializationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,10 +30,10 @@ import java.util.HashSet; import java.util.List; -import jdk.internal.jvmci.compiler.CompilerFactory; -import jdk.internal.jvmci.options.OptionDescriptor; -import jdk.internal.jvmci.options.OptionDescriptors; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.OptionDescriptor; +import jdk.vm.ci.options.OptionDescriptors; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.runtime.JVMCICompilerFactory; import org.junit.Assert; import org.junit.Test; @@ -51,7 +51,7 @@ private final Class<?> hotSpotGraalCompilerFactoryOptions; public LazyInitializationTest() { - hotSpotVMEventListener = forNameOrNull("jdk.internal.jvmci.hotspot.HotSpotVMEventListener"); + hotSpotVMEventListener = forNameOrNull("jdk.vm.ci.hotspot.HotSpotVMEventListener"); hotSpotGraalCompilerFactoryOptions = forNameOrNull("com.oracle.graal.hotspot.HotSpotGraalCompilerFactory$Options"); } @@ -166,7 +166,7 @@ return true; } - if (CompilerFactory.class.isAssignableFrom(cls)) { + if (JVMCICompilerFactory.class.isAssignableFrom(cls)) { // The compiler factories have to be loaded and instantiated by the JVMCI. return true; }
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -37,6 +37,7 @@ import com.oracle.graal.phases.common.DeadCodeEliminationPhase; import com.oracle.graal.phases.tiers.PhaseContext; import com.oracle.graal.truffle.DefaultTruffleCompiler; +import com.oracle.graal.truffle.GraalTruffleRuntime; import com.oracle.graal.truffle.OptimizedCallTarget; import com.oracle.graal.truffle.TruffleCompiler; import com.oracle.graal.truffle.TruffleDebugJavaMethod; @@ -47,9 +48,8 @@ private final TruffleCompiler truffleCompiler; public PartialEvaluationTest() { - // Make sure Truffle runtime is initialized. - Assert.assertTrue(Truffle.getRuntime() != null); - this.truffleCompiler = DefaultTruffleCompiler.create(); + GraalTruffleRuntime runtime = (GraalTruffleRuntime) Truffle.getRuntime(); + this.truffleCompiler = DefaultTruffleCompiler.create(runtime); DebugEnvironment.initialize(System.out); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/SafepointRethrowDeoptPETest.java Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2015, 2015, 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.test; + +import java.util.concurrent.CountDownLatch; + +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Test; + +import com.oracle.graal.compiler.common.GraalOptions; +import com.oracle.graal.truffle.OptimizedCallTarget; +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.nodes.Node; +import com.oracle.truffle.api.nodes.RootNode; + +public class SafepointRethrowDeoptPETest extends PartialEvaluationTest { + + static final Object RETURN_VALUE = "1 2 3"; + static final RuntimeException BREAK_EX = new RuntimeException(); + static final RuntimeException CONTINUE_EX = new RuntimeException(); + static volatile int terminate; + static volatile int entered; + + public static class Test0RootNode extends RootNode { + public Test0RootNode() { + super(MockLanguage.class, null, null); + } + + @Override + public Object execute(VirtualFrame frame) { + entered = 1; + for (;;) { + try { + if (terminate != 0) { + throw BREAK_EX; + } else { + throw CONTINUE_EX; + } + } catch (RuntimeException e) { + if (e == BREAK_EX) { + break; + } else if (e == CONTINUE_EX) { + continue; + } + throw e; + } + } + return RETURN_VALUE; + } + } + + public abstract static class TestNode extends Node { + public abstract void executeVoid(); + } + + public static class ThrowNode extends TestNode { + private final RuntimeException exception; + + public ThrowNode(RuntimeException exception) { + this.exception = exception; + } + + @Override + public void executeVoid() { + throw exception; + } + } + + public static class Test1RootNode extends RootNode { + @Child private ThrowNode throwBreak = new ThrowNode(BREAK_EX); + @Child private ThrowNode throwContinue = new ThrowNode(CONTINUE_EX); + + public Test1RootNode() { + super(MockLanguage.class, null, null); + } + + @Override + public Object execute(VirtualFrame frame) { + entered = 1; + for (;;) { + try { + if (terminate != 0) { + throwBreak.executeVoid(); + } else { + throwContinue.executeVoid(); + } + } catch (RuntimeException e) { + if (e == BREAK_EX) { + break; + } else if (e == CONTINUE_EX) { + continue; + } + throw e; + } + } + return RETURN_VALUE; + } + } + + public static class BreakOrContinueNode extends TestNode { + @Child private ThrowNode throwBreak = new ThrowNode(BREAK_EX); + @Child private ThrowNode throwContinue = new ThrowNode(CONTINUE_EX); + + @Override + public void executeVoid() { + if (terminate != 0) { + throwBreak.executeVoid(); + } else { + throwContinue.executeVoid(); + } + } + } + + public static class ExceptionTargetNode extends TestNode { + @Child private TestNode body; + private final RuntimeException exception; + + public ExceptionTargetNode(RuntimeException exception, TestNode body) { + this.body = body; + this.exception = exception; + } + + @Override + public void executeVoid() { + try { + body.executeVoid(); + } catch (RuntimeException e) { + if (e != exception) { + throw e; + } + } + } + } + + public static class LoopNode extends TestNode { + @Child private TestNode body; + + public LoopNode(TestNode body) { + this.body = body; + } + + @Override + public void executeVoid() { + for (;;) { + body.executeVoid(); + } + } + } + + public static class Test2RootNode extends RootNode { + @Child private TestNode body; + + public Test2RootNode() { + super(MockLanguage.class, null, null); + this.body = new ExceptionTargetNode(BREAK_EX, new LoopNode(new ExceptionTargetNode(CONTINUE_EX, new BreakOrContinueNode()))); + } + + @Override + public Object execute(VirtualFrame frame) { + entered = 1; + body.executeVoid(); + return RETURN_VALUE; + } + } + + @Test + public void test() { + Assume.assumeTrue(GraalOptions.GenLoopSafepoints.getValue()); + synchronized (SafepointRethrowDeoptPETest.class) { // safeguard static fields + testInner(new Test0RootNode()); + testInner(new Test1RootNode()); + testInner(new Test2RootNode()); + } + } + + private void testInner(RootNode rootNode) { + terminate = 1; // executed 3 times + OptimizedCallTarget compiledMethod = compileHelper(rootNode.getClass().getSimpleName(), rootNode, new Object[0]); + + terminate = 0; + entered = 0; + CountDownLatch cdl = new CountDownLatch(1); + Thread t1 = new Thread(() -> { + try { + cdl.await(); + while (entered == 0) { + /* spin */ + } + /* Thread.sleep(100); */ + compiledMethod.invalidate(); + } catch (InterruptedException e) { + Assert.fail("interrupted"); + } + terminate = 1; + }); + Thread t2 = new Thread(() -> { + cdl.countDown(); + Object result = compiledMethod.call(); + Assert.assertEquals(RETURN_VALUE, result); + }); + + t1.start(); + t2.start(); + try { + t1.join(); + t2.join(); + } catch (InterruptedException e) { + Assert.fail("interrupted"); + } + } +}
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/SimplePartialEvaluationTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/SimplePartialEvaluationTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,8 +22,8 @@ */ package com.oracle.graal.truffle.test; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.SourceStackTrace; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.SourceStackTrace; import org.junit.After; import org.junit.Assert;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/TruffleEnsureVirtualizedTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/TruffleEnsureVirtualizedTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.test; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; import org.junit.After; import org.junit.Assert;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/TruffleRuntimeTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/TruffleRuntimeTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -27,7 +27,7 @@ import org.junit.Test; -import com.oracle.graal.api.runtime.Graal; +import com.oracle.graal.api.test.Graal; import com.oracle.graal.runtime.RuntimeProvider; import com.oracle.truffle.api.Truffle; import com.oracle.truffle.api.TruffleRuntime;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/builtins/SLGetOptionBuiltin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/builtins/SLGetOptionBuiltin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.test.builtins; -import jdk.internal.jvmci.options.OptionDescriptor; +import jdk.vm.ci.options.OptionDescriptor; import com.oracle.graal.truffle.TruffleCompilerOptions; import com.oracle.graal.truffle.TruffleCompilerOptions_OptionDescriptors;
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/builtins/SLSetOptionBuiltin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/builtins/SLSetOptionBuiltin.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.test.builtins; -import jdk.internal.jvmci.options.OptionDescriptor; +import jdk.vm.ci.options.OptionDescriptor; import com.oracle.graal.truffle.TruffleCompilerOptions; import com.oracle.graal.truffle.TruffleCompilerOptions_OptionDescriptors;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/DefaultLoopNodeFactory.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/DefaultLoopNodeFactory.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle; -import jdk.internal.jvmci.service.ServiceProvider; +import jdk.vm.ci.service.ServiceProvider; import com.oracle.truffle.api.nodes.LoopNode; import com.oracle.truffle.api.nodes.RepeatingNode;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/DefaultTruffleCompiler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/DefaultTruffleCompiler.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -25,7 +25,6 @@ import java.util.ListIterator; import com.oracle.graal.api.replacements.SnippetReflectionProvider; -import com.oracle.graal.api.runtime.Graal; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.graphbuilderconf.GraphBuilderConfiguration.Plugins; import com.oracle.graal.java.GraphBuilderPhase; @@ -38,22 +37,23 @@ public final class DefaultTruffleCompiler extends TruffleCompiler { - public static TruffleCompiler create() { - Backend backend = Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend(); + public static TruffleCompiler create(GraalTruffleRuntime runtime) { + Backend backend = runtime.getRequiredGraalCapability(RuntimeProvider.class).getHostBackend(); Suites suites = backend.getSuites().getDefaultSuites(); LIRSuites lirSuites = backend.getSuites().getDefaultLIRSuites(); GraphBuilderPhase phase = (GraphBuilderPhase) backend.getSuites().getDefaultGraphBuilderSuite().findPhase(GraphBuilderPhase.class).previous(); Plugins plugins = phase.getGraphBuilderConfig().getPlugins(); - return new DefaultTruffleCompiler(plugins, suites, lirSuites, backend); + SnippetReflectionProvider snippetReflection = runtime.getRequiredGraalCapability(SnippetReflectionProvider.class); + return new DefaultTruffleCompiler(plugins, suites, lirSuites, backend, snippetReflection); } - private DefaultTruffleCompiler(Plugins plugins, Suites suites, LIRSuites lirSuites, Backend backend) { - super(plugins, suites, lirSuites, backend); + private DefaultTruffleCompiler(Plugins plugins, Suites suites, LIRSuites lirSuites, Backend backend, SnippetReflectionProvider snippetReflection) { + super(plugins, suites, lirSuites, backend, snippetReflection); } @Override protected PartialEvaluator createPartialEvaluator() { - return new PartialEvaluator(providers, config, Graal.getRequiredCapability(SnippetReflectionProvider.class), backend.getTarget().arch); + return new PartialEvaluator(providers, config, snippetReflection, backend.getTarget().arch); } @Override
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithBoxing.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithBoxing.java Fri Oct 30 20:56:28 2015 +0100 @@ -234,7 +234,7 @@ } @SuppressWarnings({"unchecked", "unused"}) - static <T> T unsafeCast(Object value, Class<T> type, boolean condition, boolean nonNull) { + private static <T> T unsafeCast(Object value, Class<T> type, boolean condition, boolean nonNull) { return (T) value; } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/FrameWithoutBoxing.java Fri Oct 30 20:56:28 2015 +0100 @@ -388,57 +388,57 @@ } @SuppressWarnings({"unchecked", "unused"}) - static <T> T unsafeCast(Object value, Class<T> type, boolean condition, boolean nonNull) { + private static <T> T unsafeCast(Object value, Class<T> type, boolean condition, boolean nonNull) { return (T) value; } @SuppressWarnings("unused") - static int unsafeGetInt(Object receiver, long offset, boolean condition, Object locationIdentity) { + private static int unsafeGetInt(Object receiver, long offset, boolean condition, Object locationIdentity) { return UNSAFE.getInt(receiver, offset); } @SuppressWarnings("unused") - static long unsafeGetLong(Object receiver, long offset, boolean condition, Object locationIdentity) { + private static long unsafeGetLong(Object receiver, long offset, boolean condition, Object locationIdentity) { return UNSAFE.getLong(receiver, offset); } @SuppressWarnings("unused") - static float unsafeGetFloat(Object receiver, long offset, boolean condition, Object locationIdentity) { + private static float unsafeGetFloat(Object receiver, long offset, boolean condition, Object locationIdentity) { return UNSAFE.getFloat(receiver, offset); } @SuppressWarnings("unused") - static double unsafeGetDouble(Object receiver, long offset, boolean condition, Object locationIdentity) { + private static double unsafeGetDouble(Object receiver, long offset, boolean condition, Object locationIdentity) { return UNSAFE.getDouble(receiver, offset); } @SuppressWarnings("unused") - static Object unsafeGetObject(Object receiver, long offset, boolean condition, Object locationIdentity) { + private static Object unsafeGetObject(Object receiver, long offset, boolean condition, Object locationIdentity) { return UNSAFE.getObject(receiver, offset); } @SuppressWarnings("unused") - static void unsafePutInt(Object receiver, long offset, int value, Object locationIdentity) { + private static void unsafePutInt(Object receiver, long offset, int value, Object locationIdentity) { UNSAFE.putInt(receiver, offset, value); } @SuppressWarnings("unused") - static void unsafePutLong(Object receiver, long offset, long value, Object locationIdentity) { + private static void unsafePutLong(Object receiver, long offset, long value, Object locationIdentity) { UNSAFE.putLong(receiver, offset, value); } @SuppressWarnings("unused") - static void unsafePutFloat(Object receiver, long offset, float value, Object locationIdentity) { + private static void unsafePutFloat(Object receiver, long offset, float value, Object locationIdentity) { UNSAFE.putFloat(receiver, offset, value); } @SuppressWarnings("unused") - static void unsafePutDouble(Object receiver, long offset, double value, Object locationIdentity) { + private static void unsafePutDouble(Object receiver, long offset, double value, Object locationIdentity) { UNSAFE.putDouble(receiver, offset, value); } @SuppressWarnings("unused") - static void unsafePutObject(Object receiver, long offset, Object value, Object locationIdentity) { + private static void unsafePutObject(Object receiver, long offset, Object value, Object locationIdentity) { UNSAFE.putObject(receiver, offset, value); }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalFrameInstance.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalFrameInstance.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,8 +24,8 @@ import java.lang.reflect.Method; -import jdk.internal.jvmci.code.stack.InspectedFrame; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.code.stack.InspectedFrame; +import jdk.vm.ci.common.JVMCIError; import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleCompilationListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleCompilationListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.truffle.api.nodes.Node;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Fri Oct 30 20:56:28 2015 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2015, 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 @@ -30,15 +30,18 @@ import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; +import java.util.function.Supplier; -import jdk.internal.jvmci.code.CompilationResult; -import jdk.internal.jvmci.code.stack.InspectedFrame; -import jdk.internal.jvmci.code.stack.InspectedFrameVisitor; -import jdk.internal.jvmci.code.stack.StackIntrospection; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.stack.InspectedFrame; +import jdk.vm.ci.code.stack.InspectedFrameVisitor; +import jdk.vm.ci.code.stack.StackIntrospection; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.service.Services; +import com.oracle.graal.api.runtime.GraalRuntime; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.debug.TTY; @@ -50,7 +53,6 @@ import com.oracle.graal.truffle.debug.TraceCompilationListener; import com.oracle.graal.truffle.debug.TraceCompilationPolymorphismListener; import com.oracle.graal.truffle.debug.TraceInliningListener; -import com.oracle.graal.truffle.debug.TracePerformanceWarningsListener; import com.oracle.graal.truffle.debug.TraceSplittingListener; import com.oracle.truffle.api.Assumption; import com.oracle.truffle.api.CallTarget; @@ -82,12 +84,22 @@ protected LoopNodeFactory loopNodeFactory; protected CallMethods callMethods; - public GraalTruffleRuntime() { - Runtime.getRuntime().addShutdownHook(new Thread(this::shutdown)); + private final Supplier<GraalRuntime> graalRuntime; + + public GraalTruffleRuntime(Supplier<GraalRuntime> graalRuntime) { + this.graalRuntime = graalRuntime; } public abstract TruffleCompiler getTruffleCompiler(); + public <T> T getRequiredGraalCapability(Class<T> clazz) { + T ret = graalRuntime.get().getCapability(clazz); + if (ret == null) { + throw new JVMCIError("The VM does not expose the required Graal capability %s.", clazz.getName()); + } + return ret; + } + private static <T extends PrioritizedServiceProvider> T loadPrioritizedServiceProvider(Class<T> clazz) { Iterable<T> providers = Services.load(clazz); T bestFactory = null; @@ -113,14 +125,18 @@ TraceCompilationListener.install(this); TraceCompilationPolymorphismListener.install(this); TraceCompilationCallTreeListener.install(this); - TracePerformanceWarningsListener.install(this); TraceInliningListener.install(this); TraceSplittingListener.install(this); PrintCallTargetProfiling.install(this); CompilationStatisticsListener.install(this); + installShutdownHooks(); compilationNotify.notifyStartup(this); } + protected void installShutdownHooks() { + Runtime.getRuntime().addShutdownHook(new Thread(this::shutdown)); + } + protected void lookupCallMethods(MetaAccessProvider metaAccess) { callMethods = CallMethods.lookup(metaAccess); } @@ -331,47 +347,69 @@ private final class DispatchTruffleCompilationListener implements GraalTruffleCompilationListener { public void notifyCompilationQueued(OptimizedCallTarget target) { - compilationListeners.forEach(l -> l.notifyCompilationQueued(target)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationQueued(target); + } } public void notifyCompilationInvalidated(OptimizedCallTarget target, Object source, CharSequence reason) { - compilationListeners.forEach(l -> l.notifyCompilationInvalidated(target, source, reason)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationInvalidated(target, source, reason); + } } public void notifyCompilationDequeued(OptimizedCallTarget target, Object source, CharSequence reason) { - compilationListeners.forEach(l -> l.notifyCompilationDequeued(target, source, reason)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationDequeued(target, source, reason); + } } public void notifyCompilationFailed(OptimizedCallTarget target, StructuredGraph graph, Throwable t) { - compilationListeners.forEach(l -> l.notifyCompilationFailed(target, graph, t)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationFailed(target, graph, t); + } } public void notifyCompilationSplit(OptimizedDirectCallNode callNode) { - compilationListeners.forEach(l -> l.notifyCompilationSplit(callNode)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationSplit(callNode); + } } public void notifyCompilationGraalTierFinished(OptimizedCallTarget target, StructuredGraph graph) { - compilationListeners.forEach(l -> l.notifyCompilationGraalTierFinished(target, graph)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationGraalTierFinished(target, graph); + } } public void notifyCompilationSuccess(OptimizedCallTarget target, StructuredGraph graph, CompilationResult result) { - compilationListeners.forEach(l -> l.notifyCompilationSuccess(target, graph, result)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationSuccess(target, graph, result); + } } public void notifyCompilationStarted(OptimizedCallTarget target) { - compilationListeners.forEach(l -> l.notifyCompilationStarted(target)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationStarted(target); + } } public void notifyCompilationTruffleTierFinished(OptimizedCallTarget target, StructuredGraph graph) { - compilationListeners.forEach(l -> l.notifyCompilationTruffleTierFinished(target, graph)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyCompilationTruffleTierFinished(target, graph); + } } public void notifyShutdown(GraalTruffleRuntime runtime) { - compilationListeners.forEach(l -> l.notifyShutdown(runtime)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyShutdown(runtime); + } } public void notifyStartup(GraalTruffleRuntime runtime) { - compilationListeners.forEach(l -> l.notifyStartup(runtime)); + for (GraalTruffleCompilationListener l : compilationListeners) { + l.notifyStartup(runtime); + } } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedAssumption.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedAssumption.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,7 +29,7 @@ import java.util.Arrays; import java.util.stream.Collectors; -import jdk.internal.jvmci.code.InstalledCode; +import jdk.vm.ci.code.InstalledCode; import com.oracle.graal.debug.TTY; import com.oracle.truffle.api.CompilerDirectives;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Oct 30 20:56:28 2015 +0100 @@ -44,10 +44,10 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; -import jdk.internal.jvmci.code.BailoutException; -import jdk.internal.jvmci.code.InstalledCode; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.SpeculationLog; +import jdk.vm.ci.code.BailoutException; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.SpeculationLog; import com.oracle.graal.truffle.debug.AbstractDebugCompilationListener; import com.oracle.truffle.api.Assumption; @@ -55,7 +55,6 @@ import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerOptions; -import com.oracle.truffle.api.ExecutionContext; import com.oracle.truffle.api.LoopCountReceiver; import com.oracle.truffle.api.OptimizationFailedException; import com.oracle.truffle.api.ReplaceObserver; @@ -199,7 +198,7 @@ Object result = doInvoke(args); Class<?> klass = profiledReturnType; if (klass != null && CompilerDirectives.inCompiledCode() && profiledReturnTypeAssumption.isValid()) { - result = FrameWithoutBoxing.unsafeCast(result, klass, true, true); + result = unsafeCast(result, klass, true, true); } return result; } catch (Throwable t) { @@ -300,7 +299,7 @@ public final Object callRoot(Object[] originalArguments) { Object[] args = originalArguments; if (this.profiledArgumentTypesAssumption != null && CompilerDirectives.inCompiledCode() && profiledArgumentTypesAssumption.isValid()) { - args = FrameWithoutBoxing.unsafeCast(castArrayFixedLength(args, profiledArgumentTypes.length), Object[].class, true, true); + args = unsafeCast(castArrayFixedLength(args, profiledArgumentTypes.length), Object[].class, true, true); if (TruffleArgumentTypeSpeculation.getValue()) { args = castArguments(args); } @@ -464,7 +463,7 @@ private Object[] castArguments(Object[] originalArguments) { Object[] castArguments = new Object[profiledArgumentTypes.length]; for (int i = 0; i < profiledArgumentTypes.length; i++) { - castArguments[i] = profiledArgumentTypes[i] != null ? FrameWithoutBoxing.unsafeCast(originalArguments[i], profiledArgumentTypes[i], true, true) : originalArguments[i]; + castArguments[i] = profiledArgumentTypes[i] != null ? unsafeCast(originalArguments[i], profiledArgumentTypes[i], true, true) : originalArguments[i]; } return castArguments; } @@ -572,17 +571,19 @@ } private CompilerOptions getCompilerOptions() { - final ExecutionContext context = rootNode.getExecutionContext(); + final CompilerOptions options = rootNode.getCompilerOptions(); + if (options != null) { + return options; + } + return DefaultCompilerOptions.INSTANCE; + } - if (context == null) { - return DefaultCompilerOptions.INSTANCE; - } - - return context.getCompilerOptions(); + @SuppressWarnings({"unchecked", "unused"}) + private static <T> T unsafeCast(Object value, Class<T> type, boolean condition, boolean nonNull) { + return (T) value; } private static final class NonTrivialNodeCountVisitor implements NodeVisitor { - public int nodeCount; public boolean visit(Node node) { @@ -591,7 +592,5 @@ } return true; } - } - }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedOSRLoopNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedOSRLoopNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -35,6 +35,7 @@ public final class OptimizedOSRLoopNode extends LoopNode implements ReplaceObserver { private int interpreterLoopCount; + private int lastLoopCount; private OptimizedCallTarget compiledTarget; @Child private RepeatingNode repeatableNode; @@ -105,6 +106,7 @@ return false; } else if (target.isValid()) { Object result = target.callDirect(new Object[]{frame}); + iterations = lastLoopCount; if (result == Boolean.TRUE) { // loop is done. No further repetitions necessary. return true; @@ -157,6 +159,7 @@ private void reportLoopCount(int reportIterations) { if (reportIterations != 0) { + lastLoopCount = reportIterations; interpreterLoopCount += reportIterations; getRootNode().reportLoopCount(reportIterations); }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Fri Oct 30 20:56:28 2015 +0100 @@ -33,17 +33,17 @@ import java.util.LinkedHashMap; import java.util.Map; -import jdk.internal.jvmci.code.Architecture; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.StableOptionValue; -import jdk.internal.jvmci.service.Services; +import jdk.vm.ci.code.Architecture; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.StableOptionValue; +import jdk.vm.ci.service.Services; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.type.Stamp; @@ -82,8 +82,8 @@ import com.oracle.graal.replacements.InlineDuringParsingPlugin; import com.oracle.graal.replacements.PEGraphDecoder; import com.oracle.graal.replacements.ReplacementsImpl; +import com.oracle.graal.truffle.debug.AbstractDebugCompilationListener; import com.oracle.graal.truffle.debug.HistogramInlineInvokePlugin; -import com.oracle.graal.truffle.debug.TracePerformanceWarningsListener; import com.oracle.graal.truffle.nodes.AssumptionValidAssumption; import com.oracle.graal.truffle.nodes.asserts.NeverPartOfCompilationNode; import com.oracle.graal.truffle.nodes.frame.MaterializeFrameNode; @@ -159,7 +159,7 @@ @SuppressWarnings("try") public StructuredGraph createGraph(final OptimizedCallTarget callTarget, AllowAssumptions allowAssumptions) { try (Scope c = Debug.scope("TruffleTree")) { - Debug.dump(callTarget, "truffle tree"); + Debug.dump(callTarget, callTarget.toString()); } catch (Throwable e) { throw Debug.handle(e); } @@ -473,8 +473,11 @@ private static void reportPerformanceWarnings(OptimizedCallTarget target, StructuredGraph graph) { ArrayList<ValueNode> warnings = new ArrayList<>(); for (MethodCallTargetNode call : graph.getNodes(MethodCallTargetNode.TYPE)) { + if (call.targetMethod().isNative()) { + continue; // native methods cannot be inlined + } if (call.targetMethod().getAnnotation(TruffleBoundary.class) == null && call.targetMethod().getAnnotation(TruffleCallBoundary.class) == null) { - TracePerformanceWarningsListener.logPerformanceWarning(target, String.format("not inlined %s call to %s (%s)", call.invokeKind(), call.targetMethod(), call), null); + logPerformanceWarning(target, String.format("not inlined %s call to %s (%s)", call.invokeKind(), call.targetMethod(), call), null); warnings.add(call); } } @@ -489,7 +492,7 @@ } } for (Map.Entry<String, ArrayList<ValueNode>> entry : groupedByType.entrySet()) { - TracePerformanceWarningsListener.logPerformanceWarning(target, String.format("non-leaf type checkcast: %s", entry.getKey()), Collections.singletonMap("Nodes", entry.getValue())); + logPerformanceInfo(target, String.format("non-leaf type checkcast: %s", entry.getKey()), Collections.singletonMap("Nodes", entry.getValue())); } groupedByType = new HashMap<>(); @@ -501,7 +504,7 @@ } } for (Map.Entry<String, ArrayList<ValueNode>> entry : groupedByType.entrySet()) { - TracePerformanceWarningsListener.logPerformanceWarning(target, String.format("non-leaf type instanceof: %s", entry.getKey()), Collections.singletonMap("Nodes", entry.getValue())); + logPerformanceInfo(target, String.format("non-leaf type instanceof: %s", entry.getKey()), Collections.singletonMap("Nodes", entry.getValue())); } if (Debug.isEnabled() && !warnings.isEmpty()) { @@ -549,7 +552,7 @@ if (TruffleCompilerOptions.TraceTrufflePerformanceWarnings.getValue()) { Map<String, Object> properties = new LinkedHashMap<>(); properties.put("callNode", callNode); - TracePerformanceWarningsListener.logPerformanceWarning(target, "A direct call within the Truffle AST is not reachable anymore. Call node could not be inlined.", properties); + logPerformanceWarning(target, "A direct call within the Truffle AST is not reachable anymore. Call node could not be inlined.", properties); } } @@ -558,10 +561,22 @@ Map<String, Object> properties = new LinkedHashMap<>(); properties.put("originalTarget", decision.getTarget()); properties.put("callNode", callNode); - TracePerformanceWarningsListener.logPerformanceWarning(target, String.format("CallTarget changed during compilation. Call node could not be inlined."), properties); + logPerformanceWarning(target, "CallTarget changed during compilation. Call node could not be inlined.", properties); } return null; } return decision; } + + private static void logPerformanceWarning(OptimizedCallTarget target, String details, Map<String, Object> properties) { + logPerformanceWarning(target, "perf warn", details, properties); + } + + private static void logPerformanceInfo(OptimizedCallTarget target, String details, Map<String, Object> properties) { + logPerformanceWarning(target, "perf info", details, properties); + } + + private static void logPerformanceWarning(OptimizedCallTarget target, String msg, String details, Map<String, Object> properties) { + AbstractDebugCompilationListener.log(target, 0, msg, String.format("%-60s|%s", target, details), properties); + } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/ReadOnlyFrame.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/ReadOnlyFrame.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.frame.Frame;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompiler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompiler.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,24 +24,25 @@ import static com.oracle.graal.compiler.GraalCompiler.compileGraph; import static com.oracle.graal.compiler.GraalCompiler.getProfilingInfo; -import static jdk.internal.jvmci.code.CodeUtil.getCallingConvention; +import static jdk.vm.ci.code.CodeUtil.getCallingConvention; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import jdk.internal.jvmci.code.CallingConvention; -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.meta.Assumptions.Assumption; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.SpeculationLog; +import jdk.vm.ci.code.CallingConvention; +import jdk.vm.ci.code.CallingConvention.Type; +import jdk.vm.ci.code.CodeCacheProvider; +import jdk.vm.ci.code.CompilationResult; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.meta.Assumptions.Assumption; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.SpeculationLog; +import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.target.Backend; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.Debug.Scope; @@ -76,6 +77,7 @@ protected final LIRSuites lirSuites; protected final PartialEvaluator partialEvaluator; protected final Backend backend; + protected final SnippetReflectionProvider snippetReflection; protected final GraalTruffleCompilationListener compilationNotify; // @formatter:off @@ -93,10 +95,11 @@ public static final OptimisticOptimizations Optimizations = OptimisticOptimizations.ALL.remove(OptimisticOptimizations.Optimization.UseExceptionProbability, OptimisticOptimizations.Optimization.RemoveNeverExecutedCode, OptimisticOptimizations.Optimization.UseTypeCheckedInlining, OptimisticOptimizations.Optimization.UseTypeCheckHints); - public TruffleCompiler(Plugins plugins, Suites suites, LIRSuites lirSuites, Backend backend) { + public TruffleCompiler(Plugins plugins, Suites suites, LIRSuites lirSuites, Backend backend, SnippetReflectionProvider snippetReflection) { GraalTruffleRuntime graalTruffleRuntime = ((GraalTruffleRuntime) Truffle.getRuntime()); this.compilationNotify = graalTruffleRuntime.getCompilationNotify(); this.backend = backend; + this.snippetReflection = snippetReflection; Providers backendProviders = backend.getProviders(); ConstantReflectionProvider constantReflection = new TruffleConstantReflectionProvider(backendProviders.getConstantReflection(), backendProviders.getMetaAccess()); this.providers = backendProviders.copyWith(constantReflection); @@ -192,12 +195,8 @@ compilationNotify.notifyCompilationGraalTierFinished((OptimizedCallTarget) predefinedInstalledCode, graph); - if (graph.isInlinedMethodRecordingEnabled()) { - result.setMethods(graph.method(), graph.getInlinedMethods()); - result.setBytecodeSize(graph.getBytecodeSize()); - } else { - assert result.getMethods() == null; - } + result.setMethods(graph.method(), graph.getInlinedMethods()); + result.setBytecodeSize(graph.getBytecodeSize()); List<AssumptionValidAssumption> validAssumptions = new ArrayList<>(); Set<Assumption> newAssumptions = new HashSet<>();
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,10 +22,10 @@ */ package com.oracle.graal.truffle; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; -import jdk.internal.jvmci.options.StableOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; +import jdk.vm.ci.options.StableOptionValue; /** * Options for the Truffle compiler.
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleConstantReflectionProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleConstantReflectionProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,17 +22,17 @@ */ package com.oracle.graal.truffle; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaField; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MemoryAccessProvider; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.MethodHandleAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaField; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MemoryAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.MethodHandleAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.nodes.Node.Child; @@ -120,10 +120,6 @@ return graalConstantReflection.forString(value); } - public JavaConstant forObject(Object value) { - return graalConstantReflection.forObject(value); - } - public ResolvedJavaType asJavaType(Constant constant) { return graalConstantReflection.asJavaType(constant); }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleDebugJavaMethod.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleDebugJavaMethod.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.truffle; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaMethod; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.ResolvedJavaType; -import jdk.internal.jvmci.meta.Signature; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaMethod; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.Signature; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.JavaMethodContext;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleExpansionLogger.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleExpansionLogger.java Fri Oct 30 20:56:28 2015 +0100 @@ -30,8 +30,8 @@ import java.util.Map; import java.util.Map.Entry; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeMap; @@ -192,7 +192,7 @@ return String.format("(%s)", e.getFileName()); } } else { - return String.format("(Unknown Source)"); + return "(Unknown Source)"; } } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleTreeDumpHandler.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleTreeDumpHandler.java Fri Oct 30 20:56:28 2015 +0100 @@ -23,33 +23,89 @@ package com.oracle.graal.truffle; import com.oracle.graal.debug.DebugDumpHandler; +import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.RootCallTarget; +import com.oracle.truffle.api.nodes.DirectCallNode; import com.oracle.truffle.api.nodes.GraphPrintVisitor; +import com.oracle.truffle.api.nodes.GraphPrintVisitor.GraphPrintAdapter; +import com.oracle.truffle.api.nodes.GraphPrintVisitor.GraphPrintHandler; +import com.oracle.truffle.api.nodes.NodeUtil; +import com.oracle.truffle.api.source.SourceSection; public class TruffleTreeDumpHandler implements DebugDumpHandler { @Override public void dump(Object object, final String message) { if (object instanceof RootCallTarget) { - RootCallTarget callTarget = (RootCallTarget) object; - dumpRootCallTarget(message, callTarget); + dumpRootCallTarget(message, (RootCallTarget) object); } } private static void dumpRootCallTarget(final String message, RootCallTarget callTarget) { if (callTarget.getRootNode() != null) { - final GraphPrintVisitor visitor = new GraphPrintVisitor(); + final GraphPrintVisitor printer = new GraphPrintVisitor(); - final OptimizedCallTarget oct = (OptimizedCallTarget) callTarget; + printer.beginGroup(callTarget.toString()); + printer.beginGraph(message).visit(callTarget.getRootNode()).endGraph(); + if (callTarget instanceof OptimizedCallTarget) { + TruffleInlining inlining = new TruffleInlining((OptimizedCallTarget) callTarget, new DefaultInliningPolicy()); + if (inlining.countInlinedCalls() > 0) { + dumpInlinedTrees(printer, (OptimizedCallTarget) callTarget, inlining); + dumpInlinedCallGraph(printer, (OptimizedCallTarget) callTarget, inlining); + } + } + printer.endGroup(); - visitor.beginGroup(callTarget.toString()); - dumpFullTree(visitor, message, oct); - visitor.printToNetwork(false); + printer.printToNetwork(false); + } + } + + private static void dumpInlinedTrees(final GraphPrintVisitor printer, final OptimizedCallTarget callTarget, TruffleInlining inlining) { + for (DirectCallNode callNode : NodeUtil.findAllNodeInstances(callTarget.getRootNode(), DirectCallNode.class)) { + CallTarget inlinedCallTarget = callNode.getCurrentCallTarget(); + if (inlinedCallTarget instanceof OptimizedCallTarget && callNode instanceof OptimizedDirectCallNode) { + TruffleInliningDecision decision = inlining.findByCall((OptimizedDirectCallNode) callNode); + if (decision != null && decision.isInline()) { + printer.beginGroup(inlinedCallTarget.toString()); + printer.beginGraph(inlinedCallTarget.toString()).visit(((RootCallTarget) inlinedCallTarget).getRootNode()).endGraph(); + dumpInlinedTrees(printer, (OptimizedCallTarget) inlinedCallTarget, decision); + printer.endGroup(); + } + } } } - private static void dumpFullTree(final GraphPrintVisitor visitor, final String message, final OptimizedCallTarget oct) { - visitor.beginGraph(message).visit(oct.getRootNode()); + private static void dumpInlinedCallGraph(final GraphPrintVisitor printer, final OptimizedCallTarget rootCallTarget, TruffleInlining inlining) { + class InliningGraphPrintHandler implements GraphPrintHandler { + private final TruffleInlining inlining; + + public InliningGraphPrintHandler(TruffleInlining inlining) { + this.inlining = inlining; + } + + public void visit(Object node, GraphPrintAdapter g) { + if (g.visited(node)) { + return; + } + g.createElementForNode(node); + g.setNodeProperty(node, "name", node.toString()); + for (DirectCallNode callNode : NodeUtil.findAllNodeInstances(((RootCallTarget) node).getRootNode(), DirectCallNode.class)) { + CallTarget inlinedCallTarget = callNode.getCurrentCallTarget(); + if (inlinedCallTarget instanceof OptimizedCallTarget && callNode instanceof OptimizedDirectCallNode) { + TruffleInliningDecision decision = inlining.findByCall((OptimizedDirectCallNode) callNode); + if (decision != null && decision.isInline()) { + g.visit(inlinedCallTarget, new InliningGraphPrintHandler(decision)); + SourceSection sourceSection = callNode.getEncapsulatingSourceSection(); + g.connectNodes(node, inlinedCallTarget, sourceSection != null ? sourceSection.toString() : null); + } + } + } + } + } + + printer.beginGraph("inlined call graph"); + printer.visit(rootCallTarget, new InliningGraphPrintHandler(inlining)); + printer.endGraph(); } public void close() {
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/AbstractDebugCompilationListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/AbstractDebugCompilationListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,7 +24,7 @@ import java.util.Map; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.truffle.GraalTruffleCompilationListener;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/CompilationStatisticsListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/CompilationStatisticsListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -36,7 +36,7 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.truffle.GraalTruffleRuntime;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/HistogramInlineInvokePlugin.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/HistogramInlineInvokePlugin.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.graph.Node; import com.oracle.graal.graphbuilderconf.InlineInvokePlugin;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationASTListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationASTListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.truffle.GraalTruffleRuntime;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationCallTreeListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationCallTreeListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.truffle.GraalTruffleRuntime;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationFailureListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationFailureListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,12 +22,12 @@ */ package com.oracle.graal.truffle.debug; -import static jdk.internal.jvmci.compiler.Compiler.PrintBailout; +import static com.oracle.graal.compiler.GraalCompilerOptions.PrintBailout; import java.util.LinkedHashMap; import java.util.Map; -import jdk.internal.jvmci.code.BailoutException; +import jdk.vm.ci.code.BailoutException; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.truffle.GraalTruffleRuntime;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -28,7 +28,7 @@ import java.util.LinkedHashMap; import java.util.Map; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.truffle.GraalTruffleRuntime;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationPolymorphismListener.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TraceCompilationPolymorphismListener.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.LinkedHashMap; import java.util.Map; -import jdk.internal.jvmci.code.CompilationResult; +import jdk.vm.ci.code.CompilationResult; import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.truffle.GraalTruffleRuntime;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/debug/TracePerformanceWarningsListener.java Fri Oct 30 20:55:32 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2014, 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.debug; - -import static com.oracle.graal.truffle.TruffleCompilerOptions.TraceTrufflePerformanceWarnings; - -import java.util.Map; - -import com.oracle.graal.truffle.GraalTruffleRuntime; -import com.oracle.graal.truffle.OptimizedCallTarget; - -public final class TracePerformanceWarningsListener extends AbstractDebugCompilationListener { - - private TracePerformanceWarningsListener() { - } - - public static void install(GraalTruffleRuntime runtime) { - if (isEnabled()) { - runtime.addCompilationListener(new TracePerformanceWarningsListener()); - } - } - - public static boolean isEnabled() { - return TraceTrufflePerformanceWarnings.getValue(); - } - - public static void logPerformanceWarning(OptimizedCallTarget target, String details, Map<String, Object> properties) { - log(target, 0, "perf warn", String.format("%-60s|%s", target, details), properties); - } - -}
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionValidAssumption.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionValidAssumption.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.nodes; -import jdk.internal.jvmci.meta.Assumptions; +import jdk.vm.ci.meta.Assumptions; import com.oracle.graal.truffle.OptimizedAssumption;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/IsCompilationConstantNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/IsCompilationConstantNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.nodes; -import jdk.internal.jvmci.meta.JavaKind; +import jdk.vm.ci.meta.JavaKind; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/ObjectLocationIdentity.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/ObjectLocationIdentity.java Fri Oct 30 20:56:28 2015 +0100 @@ -24,9 +24,9 @@ import java.util.Objects; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; /** * A {@link LocationIdentity} wrapping an object.
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,13 +26,12 @@ import java.util.Collections; import java.util.List; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.ResolvedJavaField; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.ResolvedJavaField; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.SnippetReflectionProvider; -import com.oracle.graal.api.runtime.Graal; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.IterableNodeType; @@ -62,7 +61,6 @@ import com.oracle.graal.truffle.nodes.AssumptionValidAssumption; import com.oracle.truffle.api.frame.FrameDescriptor; import com.oracle.truffle.api.frame.FrameSlotKind; -import com.oracle.truffle.api.frame.VirtualFrame; /** * Intrinsic node representing the call for creating a frame in the {@link OptimizedCallTarget} @@ -75,14 +73,22 @@ @Input ValueNode descriptor; @Input ValueNode arguments; - public NewFrameNode(Stamp stamp, ValueNode descriptor, ValueNode arguments) { + private final SnippetReflectionProvider snippetReflection; + + public NewFrameNode(SnippetReflectionProvider snippetReflection, Stamp stamp, ValueNode descriptor, ValueNode arguments) { super(TYPE, stamp); this.descriptor = descriptor; this.arguments = arguments; + + /* + * This class requires access to the objects encapsulated in Constants, and therefore breaks + * the compiler-VM separation of object constants. + */ + this.snippetReflection = snippetReflection; } - public NewFrameNode(ResolvedJavaType frameType, ValueNode descriptor, ValueNode arguments) { - this(StampFactory.exactNonNull(frameType), descriptor, arguments); + public NewFrameNode(SnippetReflectionProvider snippetReflection, ResolvedJavaType frameType, ValueNode descriptor, ValueNode arguments) { + this(snippetReflection, StampFactory.exactNonNull(frameType), descriptor, arguments); } public ValueNode getDescriptor() { @@ -93,17 +99,9 @@ return arguments; } - private static SnippetReflectionProvider getSnippetReflection() { - /* - * This class requires access to the objects encapsulated in Constants, and therefore breaks - * the compiler-VM separation of object constants. - */ - return Graal.getRequiredCapability(SnippetReflectionProvider.class); - } - private FrameDescriptor getConstantFrameDescriptor() { assert descriptor.isConstant() && !descriptor.isNullConstant(); - return getSnippetReflection().asObject(FrameDescriptor.class, descriptor.asJavaConstant()); + return snippetReflection.asObject(FrameDescriptor.class, descriptor.asJavaConstant()); } private int getFrameSize() { @@ -190,7 +188,7 @@ if (frameSize > 0) { FrameDescriptor frameDescriptor = getConstantFrameDescriptor(); - ConstantNode objectDefault = ConstantNode.forConstant(getSnippetReflection().forObject(frameDescriptor.getDefaultValue()), tool.getMetaAccessProvider(), graph()); + ConstantNode objectDefault = ConstantNode.forConstant(snippetReflection.forObject(frameDescriptor.getDefaultValue()), tool.getMetaAccessProvider(), graph()); ConstantNode tagDefault = ConstantNode.forByte((byte) 0, graph()); Arrays.fill(objectArrayEntryState, objectDefault); if (virtualFrameTagArray != null) { @@ -265,7 +263,4 @@ return this; } } - - @NodeIntrinsic - public static native VirtualFrame allocate(@ConstantNodeParameter Class<? extends VirtualFrame> frameType, FrameDescriptor descriptor, Object[] args); }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleGraphBuilderPlugins.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,16 +26,16 @@ import java.util.concurrent.Callable; -import jdk.internal.jvmci.meta.Constant; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.DeoptimizationAction; -import jdk.internal.jvmci.meta.DeoptimizationReason; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -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.vm.ci.meta.Constant; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.compiler.common.calc.Condition; @@ -98,7 +98,7 @@ registerExactMathPlugins(plugins); registerCompilerDirectivesPlugins(plugins, canDelayIntrinsification); registerCompilerAssertsPlugins(plugins, canDelayIntrinsification); - registerOptimizedCallTargetPlugins(metaAccess, plugins); + registerOptimizedCallTargetPlugins(metaAccess, plugins, snippetReflection, canDelayIntrinsification); if (TruffleCompilerOptions.TruffleUseFrameWithoutBoxing.getValue()) { registerFrameWithoutBoxingPlugins(plugins, canDelayIntrinsification); @@ -112,7 +112,7 @@ Registration r = new Registration(plugins, OptimizedAssumption.class); InvocationPlugin plugin = new InvocationPlugin() { public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { - if (receiver.isConstant()) { + if (receiver.isConstant() && b.getAssumptions() != null) { Constant constant = receiver.get().asConstant(); OptimizedAssumption assumption = snippetReflection.asObject(OptimizedAssumption.class, (JavaConstant) constant); if (assumption.isValid()) { @@ -227,7 +227,7 @@ * and constant folding could still eliminate the call to bailout(). However, we * also want to stop parsing, since we are sure that we will never need the * graph beyond the bailout point. - * + * * Therefore, we manually emit the call to bailout, which will be intrinsified * later when intrinsifications can no longer be delayed. The call is followed * by a NeverPartOfCompilationNode, which is a control sink and therefore stops @@ -336,12 +336,12 @@ }); } - public static void registerOptimizedCallTargetPlugins(MetaAccessProvider metaAccess, InvocationPlugins plugins) { + public static void registerOptimizedCallTargetPlugins(MetaAccessProvider metaAccess, InvocationPlugins plugins, SnippetReflectionProvider snippetReflection, boolean canDelayIntrinsification) { Registration r = new Registration(plugins, OptimizedCallTarget.class); r.register2("createFrame", FrameDescriptor.class, Object[].class, new InvocationPlugin() { public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode descriptor, ValueNode args) { Class<?> frameClass = TruffleCompilerOptions.TruffleUseFrameWithoutBoxing.getValue() ? FrameWithoutBoxing.class : FrameWithBoxing.class; - b.addPush(JavaKind.Object, new NewFrameNode(StampFactory.exactNonNull(metaAccess.lookupJavaType(frameClass)), descriptor, args)); + b.addPush(JavaKind.Object, new NewFrameNode(snippetReflection, StampFactory.exactNonNull(metaAccess.lookupJavaType(frameClass)), descriptor, args)); return true; } }); @@ -351,6 +351,7 @@ return true; } }); + registerUnsafeCast(r, canDelayIntrinsification); } public static void registerFrameWithoutBoxingPlugins(InvocationPlugins plugins, boolean canDelayIntrinsification) {
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleInvocationPluginProvider.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/TruffleInvocationPluginProvider.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.truffle.substitutions; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.api.replacements.SnippetReflectionProvider; import com.oracle.graal.graphbuilderconf.InvocationPlugins;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectList.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectList.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.Arrays; import java.util.Iterator; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.debug.Debug; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; +import jdk.vm.ci.common.JVMCIError; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.cfg.BlockMap;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationBlockState.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationBlockState.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,7 +27,7 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,12 +29,12 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.cfg.Loop; import com.oracle.graal.graph.Node;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java Fri Oct 30 20:56:28 2015 +0100 @@ -34,10 +34,10 @@ import java.util.Set; import java.util.function.IntFunction; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.cfg.Loop;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapePhase.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,9 +27,9 @@ import java.util.Set; -import jdk.internal.jvmci.options.Option; -import jdk.internal.jvmci.options.OptionType; -import jdk.internal.jvmci.options.OptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.graph.Node; import com.oracle.graal.nodes.StructuredGraph;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationBlockState.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import java.util.HashMap; import java.util.Map; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.nodes.ValueNode;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,14 +22,14 @@ */ package com.oracle.graal.virtual.phases.ea; -import static jdk.internal.jvmci.meta.LocationIdentity.any; +import static jdk.vm.ci.meta.LocationIdentity.any; import java.util.HashMap; import java.util.List; import java.util.Map; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.CollectionsFactory; import com.oracle.graal.compiler.common.type.Stamp;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualUtil.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualUtil.java Fri Oct 30 20:56:28 2015 +0100 @@ -27,8 +27,8 @@ import java.util.List; import java.util.Map; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.ResolvedJavaMethod; import com.oracle.graal.debug.Debug; import com.oracle.graal.debug.TTY;
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java Fri Oct 30 20:56:28 2015 +0100 @@ -26,9 +26,9 @@ import java.util.List; -import jdk.internal.jvmci.meta.ConstantReflectionProvider; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ConstantReflectionProvider; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.MetaAccessProvider; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.spi.CanonicalizerTool;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/BarrieredAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/BarrieredAccess.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.word; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.word.Word.Opcode; import com.oracle.graal.word.Word.Operation;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/ObjectAccess.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/ObjectAccess.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.word; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.word.Word.Opcode; import com.oracle.graal.word.Word.Operation;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/Pointer.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/Pointer.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.word; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.nodes.memory.HeapAccess.BarrierType;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/Word.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/Word.java Fri Oct 30 20:56:28 2015 +0100 @@ -29,8 +29,8 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import jdk.internal.jvmci.common.JVMCIError; -import jdk.internal.jvmci.meta.LocationIdentity; +import jdk.vm.ci.common.JVMCIError; +import jdk.vm.ci.meta.LocationIdentity; import com.oracle.graal.compiler.common.calc.Condition; import com.oracle.graal.compiler.common.calc.UnsignedMath;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/WordBase.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/WordBase.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,7 +22,7 @@ */ package com.oracle.graal.word; -import jdk.internal.jvmci.meta.TrustedInterface; +import jdk.vm.ci.meta.TrustedInterface; public interface WordBase extends TrustedInterface {
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/WordTypes.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/WordTypes.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.word; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.JavaType; -import jdk.internal.jvmci.meta.MetaAccessProvider; -import jdk.internal.jvmci.meta.ResolvedJavaMethod; -import jdk.internal.jvmci.meta.ResolvedJavaType; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaType; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaMethod; +import jdk.vm.ci.meta.ResolvedJavaType; import com.oracle.graal.compiler.common.type.Stamp; import com.oracle.graal.compiler.common.type.StampFactory;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java Fri Oct 30 20:56:28 2015 +0100 @@ -22,11 +22,11 @@ */ package com.oracle.graal.word.nodes; -import jdk.internal.jvmci.meta.AllocatableValue; -import jdk.internal.jvmci.meta.JavaConstant; -import jdk.internal.jvmci.meta.JavaKind; -import jdk.internal.jvmci.meta.LIRKind; -import jdk.internal.jvmci.meta.Value; +import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.LIRKind; +import jdk.vm.ci.meta.Value; import com.oracle.graal.compiler.common.type.AbstractPointerStamp; import com.oracle.graal.compiler.common.type.ObjectStamp;
--- a/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.nfi.test/test/com/oracle/nfi/test/NativeFunctionInterfaceTest.java Fri Oct 30 20:56:28 2015 +0100 @@ -25,7 +25,7 @@ import static java.io.File.separatorChar; import static java.lang.System.getProperty; import static java.lang.System.mapLibraryName; -import static jdk.internal.jvmci.common.UnsafeUtil.writeCString; +import static jdk.vm.ci.common.UnsafeUtil.writeCString; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
--- a/graal/com.oracle.nfi/src/com/oracle/nfi/NativeFunctionInterfaceRuntime.java Fri Oct 30 20:55:32 2015 +0100 +++ b/graal/com.oracle.nfi/src/com/oracle/nfi/NativeFunctionInterfaceRuntime.java Fri Oct 30 20:56:28 2015 +0100 @@ -49,7 +49,7 @@ NativeFunctionInterfaceAccess access = null; Class<?> servicesClass = null; try { - servicesClass = Class.forName("jdk.internal.jvmci.service.Services"); + servicesClass = Class.forName("jdk.vm.ci.service.Services"); } catch (ClassNotFoundException e) { try { // Legacy support
--- a/mx.graal/.pydevproject Fri Oct 30 20:55:32 2015 +0100 +++ b/mx.graal/.pydevproject Fri Oct 30 20:56:28 2015 +0100 @@ -1,14 +1,11 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?eclipse-pydev version="1.0"?> - -<pydev_project> +<?eclipse-pydev version="1.0"?><pydev_project> <pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property> <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property> <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH"> <path>/mx.graal</path> -</pydev_pathproperty> -<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH"> -<path>/mxtool2</path> +<path>/mx.graal</path> +<path>/mx.graal</path> </pydev_pathproperty> </pydev_project>
--- a/mx.graal/mx_graal.py Fri Oct 30 20:55:32 2015 +0100 +++ b/mx.graal/mx_graal.py Fri Oct 30 20:56:28 2015 +0100 @@ -24,529 +24,13 @@ # # ---------------------------------------------------------------------------------------------------- -import os -from os.path import join, exists, basename -from argparse import ArgumentParser -import sanitycheck -import itertools -import json -import re - import mx -from mx_jvmci import JvmciJDKDeployedDist, add_bootclasspath_prepend -from mx_jvmci import jdkDeployedDists #pylint: disable=unused-import - -try: - from mx_jvmci import run_vm, VM, Task, get_vm, \ - isJVMCIEnabled, relativeVmLibDirInJdk, get_jvmci_jdk, get_jvmci_jdk_dir, buildvms -except ImportError: - pass -from mx_unittest import unittest -import mx_gate - -_suite = mx.suite('graal') - -class GraalJDKDeployedDist(JvmciJDKDeployedDist): - def __init__(self): - JvmciJDKDeployedDist.__init__(self, 'GRAAL_HOTSPOT', compilers=['graal-economy', 'graal']) - - def deploy(self, jdkDir): - JvmciJDKDeployedDist.deploy(self, jdkDir) - self._updateGraalPropertiesFile(join(jdkDir, 'jre', 'lib')) - - def _updateGraalPropertiesFile(self, jreLibDir): - """ - Updates (or creates) 'jreLibDir'/jvmci/graal.properties to set/modify the - graal.version property. - """ - version = _suite.release_version() - graalProperties = join(jreLibDir, 'jvmci', 'graal.properties') - if not exists(graalProperties): - with open(graalProperties, 'w') as fp: - print >> fp, 'graal.version=' + version - else: - content = [] - with open(graalProperties) as fp: - for line in fp: - if line.startswith('graal.version='): - content.append('graal.version=' + version) - else: - content.append(line.rstrip(os.linesep)) - with open(graalProperties, 'w') as fp: - fp.write(os.linesep.join(content)) - -jdkDeployedDists += [ - JvmciJDKDeployedDist('GRAAL_NODEINFO'), - JvmciJDKDeployedDist('GRAAL_API'), - JvmciJDKDeployedDist('GRAAL_COMPILER'), - JvmciJDKDeployedDist('GRAAL'), - GraalJDKDeployedDist(), - JvmciJDKDeployedDist('GRAAL_TRUFFLE'), - JvmciJDKDeployedDist('GRAAL_TRUFFLE_HOTSPOT'), -] - -mx_gate.add_jacoco_includes(['com.oracle.graal.*']) -mx_gate.add_jacoco_excluded_annotations(['@Snippet', '@ClassSubstitution']) - -def _run_benchmark(args, availableBenchmarks, runBenchmark): - - vmOpts, benchmarksAndOptions = mx.extract_VM_args(args, useDoubleDash=availableBenchmarks is None) - - if availableBenchmarks is None: - harnessArgs = benchmarksAndOptions - return runBenchmark(None, harnessArgs, vmOpts) - - if len(benchmarksAndOptions) == 0: - mx.abort('at least one benchmark name or "all" must be specified') - benchmarks = list(itertools.takewhile(lambda x: not x.startswith('-'), benchmarksAndOptions)) - harnessArgs = benchmarksAndOptions[len(benchmarks):] - - if 'all' in benchmarks: - benchmarks = availableBenchmarks - else: - for bm in benchmarks: - if bm not in availableBenchmarks: - mx.abort('unknown benchmark: ' + bm + '\nselect one of: ' + str(availableBenchmarks)) - - failed = [] - for bm in benchmarks: - if not runBenchmark(bm, harnessArgs, vmOpts): - failed.append(bm) - - if len(failed) != 0: - mx.abort('Benchmark failures: ' + str(failed)) - -def dacapo(args): - """run one or more DaCapo benchmarks""" - - def launcher(bm, harnessArgs, extraVmOpts): - return sanitycheck.getDacapo(bm, harnessArgs).test(get_vm(), extraVmOpts=extraVmOpts) - - _run_benchmark(args, sanitycheck.dacapoSanityWarmup.keys(), launcher) - -def scaladacapo(args): - """run one or more Scala DaCapo benchmarks""" - - def launcher(bm, harnessArgs, extraVmOpts): - return sanitycheck.getScalaDacapo(bm, harnessArgs).test(get_vm(), extraVmOpts=extraVmOpts) - - _run_benchmark(args, sanitycheck.dacapoScalaSanityWarmup.keys(), launcher) - -# This is different than the 'jmh' commmand in that it -# looks for internal JMH benchmarks (i.e. those that -# depend on the JMH library). -def microbench(args): - """run JMH microbenchmark projects""" - parser = ArgumentParser(prog='mx microbench', description=microbench.__doc__, - usage="%(prog)s [command options|VM options] [-- [JMH options]]") - parser.add_argument('--jar', help='Explicitly specify micro-benchmark location') - known_args, args = parser.parse_known_args(args) - - vmArgs, jmhArgs = mx.extract_VM_args(args, useDoubleDash=True) - if isJVMCIEnabled(get_vm()) and '-XX:-UseJVMCIClassLoader' not in vmArgs: - vmArgs = ['-XX:-UseJVMCIClassLoader'] + vmArgs - - # look for -f in JMH arguments - containsF = False - forking = True - for i in range(len(jmhArgs)): - arg = jmhArgs[i] - if arg.startswith('-f'): - containsF = True - if arg == '-f' and (i+1) < len(jmhArgs): - arg += jmhArgs[i+1] - try: - if int(arg[2:]) == 0: - forking = False - except ValueError: - pass - - if known_args.jar: - # use the specified jar - args = ['-jar', known_args.jar] - if not forking: - args += vmArgs - else: - # default to -f1 if not specified otherwise - if not containsF: - jmhArgs += ['-f1'] - - # find all projects with a direct JMH dependency - jmhProjects = [] - for p in mx.projects_opt_limit_to_suites(): - if 'JMH' in [x.name for x in p.deps]: - jmhProjects.append(p.name) - cp = mx.classpath(jmhProjects) - - # execute JMH runner - args = ['-cp', cp] - if not forking: - args += vmArgs - args += ['org.openjdk.jmh.Main'] - - if forking: - jdk = get_jvmci_jdk() - jvm = get_vm() - def quoteSpace(s): - if " " in s: - return '"' + s + '"' - return s - - forkedVmArgs = map(quoteSpace, jdk.parseVmArgs(vmArgs)) - args += ['--jvmArgsPrepend', ' '.join(['-' + jvm] + forkedVmArgs)] - run_vm(args + jmhArgs) - -def ctw(args): - """run CompileTheWorld""" - - defaultCtwopts = '-Inline' - - parser = ArgumentParser(prog='mx ctw') - parser.add_argument('--ctwopts', action='store', help='space separated JVMCI options used for CTW compilations (default: --ctwopts="' + defaultCtwopts + '")', default=defaultCtwopts, metavar='<options>') - parser.add_argument('--jar', action='store', help='jar of classes to compiled instead of rt.jar', metavar='<path>') - - args, vmargs = parser.parse_known_args(args) - - if args.ctwopts: - # Replace spaces with '#' since -G: options cannot contain spaces - # when they are collated in the "jvmci.options" system property - vmargs.append('-G:CompileTheWorldConfig=' + re.sub(r'\s+', '#', args.ctwopts)) - - if args.jar: - jar = os.path.abspath(args.jar) - else: - jar = join(get_jvmci_jdk_dir(deployDists=False), 'jre', 'lib', 'rt.jar') - vmargs.append('-G:CompileTheWorldExcludeMethodFilter=sun.awt.X11.*.*') - - # suppress menubar and dock when running on Mac; exclude x11 classes as they may cause vm crashes (on Solaris) - vmargs = ['-Djava.awt.headless=true'] + vmargs - - vm_ = get_vm() - if isJVMCIEnabled(vm_): - if vm_ == 'jvmci': - vmargs += ['-XX:+BootstrapJVMCI'] - vmargs += ['-G:CompileTheWorldClasspath=' + jar, '-XX:-UseJVMCIClassLoader', 'com.oracle.graal.hotspot.CompileTheWorld'] - else: - vmargs += ['-XX:+CompileTheWorld', '-Xbootclasspath/p:' + jar] - - run_vm(vmargs) - -class UnitTestRun: - def __init__(self, name, args): - self.name = name - self.args = args - - def run(self, suites, tasks): - for suite in suites: - with Task(self.name + ': hosted-product ' + suite, tasks) as t: - if t: unittest(['--suite', suite, '--enable-timing', '--verbose', '--fail-fast'] + self.args) - -class BootstrapTest: - def __init__(self, name, vmbuild, args, suppress=None): - self.name = name - self.vmbuild = vmbuild - self.args = args - self.suppress = suppress - - def run(self, tasks): - with VM('jvmci', self.vmbuild): - with Task(self.name + ':' + self.vmbuild, tasks) as t: - if t: - if self.suppress: - out = mx.DuplicateSuppressingStream(self.suppress).write - else: - out = None - run_vm(self.args + ['-XX:-TieredCompilation', '-XX:+BootstrapJVMCI', '-version'], out=out) - -def compiler_gate_runner(suites, unit_test_runs, bootstrap_tests, tasks): - - # Build server-hosted-jvmci now so we can run the unit tests - with Task('BuildHotSpotGraalHosted: product', tasks) as t: - if t: buildvms(['--vms', 'server', '--builds', 'product']) - - # Run unit tests on server-hosted-jvmci - with VM('server', 'product'): - for r in unit_test_runs: - r.run(suites, tasks) - - # Run ctw against rt.jar on server-hosted-jvmci - with VM('server', 'product'): - with Task('CTW:hosted-product', tasks) as t: - if t: ctw(['--ctwopts', '-Inline +ExitVMOnException', '-esa', '-G:+CompileTheWorldMultiThreaded', '-G:-InlineDuringParsing', '-G:-CompileTheWorldVerbose', '-XX:ReservedCodeCacheSize=300m']) - - # Build the jvmci VMs so we can run the other tests - with Task('BuildHotSpotGraalOthers: fastdebug,product', tasks) as t: - if t: buildvms(['--vms', 'jvmci', '--builds', 'fastdebug,product']) - - # bootstrap tests - for b in bootstrap_tests: - b.run(tasks) +JDK9 = mx.get_jdk(tag='default').javaCompliance >= "1.9" - # run dacapo sanitychecks - for vmbuild in ['fastdebug', 'product']: - for test in sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild) + sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild): - with Task(str(test) + ':' + vmbuild, tasks) as t: - if t and not test.test('jvmci'): - t.abort(test.name + ' Failed') - - # ensure -Xbatch still works - with VM('jvmci', 'product'): - with Task('DaCapo_pmd:BatchMode:product', tasks) as t: - if t: dacapo(['-Xbatch', 'pmd']) - - # ensure -Xcomp still works - with VM('jvmci', 'product'): - with Task('XCompMode:product', tasks) as t: - if t: run_vm(['-Xcomp', '-version']) - - -graal_unit_test_runs = [ - UnitTestRun('UnitTests', []), - UnitTestRun('UnitTestsNonSSA', ['-G:-SSA_LIR']), - UnitTestRun('UnitTestsTraceRA', ['-G:+TraceRA']), -] - -_registers = 'o0,o1,o2,o3,f8,f9,d32,d34' if mx.get_arch() == 'sparcv9' else 'rbx,r11,r10,r14,xmm3,xmm11,xmm14' - -graal_bootstrap_tests = [ - BootstrapTest('BootstrapWithSystemAssertions', 'fastdebug', ['-esa']), - BootstrapTest('BootstrapWithSystemAssertionsNoCoop', 'fastdebug', ['-esa', '-XX:-UseCompressedOops']), - BootstrapTest('BootstrapWithGCVecification', 'product', ['-XX:+UnlockDiagnosticVMOptions', '-XX:+VerifyBeforeGC', '-XX:+VerifyAfterGC'], suppress=['VerifyAfterGC:', 'VerifyBeforeGC:']), - BootstrapTest('BootstrapWithG1GCVecification', 'product', ['-XX:+UnlockDiagnosticVMOptions', '-XX:-UseSerialGC', '-XX:+UseG1GC', '-XX:+VerifyBeforeGC', '-XX:+VerifyAfterGC'], suppress=['VerifyAfterGC:', 'VerifyBeforeGC:']), - BootstrapTest('BootstrapEconomyWithSystemAssertions', 'fastdebug', ['-esa', '-Djvmci.compiler=graal-economy']), - BootstrapTest('BootstrapWithExceptionEdges', 'fastdebug', ['-esa', '-G:+StressInvokeWithExceptionNode']), - BootstrapTest('BootstrapWithRegisterPressure', 'product', ['-esa', '-G:RegisterPressure=' + _registers]), - BootstrapTest('BootstrapNonSSAWithRegisterPressure', 'product', ['-esa', '-G:-SSA_LIR', '-G:RegisterPressure=' + _registers]), - BootstrapTest('BootstrapTraceRAWithRegisterPressure', 'product', ['-esa', '-G:+TraceRA', '-G:RegisterPressure=' + _registers]), - BootstrapTest('BootstrapWithImmutableCode', 'product', ['-esa', '-G:+ImmutableCode', '-G:+VerifyPhases']), -] - -def _graal_gate_runner(args, tasks): - compiler_gate_runner(['graal'], graal_unit_test_runs, graal_bootstrap_tests, tasks) - -mx_gate.add_gate_runner(_suite, _graal_gate_runner) - -def deoptalot(args): - """bootstrap a VM with DeoptimizeALot and VerifyOops on - - If the first argument is a number, the process will be repeated - this number of times. All other arguments are passed to the VM.""" - count = 1 - if len(args) > 0 and args[0].isdigit(): - count = int(args[0]) - del args[0] - - for _ in range(count): - if not run_vm(['-XX:-TieredCompilation', '-XX:+DeoptimizeALot', '-XX:+VerifyOops'] + args + ['-version']) == 0: - mx.abort("Failed") - -def longtests(args): - - deoptalot(['15', '-Xmx48m']) - - dacapo(['100', 'eclipse', '-esa']) - -""" -Extra benchmarks to run from 'bench()'. -""" -extraBenchmarks = [] - -def bench(args): - """run benchmarks and parse their output for results - - Results are JSON formated : {group : {benchmark : score}}.""" - resultFile = None - if '-resultfile' in args: - index = args.index('-resultfile') - if index + 1 < len(args): - resultFile = args[index + 1] - del args[index] - del args[index] - else: - mx.abort('-resultfile must be followed by a file name') - resultFileCSV = None - if '-resultfilecsv' in args: - index = args.index('-resultfilecsv') - if index + 1 < len(args): - resultFileCSV = args[index + 1] - del args[index] - del args[index] - else: - mx.abort('-resultfilecsv must be followed by a file name') - vm = get_vm() - if len(args) is 0: - args = ['all'] - - vmArgs = [arg for arg in args if arg.startswith('-')] - - def benchmarks_in_group(group): - prefix = group + ':' - return [a[len(prefix):] for a in args if a.startswith(prefix)] - - results = {} - benchmarks = [] - # DaCapo - if 'dacapo' in args or 'all' in args: - benchmarks += sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Benchmark) - else: - dacapos = benchmarks_in_group('dacapo') - for dacapo in dacapos: - if dacapo not in sanitycheck.dacapoSanityWarmup.keys(): - mx.abort('Unknown DaCapo : ' + dacapo) - iterations = sanitycheck.dacapoSanityWarmup[dacapo][sanitycheck.SanityCheckLevel.Benchmark] - if iterations > 0: - benchmarks += [sanitycheck.getDacapo(dacapo, ['-n', str(iterations)])] - - if 'scaladacapo' in args or 'all' in args: - benchmarks += sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Benchmark) - else: - scaladacapos = benchmarks_in_group('scaladacapo') - for scaladacapo in scaladacapos: - if scaladacapo not in sanitycheck.dacapoScalaSanityWarmup.keys(): - mx.abort('Unknown Scala DaCapo : ' + scaladacapo) - iterations = sanitycheck.dacapoScalaSanityWarmup[scaladacapo][sanitycheck.SanityCheckLevel.Benchmark] - if iterations > 0: - benchmarks += [sanitycheck.getScalaDacapo(scaladacapo, ['-n', str(iterations)])] +if JDK9: + import mx_graal_9 # pylint: disable=unused-import + from mx_graal_9 import mx_post_parse_cmd_line, run_vm, isJVMCIEnabled # pylint: disable=unused-import - # Bootstrap - if 'bootstrap' in args or 'all' in args: - benchmarks += sanitycheck.getBootstraps() - # SPECjvm2008 - if 'specjvm2008' in args or 'all' in args: - benchmarks += [sanitycheck.getSPECjvm2008(['-ikv', '-wt', '120', '-it', '120'])] - else: - specjvms = benchmarks_in_group('specjvm2008') - for specjvm in specjvms: - benchmarks += [sanitycheck.getSPECjvm2008(['-ikv', '-wt', '120', '-it', '120', specjvm])] - - if 'specjbb2005' in args or 'all' in args: - benchmarks += [sanitycheck.getSPECjbb2005()] - - if 'specjbb2013' in args: # or 'all' in args //currently not in default set - benchmarks += [sanitycheck.getSPECjbb2013()] - - if 'ctw-full' in args: - benchmarks.append(sanitycheck.getCTW(vm, sanitycheck.CTWMode.Full)) - if 'ctw-noinline' in args: - benchmarks.append(sanitycheck.getCTW(vm, sanitycheck.CTWMode.NoInline)) - - for f in extraBenchmarks: - f(args, vm, benchmarks) - - for test in benchmarks: - for (groupName, res) in test.bench(vm, extraVmOpts=vmArgs).items(): - group = results.setdefault(groupName, {}) - group.update(res) - mx.log(json.dumps(results)) - if resultFile: - with open(resultFile, 'w') as f: - f.write(json.dumps(results)) - if resultFileCSV: - with open(resultFileCSV, 'w') as f: - for key1, value1 in results.iteritems(): - f.write('%s;\n' % (str(key1))) - for key2, value2 in sorted(value1.iteritems()): - f.write('%s; %s;\n' % (str(key2), str(value2))) - -def specjvm2008(args): - """run one or more SPECjvm2008 benchmarks""" - - def launcher(bm, harnessArgs, extraVmOpts): - return sanitycheck.getSPECjvm2008(harnessArgs + [bm]).bench(get_vm(), extraVmOpts=extraVmOpts) - - availableBenchmarks = set(sanitycheck.specjvm2008Names) - if "all" not in args: - # only add benchmark groups if we are not running "all" - for name in sanitycheck.specjvm2008Names: - parts = name.rsplit('.', 1) - if len(parts) > 1: - assert len(parts) == 2 - group = parts[0] - availableBenchmarks.add(group) - - _run_benchmark(args, sorted(availableBenchmarks), launcher) - -def specjbb2013(args): - """run the composite SPECjbb2013 benchmark""" - - def launcher(bm, harnessArgs, extraVmOpts): - assert bm is None - return sanitycheck.getSPECjbb2013(harnessArgs).bench(get_vm(), extraVmOpts=extraVmOpts) - - _run_benchmark(args, None, launcher) - -def specjbb2005(args): - """run the composite SPECjbb2005 benchmark""" - - def launcher(bm, harnessArgs, extraVmOpts): - assert bm is None - return sanitycheck.getSPECjbb2005(harnessArgs).bench(get_vm(), extraVmOpts=extraVmOpts) - - _run_benchmark(args, None, launcher) - -def jdkartifactstats(args): - """show stats about JDK deployed Graal artifacts""" - jdkDir = get_jvmci_jdk_dir() - artifacts = {} - for root, _, filenames in os.walk(join(jdkDir, 'jre', 'lib')): - for f in filenames: - if f.endswith('.jar') and not f.endswith('.stripped.jar'): - jar = join(root, f) - if 'truffle' in f: - if 'enterprise' in f: - artifacts.setdefault('GraalEnterpriseTruffle', []).append(jar) - else: - artifacts.setdefault('GraalTruffle', []).append(jar) - elif 'enterprise' in f: - artifacts.setdefault('GraalEnterprise', []).append(jar) - elif 'jvmci' in f: - artifacts.setdefault('JVMCI', []).append(jar) - elif 'graal' in f: - artifacts.setdefault('Graal', []).append(jar) - else: - mx.logv('ignored: ' + jar) - - print '{:>10} {:>10} {:>10} {}'.format('All', 'NoVars', 'None', 'Jar') - for category in sorted(artifacts.viewkeys()): - jars = artifacts[category] - if jars: - totals = (0, 0, 0) - print - for j in jars: - gSize = os.path.getsize(j) - stripped = j[:-len('.jar')] + '.stripped.jar' - mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-DLocalVariableTypeTable=strip', '-DLocalVariableTable=strip', stripped, j]) - gLinesSourceSize = os.path.getsize(stripped) - mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-G', stripped, j]) - gNoneSize = os.path.getsize(stripped) - os.remove(stripped) - print '{:10,} {:10,} {:10,} {}:{}'.format(gSize, gLinesSourceSize, gNoneSize, category, basename(j)) - t1, t2, t3 = totals - totals = (t1 + gSize, t2 + gLinesSourceSize, t3 + gNoneSize) - t1, t2, t3 = totals - print '{:10,} {:10,} {:10,} {}'.format(t1, t2, t3, category) - - jvmLib = join(jdkDir, relativeVmLibDirInJdk(), get_vm(), mx.add_lib_suffix(mx.add_lib_prefix('jvm'))) - print - if exists(jvmLib): - print '{:10,} {}'.format(os.path.getsize(jvmLib), jvmLib) - else: - print '{:>10} {}'.format('<missing>', jvmLib) - -mx.update_commands(_suite, { - 'ctw': [ctw, '[-vmoptions|noinline|nocomplex|full]'], - 'dacapo': [dacapo, '[VM options] benchmarks...|"all" [DaCapo options]'], - 'jdkartifactstats' : [jdkartifactstats, ''], - 'scaladacapo': [scaladacapo, '[VM options] benchmarks...|"all" [Scala DaCapo options]'], - 'specjvm2008': [specjvm2008, '[VM options] benchmarks...|"all" [SPECjvm2008 options]'], - 'specjbb2013': [specjbb2013, '[VM options] [-- [SPECjbb2013 options]]'], - 'specjbb2005': [specjbb2005, '[VM options] [-- [SPECjbb2005 options]]'], - 'bench' : [bench, '[-resultfile file] [all(default)|dacapo|specjvm2008|bootstrap]'], - 'microbench' : [microbench, '[VM options] [-- [JMH options]]'], - 'deoptalot' : [deoptalot, '[n]'], - 'longtests' : [longtests, ''], -}) - - -def mx_post_parse_cmd_line(opts): - add_bootclasspath_prepend(mx.distribution('truffle:TRUFFLE_API')) +else: + import mx_graal_8 # pylint: disable=unused-import + from mx_graal_8 import mx_post_parse_cmd_line, run_vm, isJVMCIEnabled # pylint: disable=unused-import
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mx.graal/mx_graal_8.py Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,585 @@ +# +# ---------------------------------------------------------------------------------------------------- +# +# Copyright (c) 2007, 2015, 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. +# +# ---------------------------------------------------------------------------------------------------- + +import os +from os.path import join, exists, basename +from argparse import ArgumentParser +import sanitycheck +import itertools +import json +import re + +import mx +from mx_jvmci import JvmciJDKDeployedDist, jdkDeployedDists, add_bootclasspath_prepend, buildvms, get_jvmci_jdk, run_vm, VM, relativeVmLibDirInJdk, isJVMCIEnabled +from mx_jvmci import get_vm as _jvmci_get_vm +from mx_gate import Task +from sanitycheck import _noneAsEmptyList + +from mx_unittest import unittest +import mx_gate + +_suite = mx.suite('graal') + +def get_vm(): + """ + Gets the name of the currently selected JVM variant. + """ + vm = _jvmci_get_vm() + if isinstance(vm, VM): + # mx_jvmci:9 + return vm.jvmVariant + else: + # mx_jvmci:8 + assert isinstance(vm, str) + return vm + +class GraalJDKDeployedDist(JvmciJDKDeployedDist): + def __init__(self): + JvmciJDKDeployedDist.__init__(self, 'GRAAL_HOTSPOT', compilers=['graal-economy', 'graal']) + + def deploy(self, jdkDir): + JvmciJDKDeployedDist.deploy(self, jdkDir) + self._updateGraalPropertiesFile(join(jdkDir, 'jre', 'lib')) + + def _updateGraalPropertiesFile(self, jreLibDir): + """ + Updates (or creates) 'jreLibDir'/jvmci/graal.properties to set/modify the + graal.version property. + """ + version = _suite.release_version() + graalProperties = join(jreLibDir, 'jvmci', 'graal.properties') + if not exists(graalProperties): + with open(graalProperties, 'w') as fp: + print >> fp, 'graal.version=' + version + else: + content = [] + with open(graalProperties) as fp: + for line in fp: + if line.startswith('graal.version='): + content.append('graal.version=' + version) + else: + content.append(line.rstrip(os.linesep)) + with open(graalProperties, 'w') as fp: + fp.write(os.linesep.join(content)) + +jdkDeployedDists += [ + JvmciJDKDeployedDist('GRAAL_NODEINFO'), + JvmciJDKDeployedDist('GRAAL_API'), + JvmciJDKDeployedDist('GRAAL_COMPILER'), + JvmciJDKDeployedDist('GRAAL'), + GraalJDKDeployedDist(), + JvmciJDKDeployedDist('GRAAL_TRUFFLE'), + JvmciJDKDeployedDist('GRAAL_TRUFFLE_HOTSPOT'), +] + +mx_gate.add_jacoco_includes(['com.oracle.graal.*']) +mx_gate.add_jacoco_excluded_annotations(['@Snippet', '@ClassSubstitution']) + +def _run_benchmark(args, availableBenchmarks, runBenchmark): + + vmOpts, benchmarksAndOptions = mx.extract_VM_args(args, useDoubleDash=availableBenchmarks is None) + + if availableBenchmarks is None: + harnessArgs = benchmarksAndOptions + return runBenchmark(None, harnessArgs, vmOpts) + + if len(benchmarksAndOptions) == 0: + mx.abort('at least one benchmark name or "all" must be specified') + benchmarks = list(itertools.takewhile(lambda x: not x.startswith('-'), benchmarksAndOptions)) + harnessArgs = benchmarksAndOptions[len(benchmarks):] + + if 'all' in benchmarks: + benchmarks = availableBenchmarks + else: + for bm in benchmarks: + if bm not in availableBenchmarks: + mx.abort('unknown benchmark: ' + bm + '\nselect one of: ' + str(availableBenchmarks)) + + failed = [] + for bm in benchmarks: + if not runBenchmark(bm, harnessArgs, vmOpts): + failed.append(bm) + + if len(failed) != 0: + mx.abort('Benchmark failures: ' + str(failed)) + +def dacapo(args): + """run one or more DaCapo benchmarks""" + + def launcher(bm, harnessArgs, extraVmOpts): + return sanitycheck.getDacapo(bm, harnessArgs).test(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, sanitycheck.dacapoSanityWarmup.keys(), launcher) + +def scaladacapo(args): + """run one or more Scala DaCapo benchmarks""" + + def launcher(bm, harnessArgs, extraVmOpts): + return sanitycheck.getScalaDacapo(bm, harnessArgs).test(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, sanitycheck.dacapoScalaSanityWarmup.keys(), launcher) + +# This is different than the 'jmh' commmand in that it +# looks for internal JMH benchmarks (i.e. those that +# depend on the JMH library). +def microbench(args): + """run JMH microbenchmark projects""" + parser = ArgumentParser(prog='mx microbench', description=microbench.__doc__, + usage="%(prog)s [command options|VM options] [-- [JMH options]]") + parser.add_argument('--jar', help='Explicitly specify micro-benchmark location') + known_args, args = parser.parse_known_args(args) + + vmArgs, jmhArgs = mx.extract_VM_args(args, useDoubleDash=True) + if get_jvmci_jdk().javaCompliance < '9': + if isJVMCIEnabled(get_vm()) and '-XX:-UseJVMCIClassLoader' not in vmArgs: + vmArgs = ['-XX:-UseJVMCIClassLoader'] + vmArgs + + # look for -f in JMH arguments + containsF = False + forking = True + for i in range(len(jmhArgs)): + arg = jmhArgs[i] + if arg.startswith('-f'): + containsF = True + if arg == '-f' and (i+1) < len(jmhArgs): + arg += jmhArgs[i+1] + try: + if int(arg[2:]) == 0: + forking = False + except ValueError: + pass + + if known_args.jar: + # use the specified jar + args = ['-jar', known_args.jar] + if not forking: + args += vmArgs + else: + # default to -f1 if not specified otherwise + if not containsF: + jmhArgs += ['-f1'] + + # find all projects with a direct JMH dependency + jmhProjects = [] + for p in mx.projects_opt_limit_to_suites(): + if 'JMH' in [x.name for x in p.deps]: + jmhProjects.append(p.name) + cp = mx.classpath(jmhProjects) + + # execute JMH runner + args = ['-cp', cp] + if not forking: + args += vmArgs + args += ['org.openjdk.jmh.Main'] + + if forking: + jdk = get_jvmci_jdk() + jvm = get_vm() + def quoteSpace(s): + if " " in s: + return '"' + s + '"' + return s + + forkedVmArgs = map(quoteSpace, jdk.parseVmArgs(vmArgs)) + args += ['--jvmArgsPrepend', ' '.join(['-' + jvm] + forkedVmArgs)] + run_vm(args + jmhArgs) + +def ctw(args, extraVMarguments=None): + """run CompileTheWorld""" + + defaultCtwopts = '-Inline' + + parser = ArgumentParser(prog='mx ctw') + parser.add_argument('--ctwopts', action='store', help='space separated JVMCI options used for CTW compilations (default: --ctwopts="' + defaultCtwopts + '")', default=defaultCtwopts, metavar='<options>') + parser.add_argument('--cp', '--jar', action='store', help='jar or class path denoting classes to compile', metavar='<path>') + + args, vmargs = parser.parse_known_args(args) + + if args.ctwopts: + # Replace spaces with '#' since -G: options cannot contain spaces + # when they are collated in the "jvmci.options" system property + vmargs.append('-G:CompileTheWorldConfig=' + re.sub(r'\s+', '#', args.ctwopts)) + + if args.cp: + cp = os.path.abspath(args.cp) + else: + if get_jvmci_jdk().javaCompliance < '9': + cp = join(get_jvmci_jdk().home, 'jre', 'lib', 'rt.jar') + else: + cp = join(get_jvmci_jdk().home, 'modules', 'java.base') + os.pathsep + \ + join(get_jvmci_jdk().home, 'lib', 'modules', 'bootmodules.jimage') + vmargs.append('-G:CompileTheWorldExcludeMethodFilter=sun.awt.X11.*.*') + + # suppress menubar and dock when running on Mac; exclude x11 classes as they may cause vm crashes (on Solaris) + vmargs = ['-Djava.awt.headless=true'] + vmargs + + vm = get_vm() + if get_jvmci_jdk().javaCompliance >= '9': + jvmciMode = _jvmci_get_vm().jvmciMode + if jvmciMode == 'disabled': + vmargs += ['-XX:+CompileTheWorld', '-Xbootclasspath/p:' + cp] + else: + if jvmciMode == 'jit': + vmargs += ['-XX:+BootstrapJVMCI'] + vmargs += ['-G:CompileTheWorldClasspath=' + cp, 'com.oracle.graal.hotspot.CompileTheWorld'] + else: + if isJVMCIEnabled(vm): + if vm == 'jvmci': + vmargs += ['-XX:+BootstrapJVMCI'] + vmargs += ['-G:CompileTheWorldClasspath=' + cp, '-XX:-UseJVMCIClassLoader', 'com.oracle.graal.hotspot.CompileTheWorld'] + else: + vmargs += ['-XX:+CompileTheWorld', '-Xbootclasspath/p:' + cp] + + run_vm(vmargs + _noneAsEmptyList(extraVMarguments)) + +class UnitTestRun: + def __init__(self, name, args): + self.name = name + self.args = args + + def run(self, suites, tasks, extraVMarguments=None): + for suite in suites: + with Task(self.name + ': hosted-product ' + suite, tasks) as t: + if t: unittest(['--suite', suite, '--enable-timing', '--verbose', '--fail-fast'] + self.args + _noneAsEmptyList(extraVMarguments)) + +class BootstrapTest: + def __init__(self, name, vmbuild, args, suppress=None): + self.name = name + self.vmbuild = vmbuild + self.args = args + self.suppress = suppress + + def run(self, tasks, extraVMarguments=None): + with VM('jvmci', self.vmbuild): + with Task(self.name + ':' + self.vmbuild, tasks) as t: + if t: + if self.suppress: + out = mx.DuplicateSuppressingStream(self.suppress).write + else: + out = None + run_vm(self.args + _noneAsEmptyList(extraVMarguments) + ['-XX:-TieredCompilation', '-XX:+BootstrapJVMCI', '-version'], out=out) + +def compiler_gate_runner(suites, unit_test_runs, bootstrap_tests, tasks, extraVMarguments=None): + + # Build server-hosted-jvmci now so we can run the unit tests + with Task('BuildHotSpotGraalHosted: product', tasks) as t: + if t: buildvms(['--vms', 'server', '--builds', 'product']) + + # Run unit tests on server-hosted-jvmci + with VM('server', 'product'): + for r in unit_test_runs: + r.run(suites, tasks, extraVMarguments) + + # Run ctw against rt.jar on server-hosted-jvmci + with VM('server', 'product'): + with Task('CTW:hosted-product', tasks) as t: + if t: ctw(['--ctwopts', '-Inline +ExitVMOnException', '-esa', '-G:+CompileTheWorldMultiThreaded', '-G:-InlineDuringParsing', '-G:-CompileTheWorldVerbose', '-XX:ReservedCodeCacheSize=300m'], _noneAsEmptyList(extraVMarguments)) + + # Build the jvmci VMs so we can run the other tests + with Task('BuildHotSpotGraalOthers: fastdebug,product', tasks) as t: + if t: buildvms(['--vms', 'jvmci', '--builds', 'fastdebug,product']) + + # bootstrap tests + for b in bootstrap_tests: + b.run(tasks, extraVMarguments) + + # run dacapo sanitychecks + for vmbuild in ['fastdebug', 'product']: + for test in sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild, extraVmArguments=extraVMarguments) \ + + sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel=vmbuild, extraVmArguments=extraVMarguments): + with Task(str(test) + ':' + vmbuild, tasks) as t: + if t and not test.test('jvmci'): + t.abort(test.name + ' Failed') + + # ensure -Xbatch still works + with VM('jvmci', 'product'): + with Task('DaCapo_pmd:BatchMode:product', tasks) as t: + if t: dacapo(_noneAsEmptyList(extraVMarguments) + ['-Xbatch', 'pmd']) + + # ensure -Xcomp still works + with VM('jvmci', 'product'): + with Task('XCompMode:product', tasks) as t: + if t: run_vm(_noneAsEmptyList(extraVMarguments) + ['-Xcomp', '-version']) + + +graal_unit_test_runs = [ + UnitTestRun('UnitTests', []), +] + +_registers = 'o0,o1,o2,o3,f8,f9,d32,d34' if mx.get_arch() == 'sparcv9' else 'rbx,r11,r10,r14,xmm3,xmm11,xmm14' + +graal_bootstrap_tests = [ + BootstrapTest('BootstrapWithSystemAssertions', 'fastdebug', ['-esa']), + BootstrapTest('BootstrapWithSystemAssertionsNoCoop', 'fastdebug', ['-esa', '-XX:-UseCompressedOops', '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithGCVecification', 'product', ['-XX:+UnlockDiagnosticVMOptions', '-XX:+VerifyBeforeGC', '-XX:+VerifyAfterGC', '-G:+ExitVMOnException'], suppress=['VerifyAfterGC:', 'VerifyBeforeGC:']), + BootstrapTest('BootstrapWithG1GCVecification', 'product', ['-XX:+UnlockDiagnosticVMOptions', '-XX:-UseSerialGC', '-XX:+UseG1GC', '-XX:+VerifyBeforeGC', '-XX:+VerifyAfterGC', '-G:+ExitVMOnException'], suppress=['VerifyAfterGC:', 'VerifyBeforeGC:']), + BootstrapTest('BootstrapEconomyWithSystemAssertions', 'fastdebug', ['-esa', '-Djvmci.compiler=graal-economy', '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithExceptionEdges', 'fastdebug', ['-esa', '-G:+StressInvokeWithExceptionNode', '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithRegisterPressure', 'product', ['-esa', '-G:RegisterPressure=' + _registers, '-G:+ExitVMOnException']), + BootstrapTest('BootstrapTraceRAWithRegisterPressure', 'product', ['-esa', '-G:+TraceRA', '-G:RegisterPressure=' + _registers, '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithImmutableCode', 'product', ['-esa', '-G:+ImmutableCode', '-G:+VerifyPhases', '-G:+ExitVMOnException']), +] + +def _graal_gate_runner(args, tasks): + compiler_gate_runner(['graal'], graal_unit_test_runs, graal_bootstrap_tests, tasks, args.extra_vm_argument) + +mx_gate.add_gate_runner(_suite, _graal_gate_runner) +mx_gate.add_gate_argument('--extra-vm-argument', action='append', help='add extra vm argument to gate tasks if applicable (multiple occurrences allowed)') + +def deoptalot(args): + """bootstrap a VM with DeoptimizeALot and VerifyOops on + + If the first argument is a number, the process will be repeated + this number of times. All other arguments are passed to the VM.""" + count = 1 + if len(args) > 0 and args[0].isdigit(): + count = int(args[0]) + del args[0] + + for _ in range(count): + if not run_vm(['-XX:-TieredCompilation', '-XX:+DeoptimizeALot', '-XX:+VerifyOops'] + args + ['-version']) == 0: + mx.abort("Failed") + +def longtests(args): + + deoptalot(['15', '-Xmx48m']) + + dacapo(['100', 'eclipse', '-esa']) + +""" +Extra benchmarks to run from 'bench()'. +""" +extraBenchmarks = [] + +def bench(args): + """run benchmarks and parse their output for results + + Results are JSON formated : {group : {benchmark : score}}.""" + resultFile = None + if '-resultfile' in args: + index = args.index('-resultfile') + if index + 1 < len(args): + resultFile = args[index + 1] + del args[index] + del args[index] + else: + mx.abort('-resultfile must be followed by a file name') + resultFileCSV = None + if '-resultfilecsv' in args: + index = args.index('-resultfilecsv') + if index + 1 < len(args): + resultFileCSV = args[index + 1] + del args[index] + del args[index] + else: + mx.abort('-resultfilecsv must be followed by a file name') + vm = get_vm() + if len(args) is 0: + args = ['all'] + + vmArgs = [arg for arg in args if arg.startswith('-')] + + def benchmarks_in_group(group): + prefix = group + ':' + return [a[len(prefix):] for a in args if a.startswith(prefix)] + + results = {} + benchmarks = [] + # DaCapo + if 'dacapo' in args or 'all' in args: + benchmarks += sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Benchmark) + else: + dacapos = benchmarks_in_group('dacapo') + for dacapo in dacapos: + if dacapo not in sanitycheck.dacapoSanityWarmup.keys(): + mx.abort('Unknown DaCapo : ' + dacapo) + iterations = sanitycheck.dacapoSanityWarmup[dacapo][sanitycheck.SanityCheckLevel.Benchmark] + if iterations > 0: + benchmarks += [sanitycheck.getDacapo(dacapo, ['-n', str(iterations)])] + + if 'scaladacapo' in args or 'all' in args: + benchmarks += sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Benchmark) + else: + scaladacapos = benchmarks_in_group('scaladacapo') + for scaladacapo in scaladacapos: + if scaladacapo not in sanitycheck.dacapoScalaSanityWarmup.keys(): + mx.abort('Unknown Scala DaCapo : ' + scaladacapo) + iterations = sanitycheck.dacapoScalaSanityWarmup[scaladacapo][sanitycheck.SanityCheckLevel.Benchmark] + if iterations > 0: + benchmarks += [sanitycheck.getScalaDacapo(scaladacapo, ['-n', str(iterations)])] + + # Bootstrap + if 'bootstrap' in args or 'all' in args: + benchmarks += sanitycheck.getBootstraps() + # SPECjvm2008 + if 'specjvm2008' in args or 'all' in args: + benchmarks += [sanitycheck.getSPECjvm2008(['-ikv', '-wt', '120', '-it', '120'])] + else: + specjvms = benchmarks_in_group('specjvm2008') + for specjvm in specjvms: + benchmarks += [sanitycheck.getSPECjvm2008(['-ikv', '-wt', '120', '-it', '120', specjvm])] + + if 'specjbb2005' in args or 'all' in args: + benchmarks += [sanitycheck.getSPECjbb2005()] + + if 'specjbb2013' in args: # or 'all' in args //currently not in default set + benchmarks += [sanitycheck.getSPECjbb2013()] + + if 'ctw-full' in args: + benchmarks.append(sanitycheck.getCTW(vm, sanitycheck.CTWMode.Full)) + if 'ctw-noinline' in args: + benchmarks.append(sanitycheck.getCTW(vm, sanitycheck.CTWMode.NoInline)) + + for f in extraBenchmarks: + f(args, vm, benchmarks) + + for test in benchmarks: + for (groupName, res) in test.bench(vm, extraVmOpts=vmArgs).items(): + group = results.setdefault(groupName, {}) + group.update(res) + mx.log(json.dumps(results)) + if resultFile: + with open(resultFile, 'w') as f: + f.write(json.dumps(results)) + if resultFileCSV: + with open(resultFileCSV, 'w') as f: + for key1, value1 in results.iteritems(): + f.write('%s;\n' % (str(key1))) + for key2, value2 in sorted(value1.iteritems()): + f.write('%s; %s;\n' % (str(key2), str(value2))) + +def specjvm2008(args): + """run one or more SPECjvm2008 benchmarks""" + + def launcher(bm, harnessArgs, extraVmOpts): + return sanitycheck.getSPECjvm2008(harnessArgs + [bm]).bench(get_vm(), extraVmOpts=extraVmOpts) + + availableBenchmarks = set(sanitycheck.specjvm2008Names) + if "all" not in args: + # only add benchmark groups if we are not running "all" + for name in sanitycheck.specjvm2008Names: + parts = name.rsplit('.', 1) + if len(parts) > 1: + assert len(parts) == 2 + group = parts[0] + availableBenchmarks.add(group) + + _run_benchmark(args, sorted(availableBenchmarks), launcher) + +def specjbb2013(args): + """run the composite SPECjbb2013 benchmark""" + + def launcher(bm, harnessArgs, extraVmOpts): + assert bm is None + return sanitycheck.getSPECjbb2013(harnessArgs).bench(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, None, launcher) + +def specjbb2005(args): + """run the composite SPECjbb2005 benchmark""" + + def launcher(bm, harnessArgs, extraVmOpts): + assert bm is None + return sanitycheck.getSPECjbb2005(harnessArgs).bench(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, None, launcher) + +def jdkartifactstats(args): + """show stats about JDK deployed Graal artifacts""" + artifacts = {} + jdkDir = get_jvmci_jdk().home + def _getDeployedJars(): + if get_jvmci_jdk().javaCompliance < '9': + for root, _, filenames in os.walk(join(jdkDir, 'jre', 'lib')): + for f in filenames: + if f.endswith('.jar') and not f.endswith('.stripped.jar'): + yield join(root, f) + else: + for jdkDist in jdkDeployedDists: + dist = jdkDist.dist() + if isinstance(jdkDist, JvmciJDKDeployedDist): + yield dist.path + + for jar in _getDeployedJars(): + f = basename(jar) + if 'truffle' in f: + if 'enterprise' in f: + artifacts.setdefault('GraalEnterpriseTruffle', []).append(jar) + else: + artifacts.setdefault('GraalTruffle', []).append(jar) + elif 'enterprise' in f: + artifacts.setdefault('GraalEnterprise', []).append(jar) + elif 'jvmci' in f: + artifacts.setdefault('JVMCI', []).append(jar) + elif 'graal' in f: + artifacts.setdefault('Graal', []).append(jar) + else: + mx.logv('ignored: ' + jar) + + print '{:>10} {:>10} {:>10} {}'.format('All', 'NoVars', 'None', 'Jar') + for category in sorted(artifacts.viewkeys()): + jars = artifacts[category] + if jars: + totals = (0, 0, 0) + print + for j in jars: + gSize = os.path.getsize(j) + stripped = j[:-len('.jar')] + '.stripped.jar' + mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-DLocalVariableTypeTable=strip', '-DLocalVariableTable=strip', stripped, j]) + gLinesSourceSize = os.path.getsize(stripped) + mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-G', stripped, j]) + gNoneSize = os.path.getsize(stripped) + os.remove(stripped) + print '{:10,} {:10,} {:10,} {}:{}'.format(gSize, gLinesSourceSize, gNoneSize, category, basename(j)) + t1, t2, t3 = totals + totals = (t1 + gSize, t2 + gLinesSourceSize, t3 + gNoneSize) + t1, t2, t3 = totals + print '{:10,} {:10,} {:10,} {}'.format(t1, t2, t3, category) + + jvmLib = join(jdkDir, relativeVmLibDirInJdk(), get_vm(), mx.add_lib_suffix(mx.add_lib_prefix('jvm'))) + print + if exists(jvmLib): + print '{:10,} {}'.format(os.path.getsize(jvmLib), jvmLib) + else: + print '{:>10} {}'.format('<missing>', jvmLib) + +mx.update_commands(_suite, { + 'ctw': [ctw, '[-vmoptions|noinline|nocomplex|full]'], + 'dacapo': [dacapo, '[VM options] benchmarks...|"all" [DaCapo options]'], + 'jdkartifactstats' : [jdkartifactstats, ''], + 'scaladacapo': [scaladacapo, '[VM options] benchmarks...|"all" [Scala DaCapo options]'], + 'specjvm2008': [specjvm2008, '[VM options] benchmarks...|"all" [SPECjvm2008 options]'], + 'specjbb2013': [specjbb2013, '[VM options] [-- [SPECjbb2013 options]]'], + 'specjbb2005': [specjbb2005, '[VM options] [-- [SPECjbb2005 options]]'], + 'bench' : [bench, '[-resultfile file] [all(default)|dacapo|specjvm2008|bootstrap]'], + 'microbench' : [microbench, '[VM options] [-- [JMH options]]'], + 'deoptalot' : [deoptalot, '[n]'], + 'longtests' : [longtests, ''], +}) + + +def mx_post_parse_cmd_line(opts): + add_bootclasspath_prepend(mx.distribution('truffle:TRUFFLE_API'))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mx.graal/mx_graal_9.py Fri Oct 30 20:56:28 2015 +0100 @@ -0,0 +1,603 @@ +# +# ---------------------------------------------------------------------------------------------------- +# +# Copyright (c) 2007, 2015, 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. +# +# ---------------------------------------------------------------------------------------------------- + +import os +from os.path import join +from argparse import ArgumentParser +import sanitycheck +import itertools +import json +import re + +import mx +from mx_gate import Task +from sanitycheck import _noneAsEmptyList + +from mx_unittest import unittest +import mx_gate +import mx_unittest + +_suite = mx.suite('graal') + +_jdk = mx.get_jdk() +assert _jdk.javaCompliance >= "1.9" + +def isJVMCIEnabled(vm): + return True + +_jvmciModes = { + 'hosted' : ['-XX:+UnlockExperimentalVMOptions', '-XX:+EnableJVMCI'], + 'jit' : ['-XX:+UnlockExperimentalVMOptions', '-XX:+EnableJVMCI', '-XX:+UseJVMCICompiler'], + 'disabled' : [] +} + +def get_vm(): + """ + Gets the name of the currently selected JVM variant. + """ + return 'server' + +class JVMCIMode: + """ + A context manager for setting the current JVMCI mode. + """ + def __init__(self, jvmciMode=None): + self.update(jvmciMode) + + def update(self, jvmciMode=None): + assert jvmciMode is None or jvmciMode in _jvmciModes, jvmciMode + self.jvmciMode = jvmciMode or _vm.jvmciMode + + def __enter__(self): + global _vm + self.previousVm = _vm + _vm = self + + def __exit__(self, exc_type, exc_value, traceback): + global _vm + _vm = self.previousVm + +_vm = JVMCIMode(jvmciMode='hosted') + +class BootClasspathDist(object): + """ + Extra info for a Distribution that must be put onto the boot class path. + """ + def __init__(self, name): + self._name = name + + def dist(self): + return mx.distribution(self._name) + + def get_classpath_repr(self): + return self.dist().classpath_repr() + +_compilers = ['graal-economy', 'graal'] +_bootClasspathDists = [ + BootClasspathDist('GRAAL_NODEINFO'), + BootClasspathDist('GRAAL_API'), + BootClasspathDist('GRAAL_COMPILER'), + BootClasspathDist('GRAAL'), + BootClasspathDist('GRAAL_HOTSPOT'), + BootClasspathDist('GRAAL_TRUFFLE'), + BootClasspathDist('GRAAL_TRUFFLE_HOTSPOT'), +] + +def add_compiler(compilerName): + _compilers.append(compilerName) + +def add_boot_classpath_dist(dist): + _bootClasspathDists.append(dist) + +mx_gate.add_jacoco_includes(['com.oracle.graal.*']) +mx_gate.add_jacoco_excluded_annotations(['@Snippet', '@ClassSubstitution']) + +def _run_benchmark(args, availableBenchmarks, runBenchmark): + + vmOpts, benchmarksAndOptions = mx.extract_VM_args(args, useDoubleDash=availableBenchmarks is None) + + if availableBenchmarks is None: + harnessArgs = benchmarksAndOptions + return runBenchmark(None, harnessArgs, vmOpts) + + if len(benchmarksAndOptions) == 0: + mx.abort('at least one benchmark name or "all" must be specified') + benchmarks = list(itertools.takewhile(lambda x: not x.startswith('-'), benchmarksAndOptions)) + harnessArgs = benchmarksAndOptions[len(benchmarks):] + + if 'all' in benchmarks: + benchmarks = availableBenchmarks + else: + for bm in benchmarks: + if bm not in availableBenchmarks: + mx.abort('unknown benchmark: ' + bm + '\nselect one of: ' + str(availableBenchmarks)) + + failed = [] + for bm in benchmarks: + if not runBenchmark(bm, harnessArgs, vmOpts): + failed.append(bm) + + if len(failed) != 0: + mx.abort('Benchmark failures: ' + str(failed)) + +def dacapo(args): + """run one or more DaCapo benchmarks""" + + def launcher(bm, harnessArgs, extraVmOpts): + return sanitycheck.getDacapo(bm, harnessArgs).test(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, sanitycheck.dacapoSanityWarmup.keys(), launcher) + +def scaladacapo(args): + """run one or more Scala DaCapo benchmarks""" + + def launcher(bm, harnessArgs, extraVmOpts): + return sanitycheck.getScalaDacapo(bm, harnessArgs).test(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, sanitycheck.dacapoScalaSanityWarmup.keys(), launcher) + +# This is different than the 'jmh' commmand in that it +# looks for internal JMH benchmarks (i.e. those that +# depend on the JMH library). +def microbench(args): + """run JMH microbenchmark projects""" + parser = ArgumentParser(prog='mx microbench', description=microbench.__doc__, + usage="%(prog)s [command options|VM options] [-- [JMH options]]") + parser.add_argument('--jar', help='Explicitly specify micro-benchmark location') + known_args, args = parser.parse_known_args(args) + + vmArgs, jmhArgs = mx.extract_VM_args(args, useDoubleDash=True) + + # look for -f in JMH arguments + containsF = False + forking = True + for i in range(len(jmhArgs)): + arg = jmhArgs[i] + if arg.startswith('-f'): + containsF = True + if arg == '-f' and (i+1) < len(jmhArgs): + arg += jmhArgs[i+1] + try: + if int(arg[2:]) == 0: + forking = False + except ValueError: + pass + + if known_args.jar: + # use the specified jar + args = ['-jar', known_args.jar] + if not forking: + args += vmArgs + else: + # default to -f1 if not specified otherwise + if not containsF: + jmhArgs += ['-f1'] + + # find all projects with a direct JMH dependency + jmhProjects = [] + for p in mx.projects_opt_limit_to_suites(): + if 'JMH' in [x.name for x in p.deps]: + jmhProjects.append(p.name) + cp = mx.classpath(jmhProjects) + + # execute JMH runner + args = ['-cp', cp] + if not forking: + args += vmArgs + args += ['org.openjdk.jmh.Main'] + + if forking: + jvm = get_vm() + def quoteSpace(s): + if " " in s: + return '"' + s + '"' + return s + + forkedVmArgs = map(quoteSpace, _parseVmArgs(_jdk, vmArgs)) + args += ['--jvmArgsPrepend', ' '.join(['-' + jvm] + forkedVmArgs)] + run_vm(args + jmhArgs) + +def ctw(args, extraVMarguments=None): + """run CompileTheWorld""" + + defaultCtwopts = '-Inline' + + parser = ArgumentParser(prog='mx ctw') + parser.add_argument('--ctwopts', action='store', help='space separated JVMCI options used for CTW compilations (default: --ctwopts="' + defaultCtwopts + '")', default=defaultCtwopts, metavar='<options>') + parser.add_argument('--cp', '--jar', action='store', help='jar or class path denoting classes to compile', metavar='<path>') + + args, vmargs = parser.parse_known_args(args) + + if args.ctwopts: + # Replace spaces with '#' since -G: options cannot contain spaces + # when they are collated in the "jvmci.options" system property + vmargs.append('-G:CompileTheWorldConfig=' + re.sub(r'\s+', '#', args.ctwopts)) + + if args.cp: + cp = os.path.abspath(args.cp) + else: + cp = join(_jdk.home, 'lib', 'modules', 'bootmodules.jimage') + vmargs.append('-G:CompileTheWorldExcludeMethodFilter=sun.awt.X11.*.*') + + # suppress menubar and dock when running on Mac; exclude x11 classes as they may cause vm crashes (on Solaris) + vmargs = ['-Djava.awt.headless=true'] + vmargs + + if _vm.jvmciMode == 'disabled': + vmargs += ['-XX:+CompileTheWorld', '-Xbootclasspath/p:' + cp] + else: + if _vm.jvmciMode == 'jit': + vmargs += ['-XX:+BootstrapJVMCI'] + vmargs += ['-G:CompileTheWorldClasspath=' + cp, 'com.oracle.graal.hotspot.CompileTheWorld'] + + run_vm(vmargs + _noneAsEmptyList(extraVMarguments)) + +class UnitTestRun: + def __init__(self, name, args): + self.name = name + self.args = args + + def run(self, suites, tasks, extraVMarguments=None): + for suite in suites: + with Task(self.name + ': hosted-product ' + suite, tasks) as t: + if t: unittest(['--suite', suite, '--enable-timing', '--verbose', '--fail-fast'] + self.args + _noneAsEmptyList(extraVMarguments)) + +class BootstrapTest: + def __init__(self, name, vmbuild, args, suppress=None): + self.name = name + self.args = args + self.suppress = suppress + + def run(self, tasks, extraVMarguments=None): + with JVMCIMode('jit'): + with Task(self.name, tasks) as t: + if t: + if self.suppress: + out = mx.DuplicateSuppressingStream(self.suppress).write + else: + out = None + run_vm(self.args + _noneAsEmptyList(extraVMarguments) + ['-XX:-TieredCompilation', '-XX:+BootstrapJVMCI', '-version'], out=out) + +def compiler_gate_runner(suites, unit_test_runs, bootstrap_tests, tasks, extraVMarguments=None): + + # Run unit tests in hosted mode + with JVMCIMode('hosted'): + for r in unit_test_runs: + r.run(suites, tasks, extraVMarguments) + + # Run ctw against rt.jar on server-hosted-jvmci + with JVMCIMode('hosted'): + with Task('CTW:hosted', tasks) as t: + if t: ctw(['--ctwopts', '-Inline +ExitVMOnException', '-esa', '-G:+CompileTheWorldMultiThreaded', '-G:-InlineDuringParsing', '-G:-CompileTheWorldVerbose', '-XX:ReservedCodeCacheSize=300m'], _noneAsEmptyList(extraVMarguments)) + + # bootstrap tests + for b in bootstrap_tests: + b.run(tasks, extraVMarguments) + + # run dacapo sanitychecks + for test in sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel='release', extraVmArguments=extraVMarguments) \ + + sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Gate, gateBuildLevel='release', extraVmArguments=extraVMarguments): + with Task(str(test) + ':' + 'release', tasks) as t: + if t and not test.test('jvmci'): + t.abort(test.name + ' Failed') + + # ensure -Xbatch still works + with JVMCIMode('jit'): + with Task('DaCapo_pmd:BatchMode', tasks) as t: + if t: dacapo(_noneAsEmptyList(extraVMarguments) + ['-Xbatch', 'pmd']) + + # ensure -Xcomp still works + with JVMCIMode('jit'): + with Task('XCompMode:product', tasks) as t: + if t: run_vm(_noneAsEmptyList(extraVMarguments) + ['-Xcomp', '-version']) + + +graal_unit_test_runs = [ + UnitTestRun('UnitTests', []), +] + +_registers = 'o0,o1,o2,o3,f8,f9,d32,d34' if mx.get_arch() == 'sparcv9' else 'rbx,r11,r10,r14,xmm3,xmm11,xmm14' + +graal_bootstrap_tests = [ + BootstrapTest('BootstrapWithSystemAssertions', 'fastdebug', ['-esa']), + BootstrapTest('BootstrapWithSystemAssertionsNoCoop', 'fastdebug', ['-esa', '-XX:-UseCompressedOops', '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithGCVecification', 'product', ['-XX:+UnlockDiagnosticVMOptions', '-XX:+VerifyBeforeGC', '-XX:+VerifyAfterGC', '-G:+ExitVMOnException'], suppress=['VerifyAfterGC:', 'VerifyBeforeGC:']), + BootstrapTest('BootstrapWithG1GCVecification', 'product', ['-XX:+UnlockDiagnosticVMOptions', '-XX:-UseSerialGC', '-XX:+UseG1GC', '-XX:+VerifyBeforeGC', '-XX:+VerifyAfterGC', '-G:+ExitVMOnException'], suppress=['VerifyAfterGC:', 'VerifyBeforeGC:']), + BootstrapTest('BootstrapEconomyWithSystemAssertions', 'fastdebug', ['-esa', '-Djvmci.compiler=graal-economy', '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithExceptionEdges', 'fastdebug', ['-esa', '-G:+StressInvokeWithExceptionNode', '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithRegisterPressure', 'product', ['-esa', '-G:RegisterPressure=' + _registers, '-G:+ExitVMOnException']), + BootstrapTest('BootstrapTraceRAWithRegisterPressure', 'product', ['-esa', '-G:+TraceRA', '-G:RegisterPressure=' + _registers, '-G:+ExitVMOnException']), + BootstrapTest('BootstrapWithImmutableCode', 'product', ['-esa', '-G:+ImmutableCode', '-G:+VerifyPhases', '-G:+ExitVMOnException']), +] + +def _graal_gate_runner(args, tasks): + compiler_gate_runner(['graal'], graal_unit_test_runs, graal_bootstrap_tests, tasks, args.extra_vm_argument) + +mx_gate.add_gate_runner(_suite, _graal_gate_runner) +mx_gate.add_gate_argument('--extra-vm-argument', action='append', help='add extra vm argument to gate tasks if applicable (multiple occurrences allowed)') + +def _unittest_vm_launcher(vmArgs, mainClass, mainClassArgs): + run_vm(vmArgs + [mainClass] + mainClassArgs) + +mx_unittest.set_vm_launcher('JDK9 VM launcher', _unittest_vm_launcher) + +def deoptalot(args): + """bootstrap a VM with DeoptimizeALot and VerifyOops on + + If the first argument is a number, the process will be repeated + this number of times. All other arguments are passed to the VM.""" + count = 1 + if len(args) > 0 and args[0].isdigit(): + count = int(args[0]) + del args[0] + + for _ in range(count): + if not run_vm(['-XX:-TieredCompilation', '-XX:+DeoptimizeALot', '-XX:+VerifyOops'] + args + ['-version']) == 0: + mx.abort("Failed") + +def longtests(args): + + deoptalot(['15', '-Xmx48m']) + + dacapo(['100', 'eclipse', '-esa']) + +""" +Extra benchmarks to run from 'bench()'. +""" +extraBenchmarks = [] + +def bench(args): + """run benchmarks and parse their output for results + + Results are JSON formated : {group : {benchmark : score}}.""" + resultFile = None + if '-resultfile' in args: + index = args.index('-resultfile') + if index + 1 < len(args): + resultFile = args[index + 1] + del args[index] + del args[index] + else: + mx.abort('-resultfile must be followed by a file name') + resultFileCSV = None + if '-resultfilecsv' in args: + index = args.index('-resultfilecsv') + if index + 1 < len(args): + resultFileCSV = args[index + 1] + del args[index] + del args[index] + else: + mx.abort('-resultfilecsv must be followed by a file name') + vm = get_vm() + if len(args) is 0: + args = ['all'] + + vmArgs = [arg for arg in args if arg.startswith('-')] + + def benchmarks_in_group(group): + prefix = group + ':' + return [a[len(prefix):] for a in args if a.startswith(prefix)] + + results = {} + benchmarks = [] + # DaCapo + if 'dacapo' in args or 'all' in args: + benchmarks += sanitycheck.getDacapos(level=sanitycheck.SanityCheckLevel.Benchmark) + else: + dacapos = benchmarks_in_group('dacapo') + for dacapo in dacapos: + if dacapo not in sanitycheck.dacapoSanityWarmup.keys(): + mx.abort('Unknown DaCapo : ' + dacapo) + iterations = sanitycheck.dacapoSanityWarmup[dacapo][sanitycheck.SanityCheckLevel.Benchmark] + if iterations > 0: + benchmarks += [sanitycheck.getDacapo(dacapo, ['-n', str(iterations)])] + + if 'scaladacapo' in args or 'all' in args: + benchmarks += sanitycheck.getScalaDacapos(level=sanitycheck.SanityCheckLevel.Benchmark) + else: + scaladacapos = benchmarks_in_group('scaladacapo') + for scaladacapo in scaladacapos: + if scaladacapo not in sanitycheck.dacapoScalaSanityWarmup.keys(): + mx.abort('Unknown Scala DaCapo : ' + scaladacapo) + iterations = sanitycheck.dacapoScalaSanityWarmup[scaladacapo][sanitycheck.SanityCheckLevel.Benchmark] + if iterations > 0: + benchmarks += [sanitycheck.getScalaDacapo(scaladacapo, ['-n', str(iterations)])] + + # Bootstrap + if 'bootstrap' in args or 'all' in args: + benchmarks += sanitycheck.getBootstraps() + # SPECjvm2008 + if 'specjvm2008' in args or 'all' in args: + benchmarks += [sanitycheck.getSPECjvm2008(['-ikv', '-wt', '120', '-it', '120'])] + else: + specjvms = benchmarks_in_group('specjvm2008') + for specjvm in specjvms: + benchmarks += [sanitycheck.getSPECjvm2008(['-ikv', '-wt', '120', '-it', '120', specjvm])] + + if 'specjbb2005' in args or 'all' in args: + benchmarks += [sanitycheck.getSPECjbb2005()] + + if 'specjbb2013' in args: # or 'all' in args //currently not in default set + benchmarks += [sanitycheck.getSPECjbb2013()] + + if 'ctw-full' in args: + benchmarks.append(sanitycheck.getCTW(vm, sanitycheck.CTWMode.Full)) + if 'ctw-noinline' in args: + benchmarks.append(sanitycheck.getCTW(vm, sanitycheck.CTWMode.NoInline)) + + for f in extraBenchmarks: + f(args, vm, benchmarks) + + for test in benchmarks: + for (groupName, res) in test.bench(vm, extraVmOpts=vmArgs).items(): + group = results.setdefault(groupName, {}) + group.update(res) + mx.log(json.dumps(results)) + if resultFile: + with open(resultFile, 'w') as f: + f.write(json.dumps(results)) + if resultFileCSV: + with open(resultFileCSV, 'w') as f: + for key1, value1 in results.iteritems(): + f.write('%s;\n' % (str(key1))) + for key2, value2 in sorted(value1.iteritems()): + f.write('%s; %s;\n' % (str(key2), str(value2))) + +def specjvm2008(args): + """run one or more SPECjvm2008 benchmarks""" + + def launcher(bm, harnessArgs, extraVmOpts): + return sanitycheck.getSPECjvm2008(harnessArgs + [bm]).bench(get_vm(), extraVmOpts=extraVmOpts) + + availableBenchmarks = set(sanitycheck.specjvm2008Names) + if "all" not in args: + # only add benchmark groups if we are not running "all" + for name in sanitycheck.specjvm2008Names: + parts = name.rsplit('.', 1) + if len(parts) > 1: + assert len(parts) == 2 + group = parts[0] + availableBenchmarks.add(group) + + _run_benchmark(args, sorted(availableBenchmarks), launcher) + +def specjbb2013(args): + """run the composite SPECjbb2013 benchmark""" + + def launcher(bm, harnessArgs, extraVmOpts): + assert bm is None + return sanitycheck.getSPECjbb2013(harnessArgs).bench(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, None, launcher) + +def specjbb2005(args): + """run the composite SPECjbb2005 benchmark""" + + def launcher(bm, harnessArgs, extraVmOpts): + assert bm is None + return sanitycheck.getSPECjbb2005(harnessArgs).bench(get_vm(), extraVmOpts=extraVmOpts) + + _run_benchmark(args, None, launcher) + +def _parseVmArgs(jdk, args, addDefaultArgs=True): + args = mx.expand_project_in_args(args, insitu=False) + jacocoArgs = mx_gate.get_jacoco_agent_args() + if jacocoArgs: + args = jacocoArgs + args + + # Support for -G: options + def translateGOption(arg): + if arg.startswith('-G:+'): + if '=' in arg: + mx.abort('Mixing + and = in -G: option specification: ' + arg) + arg = '-Djvmci.option.' + arg[len('-G:+'):] + '=true' + elif arg.startswith('-G:-'): + if '=' in arg: + mx.abort('Mixing - and = in -G: option specification: ' + arg) + arg = '-Djvmci.option.' + arg[len('-G:+'):] + '=false' + elif arg.startswith('-G:'): + arg = '-Djvmci.option.' + arg[len('-G:'):] + return arg + args = map(translateGOption, args) + + bcp = [mx.distribution('truffle:TRUFFLE_API').classpath_repr()] + if _jvmciModes[_vm.jvmciMode]: + bcp.extend([d.get_classpath_repr() for d in _bootClasspathDists]) + + args = ['-Xbootclasspath/p:' + os.pathsep.join(bcp)] + args + + # Set the default JVMCI compiler + jvmciCompiler = _compilers[-1] + args = ['-Djvmci.compiler=' + jvmciCompiler] + args + + if '-version' in args: + ignoredArgs = args[args.index('-version') + 1:] + if len(ignoredArgs) > 0: + mx.log("Warning: The following options will be ignored by the vm because they come after the '-version' argument: " + ' '.join(ignoredArgs)) + return jdk.processArgs(args, addDefaultArgs=addDefaultArgs) + +def run_java(jdk, args, nonZeroIsFatal=True, out=None, err=None, cwd=None, timeout=None, env=None, addDefaultArgs=True): + + args = _parseVmArgs(jdk, args, addDefaultArgs=addDefaultArgs) + + jvmciModeArgs = _jvmciModes[_vm.jvmciMode] + cmd = [jdk.java] + ['-' + get_vm()] + jvmciModeArgs + args + return mx.run(cmd, nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd) + +def run_vm(args, vm=None, nonZeroIsFatal=True, out=None, err=None, cwd=None, timeout=None, debugLevel=None, vmbuild=None): + """run a Java program by executing the java executable in a JVMCI JDK""" + + return run_java(mx.get_jdk(), args, nonZeroIsFatal=nonZeroIsFatal, out=out, err=err, cwd=cwd, timeout=timeout) + +class GraalArchiveParticipant: + def __init__(self, dist): + self.dist = dist + + def __opened__(self, arc, srcArc, services): + self.services = services + self.arc = arc + + def __add__(self, arcname, contents): + if arcname.startswith('META-INF/jvmci.providers/'): + provider = arcname[len('META-INF/jvmci.providers/'):] + for service in contents.strip().split(os.linesep): + assert service + self.services.setdefault(service, []).append(provider) + return True + elif arcname.endswith('_OptionDescriptors.class'): + # Need to create service files for the providers of the + # jdk.vm.ci.options.Options service created by + # jdk.vm.ci.options.processor.OptionProcessor. + provider = arcname[:-len('.class'):].replace('/', '.') + self.services.setdefault('jdk.vm.ci.options.OptionDescriptors', []).append(provider) + return False + + def __addsrc__(self, arcname, contents): + return False + + def __closing__(self): + pass + +mx.update_commands(_suite, { + 'vm': [run_vm, '[-options] class [args...]'], + 'ctw': [ctw, '[-vmoptions|noinline|nocomplex|full]'], + 'dacapo': [dacapo, '[VM options] benchmarks...|"all" [DaCapo options]'], + 'scaladacapo': [scaladacapo, '[VM options] benchmarks...|"all" [Scala DaCapo options]'], + 'specjvm2008': [specjvm2008, '[VM options] benchmarks...|"all" [SPECjvm2008 options]'], + 'specjbb2013': [specjbb2013, '[VM options] [-- [SPECjbb2013 options]]'], + 'specjbb2005': [specjbb2005, '[VM options] [-- [SPECjbb2005 options]]'], + 'bench' : [bench, '[-resultfile file] [all(default)|dacapo|specjvm2008|bootstrap]'], + 'microbench' : [microbench, '[VM options] [-- [JMH options]]'], + 'deoptalot' : [deoptalot, '[n]'], + 'longtests' : [longtests, ''], +}) + +mx.add_argument('-M', '--jvmci-mode', action='store', choices=sorted(_jvmciModes.viewkeys()), help='the JVM variant type to build/run (default: ' + _vm.jvmciMode + ')') + +def mx_post_parse_cmd_line(opts): + if opts.jvmci_mode is not None: + _vm.update(opts.jvmci_mode) + for dist in [d.dist() for d in _bootClasspathDists]: + dist.set_archiveparticipant(GraalArchiveParticipant(dist))
--- a/mx.graal/sanitycheck.py Fri Oct 30 20:55:32 2015 +0100 +++ b/mx.graal/sanitycheck.py Fri Oct 30 20:56:28 2015 +0100 @@ -26,7 +26,6 @@ from outputparser import OutputParser, ValuesMatcher import re, mx, mx_graal, os, sys, StringIO, subprocess from os.path import isfile, join, exists -import mx_jvmci gc = 'UseSerialGC' @@ -190,17 +189,17 @@ return Test("SPECjvm2008", ['-jar', 'SPECjvm2008.jar'] + _noneAsEmptyList(benchArgs), [success], [error], [matcher], vmOpts=['-Xms3g', '-XX:+' + gc, '-XX:-UseCompressedOops'], defaultCwd=specjvm2008) -def getDacapos(level=SanityCheckLevel.Normal, gateBuildLevel=None, dacapoArgs=None): +def getDacapos(level=SanityCheckLevel.Normal, gateBuildLevel=None, dacapoArgs=None, extraVmArguments=None): checks = [] for (bench, ns) in dacapoSanityWarmup.items(): if ns[level] > 0: if gateBuildLevel is None or gateBuildLevel in dacapoGateBuildLevels[bench]: - checks.append(getDacapo(bench, ['-n', str(ns[level])] + _noneAsEmptyList(dacapoArgs))) + checks.append(getDacapo(bench, ['-n', str(ns[level])] + _noneAsEmptyList(dacapoArgs), extraVmArguments=extraVmArguments)) return checks -def getDacapo(name, dacapoArgs=None): +def getDacapo(name, dacapoArgs=None, extraVmArguments=None): dacapo = mx.get_env('DACAPO_CP') if dacapo is None: l = mx.library('DACAPO', False) @@ -221,19 +220,22 @@ dacapoMatcher1 = ValuesMatcher(dacapoTime1, {'group' : 'DaCapo-1stRun', 'name' : '<benchmark>', 'score' : '<time>'}) # Use ipv4 stack for dacapos; tomcat+solaris+ipv6_interface fails (see also: JDK-8072384) - return Test("DaCapo-" + name, ['-jar', mx._cygpathU2W(dacapo), name] + _noneAsEmptyList(dacapoArgs), [dacapoSuccess], [dacapoFail], [dacapoMatcher, dacapoMatcher1], ['-Xms2g', '-XX:+' + gc, '-XX:-UseCompressedOops', "-Djava.net.preferIPv4Stack=true"]) + return Test("DaCapo-" + name, ['-jar', mx._cygpathU2W(dacapo), name] + _noneAsEmptyList(dacapoArgs), [dacapoSuccess], [dacapoFail], + [dacapoMatcher, dacapoMatcher1], + ['-Xms2g', '-XX:+' + gc, '-XX:-UseCompressedOops', "-Djava.net.preferIPv4Stack=true", '-G:+ExitVMOnException'] + + _noneAsEmptyList(extraVmArguments)) -def getScalaDacapos(level=SanityCheckLevel.Normal, gateBuildLevel=None, dacapoArgs=None): +def getScalaDacapos(level=SanityCheckLevel.Normal, gateBuildLevel=None, dacapoArgs=None, extraVmArguments=None): checks = [] for (bench, ns) in dacapoScalaSanityWarmup.items(): if ns[level] > 0: if gateBuildLevel is None or gateBuildLevel in dacapoScalaGateBuildLevels[bench]: - checks.append(getScalaDacapo(bench, ['-n', str(ns[level])] + _noneAsEmptyList(dacapoArgs))) + checks.append(getScalaDacapo(bench, ['-n', str(ns[level])] + _noneAsEmptyList(dacapoArgs), extraVmArguments=extraVmArguments)) return checks -def getScalaDacapo(name, dacapoArgs=None): +def getScalaDacapo(name, dacapoArgs=None, extraVmArguments=None): dacapo = mx.get_env('DACAPO_SCALA_CP') if dacapo is None: l = mx.library('DACAPO_SCALA', False) @@ -251,7 +253,7 @@ dacapoMatcher = ValuesMatcher(dacapoTime, {'group' : "Scala-DaCapo", 'name' : '<benchmark>', 'score' : '<time>'}) - return Test("Scala-DaCapo-" + name, ['-jar', mx._cygpathU2W(dacapo), name] + _noneAsEmptyList(dacapoArgs), [dacapoSuccess], [dacapoFail], [dacapoMatcher], ['-Xms2g', '-XX:+' + gc, '-XX:-UseCompressedOops']) + return Test("Scala-DaCapo-" + name, ['-jar', mx._cygpathU2W(dacapo), name] + _noneAsEmptyList(dacapoArgs), [dacapoSuccess], [dacapoFail], [dacapoMatcher], ['-Xms2g', '-XX:+' + gc, '-XX:-UseCompressedOops'] + _noneAsEmptyList(extraVmArguments)) def getBootstraps(): time = re.compile(r"Bootstrapping Graal\.+ in (?P<time>[0-9]+) ms( \(compiled (?P<methods>[0-9]+) methods\))?") @@ -282,7 +284,7 @@ if vm == 'jvmci': args += ['-XX:+BootstrapGraal'] if mode >= CTWMode.NoInline: - if not mx_jvmci.isJVMCIEnabled(vm): + if not mx_graal.isJVMCIEnabled(vm): args.append('-XX:-Inline') else: args.append('-G:CompileTheWordConfig=-Inline')
--- a/mx.graal/suite.py Fri Oct 30 20:55:32 2015 +0100 +++ b/mx.graal/suite.py Fri Oct 30 20:56:28 2015 +0100 @@ -1,12 +1,28 @@ +import mx +JDK9 = mx.get_jdk(tag='default').javaCompliance >= "1.9" +_8_9 = "1.9" if JDK9 else "1.8" + +def deps(l): + """ Filters out dependencies starting with 'jvmci:' if using JDK9. """ + return [d for d in l if not JDK9 or not d.startswith("jvmci:")] + +def suites(l): + """ Filters out suites named 'jvmci' if using JDK9. """ + return [s for s in l if not JDK9 or not s.get('name') == "jvmci"] + +def ap(name): + return name + "_PROCESSOR" if JDK9 else "jvmci:JVMCI_" + name + "_PROCESSOR" + suite = { - "mxversion" : "5.5.6", + "mxversion" : "5.5.7", "name" : "graal", "imports" : { - "suites": [ + "suites": suites([ { "name" : "jvmci", - "version" : "7d4688ad5afdf6db8e9d250c05f9f0e1bf765361", + "optional" : "true", + "version" : "3c1edc9c60d8f4ecea01794eb0acccea400a89b1", "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"}, @@ -14,13 +30,13 @@ }, { "name" : "truffle", - "version" : "c3ea80aa57628eec5686982fbb2110a48edec36e", + "version" : "fdc687bad5d4abafb8bbb6ab7a0fe00908a00c19", "urls" : [ {"url" : "http://lafo.ssw.uni-linz.ac.at/hg/truffle", "kind" : "hg"}, {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"}, ] }, - ] + ]) }, "defaultLicense" : "GPLv2-CPE", @@ -30,7 +46,6 @@ # ------------- Libraries ------------- "DACAPO" : { - "path" : "lib/dacapo-9.12-bach.jar", "urls" : [ "https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/dacapo-9.12-bach.jar", "http://softlayer.dl.sourceforge.net/project/dacapobench/9.12-bach/dacapo-9.12-bach.jar", @@ -39,7 +54,6 @@ }, "DACAPO_SCALA" : { - "path" : "lib/dacapo-scala-0.1.0-20120216.jar", "urls" : [ "https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/dacapo-scala-0.1.0-20120216.jar", "http://repo.scalabench.org/snapshots/org/scalabench/benchmarks/scala-benchmark-suite/0.1.0-SNAPSHOT/scala-benchmark-suite-0.1.0-20120216.103539-3.jar", @@ -48,18 +62,25 @@ }, "JAVA_ALLOCATION_INSTRUMENTER" : { - "path" : "lib/java-allocation-instrumenter.jar", - "sourcePath" : "lib/java-allocation-instrumenter.jar", "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/java-allocation-instrumenter/java-allocation-instrumenter-8f0db117e64e.jar"], "sha1" : "476d9a44cd19d6b55f81571077dfa972a4f8a083", "bootClassPathAgent" : "true", }, "JMH" : { - "path" : "lib/jmh-runner-1.10.4.jar", "sha1" : "be2e08e6776191e9c559a65b7d34e92e86b4fa5c", "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/jmh/jmh-runner-1.10.4.jar"], }, + + "OPTIONS_PROCESSOR" : { + "sha1" : "66a86a977ae5aaaeb2105b94cbb59e039d0d432d", + "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/jvmci-options-processor.jar"], + }, + + "SERVICE_PROCESSOR" : { + "sha1" : "341cb1c52b4e6194d9edc7a91ffc4d41d0258d94", + "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/jvmci-service-processor.jar"], + }, }, "projects" : { @@ -76,13 +97,13 @@ "com.oracle.nfi.test" : { "subDir" : "graal", "sourceDirs" : ["test"], - "dependencies" : [ + "dependencies" : deps([ "com.oracle.nfi", "jvmci:JVMCI_API", "mx:JUNIT", - ], + ]), "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, }, # ------------- Graal ------------- @@ -91,11 +112,11 @@ "subDir" : "graal", "sourceDirs" : ["src"], "checkstyle" : "com.oracle.graal.graph", - "dependencies" : [ + "dependencies" : deps([ "jvmci:JVMCI_API", - ], - "annotationProcessors" : ["jvmci:JVMCI_OPTIONS_PROCESSOR"], - "javaCompliance" : "1.8", + ]), + "annotationProcessors" : [ap("OPTIONS")], + "javaCompliance" : _8_9, "workingSets" : "JVMCI,Debug", }, @@ -107,20 +128,20 @@ "com.oracle.graal.debug", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "JVMCI,Debug,Test", }, "com.oracle.graal.code" : { "subDir" : "graal", "sourceDirs" : ["src"], - "dependencies" : [ + "dependencies" : deps([ "jvmci:JVMCI_SERVICE", "jvmci:JVMCI_API", - ], - "annotationProcessors" : ["jvmci:JVMCI_SERVICE_PROCESSOR"], + ]), + "annotationProcessors" : [ap("SERVICE")], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal", }, @@ -128,7 +149,7 @@ "subDir" : "graal", "sourceDirs" : ["src"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "API,Graal", }, @@ -136,7 +157,7 @@ "subDir" : "graal", "sourceDirs" : ["src"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "API,Graal", }, @@ -147,18 +168,18 @@ "dependencies" : [ "com.oracle.graal.compiler.test", ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "API,Graal", }, "com.oracle.graal.api.runtime" : { "subDir" : "graal", "sourceDirs" : ["src"], - "dependencies" : [ - "jvmci:JVMCI_SERVICE", - ], + "dependencies" : deps([ + "jvmci:JVMCI_API", + ]), "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "API,Graal", }, @@ -170,38 +191,38 @@ "com.oracle.graal.api.runtime", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "API,Graal,Test", }, "com.oracle.graal.api.replacements" : { "subDir" : "graal", "sourceDirs" : ["src"], - "dependencies" : ["jvmci:JVMCI_API"], + "dependencies" : deps(["jvmci:JVMCI_API"]), "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "API,Graal,Replacements", }, "com.oracle.graal.hotspot" : { "subDir" : "graal", "sourceDirs" : ["src"], - "dependencies" : [ + "dependencies" : deps([ "jvmci:JVMCI_HOTSPOT", - "jvmci:JVMCI_OPTIONS_PROCESSOR", + "com.oracle.graal.api.runtime", "com.oracle.graal.replacements", "com.oracle.graal.runtime", "com.oracle.graal.code", - ], + ]), "checkstyle" : "com.oracle.graal.graph", "annotationProcessors" : [ "GRAAL_NODEINFO_PROCESSOR", "GRAAL_COMPILER_MATCH_PROCESSOR", "GRAAL_REPLACEMENTS_VERIFIER", - "jvmci:JVMCI_OPTIONS_PROCESSOR", - "jvmci:JVMCI_SERVICE_PROCESSOR", + ap("OPTIONS"), + ap("SERVICE"), ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,HotSpot", }, @@ -215,10 +236,10 @@ ], "checkstyle" : "com.oracle.graal.graph", "annotationProcessors" : [ - "jvmci:JVMCI_SERVICE_PROCESSOR", + ap("SERVICE"), "GRAAL_NODEINFO_PROCESSOR" ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,HotSpot,AMD64", }, @@ -231,8 +252,8 @@ "com.oracle.graal.replacements.sparc", ], "checkstyle" : "com.oracle.graal.graph", - "annotationProcessors" : ["jvmci:JVMCI_SERVICE_PROCESSOR"], - "javaCompliance" : "1.8", + "annotationProcessors" : [ap("SERVICE")], + "javaCompliance" : _8_9, "workingSets" : "Graal,HotSpot,SPARC", }, @@ -245,7 +266,7 @@ ], "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,HotSpot,Test", }, @@ -258,7 +279,7 @@ ], "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,HotSpot,AMD64,Test", }, @@ -266,7 +287,7 @@ "subDir" : "graal", "sourceDirs" : ["src"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Graph", }, @@ -277,7 +298,7 @@ "dependencies" : [ "com.oracle.graal.nodeinfo", ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Graph", }, @@ -288,11 +309,10 @@ "com.oracle.graal.nodeinfo", "com.oracle.graal.compiler.common", "com.oracle.graal.api.collections", - "com.oracle.graal.api.runtime", ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : [ - "jvmci:JVMCI_OPTIONS_PROCESSOR", + ap("OPTIONS"), "GRAAL_NODEINFO_PROCESSOR" ], "workingSets" : "Graal,Graph", @@ -304,19 +324,20 @@ "checkstyle" : "com.oracle.graal.graph", "dependencies" : [ "mx:JUNIT", + "com.oracle.graal.api.test", "com.oracle.graal.graph", ], "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Graph,Test", }, "com.oracle.graal.asm" : { "subDir" : "graal", "sourceDirs" : ["src"], - "dependencies" : ["jvmci:JVMCI_API"], + "dependencies" : deps(["jvmci:JVMCI_API"]), "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Assembler", }, @@ -327,7 +348,7 @@ "com.oracle.graal.asm", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Assembler,AMD64", }, @@ -338,7 +359,7 @@ "com.oracle.graal.asm", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Assembler,SPARC", }, @@ -346,7 +367,7 @@ "subDir" : "graal", "sourceDirs" : ["src"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Java", }, @@ -359,7 +380,7 @@ "com.oracle.graal.debug", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Assembler,Test", }, @@ -371,7 +392,7 @@ "com.oracle.graal.asm.amd64", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Assembler,AMD64,Test", }, @@ -382,9 +403,9 @@ "com.oracle.graal.compiler.common", "com.oracle.graal.asm", ], - "annotationProcessors" : ["jvmci:JVMCI_OPTIONS_PROCESSOR"], + "annotationProcessors" : [ap("OPTIONS")], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,LIR", }, @@ -396,7 +417,7 @@ ], "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,LIR", "findbugs" : "false", }, @@ -409,7 +430,7 @@ "com.oracle.graal.lir", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,LIR", }, @@ -420,9 +441,9 @@ "com.oracle.graal.lir", "com.oracle.graal.asm.amd64", ], - "annotationProcessors" : ["jvmci:JVMCI_OPTIONS_PROCESSOR"], + "annotationProcessors" : [ap("OPTIONS")], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,LIR,AMD64", }, @@ -434,7 +455,7 @@ "com.oracle.graal.lir", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,LIR,SPARC", }, @@ -443,7 +464,7 @@ "sourceDirs" : ["src"], "dependencies" : ["com.oracle.graal.nodes"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"], "workingSets" : "API,Graal", }, @@ -458,9 +479,9 @@ "com.oracle.graal.word", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : [ - "jvmci:JVMCI_OPTIONS_PROCESSOR", + ap("OPTIONS"), "GRAAL_REPLACEMENTS_VERIFIER", "GRAAL_NODEINFO_PROCESSOR", ], @@ -476,7 +497,7 @@ "com.oracle.graal.compiler", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : [ "GRAAL_NODEINFO_PROCESSOR", ], @@ -491,7 +512,7 @@ "com.oracle.graal.compiler", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Replacements,SPARC", }, @@ -504,7 +525,7 @@ ], "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Replacements,Test", "jacoco" : "exclude", }, @@ -517,7 +538,7 @@ "com.oracle.graal.graph", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Replacements", }, @@ -531,7 +552,7 @@ "com.oracle.graal.bytecode", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : [ "GRAAL_NODEINFO_PROCESSOR", "GRAAL_REPLACEMENTS_VERIFIER", @@ -544,7 +565,7 @@ "sourceDirs" : ["src"], "dependencies" : ["com.oracle.graal.compiler.test"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Graph", }, @@ -552,9 +573,9 @@ "subDir" : "graal", "sourceDirs" : ["src"], "dependencies" : ["com.oracle.graal.nodes"], - "annotationProcessors" : ["jvmci:JVMCI_OPTIONS_PROCESSOR"], + "annotationProcessors" : [ap("OPTIONS")], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Phases", }, @@ -564,10 +585,10 @@ "dependencies" : ["com.oracle.graal.phases"], "annotationProcessors" : [ "GRAAL_NODEINFO_PROCESSOR", - "jvmci:JVMCI_OPTIONS_PROCESSOR" + ap("OPTIONS") ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Phases", }, @@ -575,11 +596,12 @@ "subDir" : "graal", "sourceDirs" : ["src"], "dependencies" : [ + "com.oracle.graal.api.test", "com.oracle.graal.runtime", "mx:JUNIT", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Test", }, @@ -588,11 +610,11 @@ "sourceDirs" : ["src"], "dependencies" : ["com.oracle.graal.phases.common"], "annotationProcessors" : [ - "jvmci:JVMCI_OPTIONS_PROCESSOR", + ap("OPTIONS"), "GRAAL_NODEINFO_PROCESSOR" ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Phases", }, @@ -601,7 +623,7 @@ "sourceDirs" : ["src"], "dependencies" : ["JMH"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : ["JMH"], "workingSets" : "Graal,Bench", }, @@ -611,11 +633,12 @@ "sourceDirs" : ["src"], "dependencies" : [ "JMH", + "com.oracle.graal.api.test", "com.oracle.graal.java", "com.oracle.graal.runtime", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : ["JMH"], "workingSets" : "Graal,Bench", }, @@ -624,9 +647,9 @@ "subDir" : "graal", "sourceDirs" : ["src"], "dependencies" : ["com.oracle.graal.phases.common"], - "annotationProcessors" : ["jvmci:JVMCI_OPTIONS_PROCESSOR"], + "annotationProcessors" : [ap("OPTIONS")], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Phases", }, @@ -638,10 +661,10 @@ "com.oracle.graal.loop", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : [ - "jvmci:JVMCI_SERVICE_PROCESSOR", - "jvmci:JVMCI_OPTIONS_PROCESSOR", + ap("SERVICE"), + ap("OPTIONS"), ], "workingSets" : "Graal", }, @@ -653,7 +676,7 @@ "com.oracle.graal.compiler", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Codegen", }, @@ -670,19 +693,19 @@ "GRAAL_NODEINFO_PROCESSOR", "GRAAL_COMPILER_MATCH_PROCESSOR" ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,AMD64", }, "com.oracle.graal.compiler.amd64.test" : { "subDir" : "graal", "sourceDirs" : ["src"], - "dependencies" : [ + "dependencies" : deps([ "com.oracle.graal.lir.jtt", "jvmci:JVMCI_HOTSPOT" - ], + ]), "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,AMD64,Test", }, @@ -698,19 +721,19 @@ "GRAAL_NODEINFO_PROCESSOR", "GRAAL_COMPILER_MATCH_PROCESSOR" ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,SPARC", }, "com.oracle.graal.compiler.sparc.test" : { "subDir" : "graal", "sourceDirs" : ["src"], - "dependencies" : [ + "dependencies" : deps([ "com.oracle.graal.compiler.test", "jvmci:JVMCI_HOTSPOT" - ], + ]), "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,SPARC,Test", }, @@ -719,7 +742,7 @@ "sourceDirs" : ["src"], "dependencies" : ["com.oracle.graal.compiler"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal", }, @@ -730,9 +753,9 @@ "com.oracle.graal.phases", "com.oracle.graal.graphbuilderconf", ], - "annotationProcessors" : ["jvmci:JVMCI_OPTIONS_PROCESSOR"], + "annotationProcessors" : [ap("OPTIONS")], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Java", }, @@ -743,7 +766,7 @@ "com.oracle.graal.nodes", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Java", }, @@ -753,9 +776,9 @@ "dependencies" : [ "com.oracle.graal.debug", ], - "annotationProcessors" : ["jvmci:JVMCI_OPTIONS_PROCESSOR"], + "annotationProcessors" : [ap("OPTIONS")], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Java", }, @@ -768,11 +791,11 @@ "com.oracle.graal.compiler", ], "annotationProcessors" : [ - "jvmci:JVMCI_OPTIONS_PROCESSOR", - "jvmci:JVMCI_SERVICE_PROCESSOR" + ap("OPTIONS"), + ap("SERVICE") ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Graph", }, @@ -783,7 +806,7 @@ "mx:JUNIT", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Test", }, @@ -800,7 +823,7 @@ ], "annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Test", "jacoco" : "exclude", }, @@ -812,7 +835,7 @@ "com.oracle.graal.compiler.test", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Test", "jacoco" : "exclude", "findbugs" : "false", @@ -825,6 +848,7 @@ "sourceDirs" : ["src"], "dependencies" : [ "truffle:TRUFFLE_API", + "com.oracle.graal.api.runtime", "com.oracle.graal.runtime", "com.oracle.graal.replacements", ], @@ -832,11 +856,11 @@ "annotationProcessors" : [ "GRAAL_NODEINFO_PROCESSOR", "GRAAL_REPLACEMENTS_VERIFIER", - "jvmci:JVMCI_OPTIONS_PROCESSOR", - "jvmci:JVMCI_SERVICE_PROCESSOR", + ap("OPTIONS"), + ap("SERVICE"), "truffle:TRUFFLE_DSL_PROCESSOR", ], - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Truffle", "jacoco" : "exclude", }, @@ -854,7 +878,7 @@ "truffle:TRUFFLE_DSL_PROCESSOR" ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "workingSets" : "Graal,Truffle,Test", "jacoco" : "exclude", }, @@ -868,8 +892,11 @@ "com.oracle.nfi", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", - "annotationProcessors" : ["jvmci:JVMCI_SERVICE_PROCESSOR"], + "javaCompliance" : _8_9, + "annotationProcessors" : [ + ap("OPTIONS"), + ap("SERVICE") + ], "workingSets" : "Graal,Truffle", }, @@ -881,9 +908,9 @@ "com.oracle.graal.hotspot.amd64", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", + "javaCompliance" : _8_9, "annotationProcessors" : [ - "jvmci:JVMCI_SERVICE_PROCESSOR", + ap("SERVICE"), ], "workingSets" : "Graal,Truffle", }, @@ -896,10 +923,27 @@ "com.oracle.graal.asm.sparc", ], "checkstyle" : "com.oracle.graal.graph", - "javaCompliance" : "1.8", - "annotationProcessors" : ["jvmci:JVMCI_SERVICE_PROCESSOR"], + "javaCompliance" : _8_9, + "annotationProcessors" : [ap("SERVICE")], "workingSets" : "Graal,Truffle,SPARC", - } + }, + + # ------------- Salver ------------- + + "com.oracle.graal.salver" : { + "subDir" : "graal", + "sourceDirs" : ["src"], + "dependencies" : [ + "com.oracle.graal.java", + ], + "annotationProcessors" : [ + ap("OPTIONS"), + ap("SERVICE"), + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : _8_9, + "workingSets" : "Graal", + }, }, "distributions" : { @@ -907,32 +951,27 @@ # ------------- Distributions ------------- "GRAAL_NODEINFO" : { - "path" : "build/graal-nodeinfo.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-nodeinfo.src.zip", "dependencies" : [ "com.oracle.graal.nodeinfo", ], }, "GRAAL_API" : { - "path" : "build/graal-api.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-api.src.zip", "dependencies" : [ "com.oracle.graal.api.replacements", + "com.oracle.graal.api.runtime", "com.oracle.graal.graph", ], - "distDependencies" : [ + "distDependencies" : deps([ "jvmci:JVMCI_API", "GRAAL_NODEINFO", - ], + ]), }, "GRAAL_COMPILER" : { - "path" : "build/graal-compiler.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-compiler.src.zip", "dependencies" : [ "com.oracle.graal.compiler", ], @@ -942,9 +981,7 @@ }, "GRAAL" : { - "path" : "build/graal.jar", "subDir" : "graal", - "sourcesPath" : "build/graal.src.zip", "dependencies" : [ "com.oracle.graal.replacements", "com.oracle.graal.runtime", @@ -954,6 +991,7 @@ "com.oracle.graal.replacements.amd64", "com.oracle.graal.compiler.sparc", "com.oracle.graal.replacements.sparc", + "com.oracle.graal.salver", ], "distDependencies" : [ "GRAAL_API", @@ -962,26 +1000,21 @@ }, "GRAAL_HOTSPOT" : { - "path" : "build/graal-hotspot.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-hotspot.src.zip", "dependencies" : [ "com.oracle.graal.hotspot.amd64", "com.oracle.graal.hotspot.sparc", "com.oracle.graal.hotspot", ], - "distDependencies" : [ + "distDependencies" : deps([ "jvmci:JVMCI_HOTSPOT", - "jvmci:JVMCI_OPTIONS_PROCESSOR", "GRAAL_COMPILER", "GRAAL", - ], + ]), }, "GRAAL_TEST" : { - "path" : "build/graal-test.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-test.src.zip", "dependencies" : [ "com.oracle.graal.api.test", "com.oracle.graal.api.directives.test", @@ -995,10 +1028,10 @@ "com.oracle.graal.nodes.test", "com.oracle.graal.phases.common.test", ], - "distDependencies" : [ + "distDependencies" : deps([ "GRAAL_HOTSPOT", "jvmci:JVMCI_HOTSPOT", - ], + ]), "exclude" : [ "mx:JUNIT", "JAVA_ALLOCATION_INSTRUMENTER" @@ -1006,9 +1039,7 @@ }, "GRAAL_TRUFFLE" : { - "path" : "build/graal-truffle.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-truffle.src.zip", "dependencies" : [ "com.oracle.graal.truffle", ], @@ -1019,9 +1050,7 @@ }, "GRAAL_TRUFFLE_HOTSPOT" : { - "path" : "build/graal-truffle-hotspot.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-truffle-hotspot.src.zip", "dependencies" : [ "com.oracle.graal.truffle.hotspot.amd64", "com.oracle.graal.truffle.hotspot.sparc" @@ -1034,9 +1063,7 @@ }, "GRAAL_TRUFFLE_TEST" : { - "path" : "build/graal-truffle-test.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-truffle-test.src.zip", "dependencies" : [ "com.oracle.graal.truffle.test" ], @@ -1048,9 +1075,7 @@ }, "GRAAL_NODEINFO_PROCESSOR" : { - "path" : "build/graal-nodeinfo-processor.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-nodeinfo-processor.src.zip", "dependencies" : ["com.oracle.graal.nodeinfo.processor"], "distDependencies" : [ "GRAAL_NODEINFO", @@ -1058,9 +1083,7 @@ }, "GRAAL_REPLACEMENTS_VERIFIER" : { - "path" : "build/graal-replacements-verifier.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-replacements-verifier.src.zip", "dependencies" : ["com.oracle.graal.replacements.verifier"], "distDependencies" : [ "GRAAL_API", @@ -1068,9 +1091,7 @@ }, "GRAAL_COMPILER_MATCH_PROCESSOR" : { - "path" : "build/graal-compiler-match-processor.jar", "subDir" : "graal", - "sourcesPath" : "build/graal-compiler-match-processor.src.zip", "dependencies" : ["com.oracle.graal.compiler.match.processor"], "distDependencies" : [ "GRAAL_COMPILER",