# HG changeset patch # User Stefan Anzinger # Date 1411144021 25200 # Node ID b8f54c5ec73a7d0e86f5c2392953c635dcd6a43c # Parent 9df38e5fbed68987f8ec72d52f60bc7887fcee85# Parent 4a955509b98a60fa34055245c20c604a689e7611 Merge diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java --- a/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java Fri Sep 19 09:27:01 2014 -0700 @@ -685,6 +685,16 @@ } } + @Test + public void isTrustedInterfaceTypeTest() { + for (Class c : classes) { + ResolvedJavaType type = metaAccess.lookupJavaType(c); + if (TrustedInterface.class.isAssignableFrom(c)) { + assertTrue(type.isTrustedInterfaceType()); + } + } + } + private Method findTestMethod(Method apiMethod) { String testName = apiMethod.getName() + "Test"; for (Method m : getClass().getDeclaredMethods()) { @@ -731,5 +741,4 @@ } } } - } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaType.java Fri Sep 19 09:27:01 2014 -0700 @@ -165,9 +165,9 @@ ResolvedJavaType asExactType(); /** - * Gets the super class of this type. If this type represents either the {@code Object} class, a - * primitive type, or void, then null is returned. If this object represents an array class or - * an interface then the type object representing the {@code Object} class is returned. + * Gets the super class of this type. If this type represents either the {@code Object} class, + * an interface, a primitive type, or void, then null is returned. If this object represents an + * array class then the type object representing the {@code Object} class is returned. */ ResolvedJavaType getSuperclass(); @@ -336,4 +336,10 @@ * method is similar to {@link Array#newInstance(Class, int)}. */ Constant newArray(int length); + + /** + * Returns true if this type represents and interface and it should be trusted even in places + * where the JVM verifier would not give any guarantees other than {@link Object}. + */ + boolean isTrustedInterfaceType(); } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/TrustedInterface.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/TrustedInterface.java Fri Sep 19 09:27:01 2014 -0700 @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2014, 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.api.meta; + +/** + * Interfaces extanding this interface should be trusted by the compiler. See + * {@link ResolvedJavaType#isTrustedInterfaceType()}. + * + */ +public interface TrustedInterface { + +} diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampFactory.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampFactory.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/StampFactory.java Fri Sep 19 09:27:01 2014 -0700 @@ -224,19 +224,48 @@ } public static Stamp declared(ResolvedJavaType type, boolean nonNull) { - return object(type, false, nonNull); + return object(type, false, nonNull, false); + } + + public static Stamp declaredNonNull(ResolvedJavaType type, boolean trustInterfaces) { + return declared(type, true, trustInterfaces); + } + + public static Stamp declared(ResolvedJavaType type, boolean nonNull, boolean trustInterfaces) { + return object(type, false, nonNull, trustInterfaces); } - public static Stamp object(ResolvedJavaType type, boolean exactType, boolean nonNull) { + private static ResolvedJavaType filterInterfaceTypesOut(ResolvedJavaType type) { + if (type.isArray()) { + ResolvedJavaType componentType = filterInterfaceTypesOut(type.getComponentType()); + if (componentType != null) { + return componentType.getArrayClass(); + } + return type.getSuperclass().getArrayClass(); // arrayType.getSuperClass() == Object type + } + if (type.isInterface() && !type.isTrustedInterfaceType()) { + return null; + } + return type; + } + + public static Stamp object(ResolvedJavaType type, boolean exactType, boolean nonNull, boolean trustInterfaces) { assert type != null; assert type.getKind() == Kind.Object; - ResolvedJavaType exact = type.asExactType(); + ResolvedJavaType trustedtype; + if (!trustInterfaces) { + trustedtype = filterInterfaceTypesOut(type); + assert !exactType || trustedtype.equals(type); + } else { + trustedtype = type; + } + ResolvedJavaType exact = trustedtype != null ? trustedtype.asExactType() : null; if (exact != null) { - assert !exactType || type.equals(exact); + assert !exactType || trustedtype.equals(exact); return new ObjectStamp(exact, true, nonNull, false); - } else { - return new ObjectStamp(type, exactType, nonNull, false); } + assert !exactType || AbstractObjectStamp.isConcreteType(trustedtype); + return new ObjectStamp(trustedtype, exactType, nonNull, false); } public static Stamp exactNonNull(ResolvedJavaType type) { diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java Fri Sep 19 09:27:01 2014 -0700 @@ -32,6 +32,7 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; +import com.oracle.graal.debug.internal.*; import com.oracle.graal.graph.Graph.DuplicationReplacement; import com.oracle.graal.graph.Node.Input; import com.oracle.graal.graph.Node.Successor; @@ -50,6 +51,8 @@ private static final Object GetNodeClassLock = new Object(); + private static final DebugTimer NodeClassCreation = Debug.timer("NodeClassCreation"); + /** * Gets the {@link NodeClass} associated with a given {@link Class}. */ @@ -64,23 +67,30 @@ // The creation of a NodeClass must be serialized as the NodeClass constructor accesses // both FieldIntrospection.allClasses and NodeClass.nextIterableId. synchronized (GetNodeClassLock) { - value = (NodeClass) allClasses.get(key); - if (value == null) { - GeneratedNode gen = c.getAnnotation(GeneratedNode.class); - if (gen != null) { - Class originalNodeClass = (Class) gen.value(); - value = (NodeClass) allClasses.get(originalNodeClass); - assert value != null; - if (value.genClass == null) { - value.genClass = (Class) c; + try (TimerCloseable t = NodeClassCreation.start()) { + value = (NodeClass) allClasses.get(key); + if (value == null) { + GeneratedNode gen = c.getAnnotation(GeneratedNode.class); + if (gen != null) { + Class originalNodeClass = (Class) gen.value(); + value = (NodeClass) allClasses.get(originalNodeClass); + assert value != null; + if (value.genClass == null) { + value.genClass = (Class) c; + } else { + assert value.genClass == c; + } } else { - assert value.genClass == c; + Class superclass = c.getSuperclass(); + if (superclass != NODE_CLASS) { + // Ensure NodeClass for superclass exists + get(superclass); + } + value = new NodeClass(key); } - } else { - value = new NodeClass(key); + Object old = allClasses.putIfAbsent(key, value); + assert old == null : old + " " + key; } - Object old = allClasses.putIfAbsent(key, value); - assert old == null : old + " " + key; } } } @@ -243,30 +253,19 @@ } else if (IterableNodeType.class.isAssignableFrom(clazz)) { ITERABLE_NODE_TYPES.increment(); this.iterableId = nextIterableId++; - List existingClasses = new LinkedList<>(); - for (FieldIntrospection nodeClass : allClasses.values()) { - // There are duplicate entries in allClasses when using generated nodes - // hence the extra logic below guarded by USE_GENERATED_NODES - if (clazz.isAssignableFrom(nodeClass.getClazz())) { - if (!USE_GENERATED_NODES || !existingClasses.contains(nodeClass)) { - existingClasses.add((NodeClass) nodeClass); - } + + Class superclass = clazz.getSuperclass(); + while (superclass != NODE_CLASS) { + if (IterableNodeType.class.isAssignableFrom(superclass)) { + NodeClass superNodeClass = NodeClass.get(superclass); + assert !containsId(this.iterableId, superNodeClass.iterableIds); + superNodeClass.iterableIds = Arrays.copyOf(superNodeClass.iterableIds, superNodeClass.iterableIds.length + 1); + superNodeClass.iterableIds[superNodeClass.iterableIds.length - 1] = this.iterableId; } - if (nodeClass.getClazz().isAssignableFrom(clazz) && IterableNodeType.class.isAssignableFrom(nodeClass.getClazz())) { - NodeClass superNodeClass = (NodeClass) nodeClass; - if (!containsId(this.iterableId, superNodeClass.iterableIds)) { - superNodeClass.iterableIds = Arrays.copyOf(superNodeClass.iterableIds, superNodeClass.iterableIds.length + 1); - superNodeClass.iterableIds[superNodeClass.iterableIds.length - 1] = this.iterableId; - } - } + superclass = superclass.getSuperclass(); } - int[] ids = new int[existingClasses.size() + 1]; - ids[0] = iterableId; - int i = 1; - for (NodeClass other : existingClasses) { - ids[i++] = other.iterableId; - } - this.iterableIds = ids; + + this.iterableIds = new int[]{iterableId}; } else { this.iterableId = Node.NOT_ITERABLE; this.iterableIds = null; diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompilationTask.java Fri Sep 19 09:27:01 2014 -0700 @@ -29,6 +29,7 @@ import static com.oracle.graal.compiler.common.UnsafeAccess.*; import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.InitTimer.*; +import static com.oracle.graal.hotspot.meta.HotSpotSuitesProvider.*; import static com.oracle.graal.nodes.StructuredGraph.*; import static com.oracle.graal.phases.common.inlining.InliningUtil.*; @@ -129,7 +130,8 @@ } protected PhaseSuite getGraphBuilderSuite(HotSpotProviders providers) { - PhaseSuite suite = providers.getSuites().getDefaultGraphBuilderSuite(); + PhaseSuite suite = withSimpleDebugInfoIfRequested(providers.getSuites().getDefaultGraphBuilderSuite()); + boolean osrCompilation = entryBCI != StructuredGraph.INVOCATION_ENTRY_BCI; if (osrCompilation) { suite = suite.copy(); diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java Fri Sep 19 09:27:01 2014 -0700 @@ -853,4 +853,11 @@ public String toString() { return "HotSpotType<" + getName() + ", resolved>"; } + + private static final ResolvedJavaType trustedInterfaceType = fromClass(TrustedInterface.class); + + @Override + public boolean isTrustedInterfaceType() { + return trustedInterfaceType.isAssignableFrom(this); + } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedPrimitiveType.java Fri Sep 19 09:27:01 2014 -0700 @@ -272,4 +272,9 @@ public Constant newArray(int length) { return HotSpotObjectConstant.forObject(Array.newInstance(mirror(), length)); } + + @Override + public boolean isTrustedInterfaceType() { + return false; + } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotSuitesProvider.java Fri Sep 19 09:27:01 2014 -0700 @@ -25,6 +25,7 @@ import static com.oracle.graal.compiler.common.GraalOptions.*; import com.oracle.graal.hotspot.*; +import com.oracle.graal.hotspot.bridge.*; import com.oracle.graal.hotspot.phases.*; import com.oracle.graal.java.*; import com.oracle.graal.java.GraphBuilderConfiguration.*; @@ -77,10 +78,28 @@ protected PhaseSuite createGraphBuilderSuite() { PhaseSuite suite = new PhaseSuite<>(); GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault(); - if (runtime.getCompilerToVM().shouldDebugNonSafepoints()) { - config = config.withDebugInfoMode(DebugInfoMode.Simple); - } suite.appendPhase(new GraphBuilderPhase(config)); return suite; } + + /** + * Modifies the {@link GraphBuilderConfiguration} to build extra + * {@linkplain DebugInfoMode#Simple debug info} if the VM + * {@linkplain CompilerToVM#shouldDebugNonSafepoints() requests} it. + * + * @param gbs the current graph builder suite + * @return a possibly modified graph builder suite + */ + public static PhaseSuite withSimpleDebugInfoIfRequested(PhaseSuite gbs) { + if (HotSpotGraalRuntime.runtime().getCompilerToVM().shouldDebugNonSafepoints()) { + PhaseSuite newGbs = gbs.copy(); + GraphBuilderPhase graphBuilderPhase = (GraphBuilderPhase) newGbs.findPhase(GraphBuilderPhase.class).previous(); + GraphBuilderConfiguration graphBuilderConfig = graphBuilderPhase.getGraphBuilderConfig(); + GraphBuilderPhase newGraphBuilderPhase = new GraphBuilderPhase(graphBuilderConfig.withDebugInfoMode(DebugInfoMode.Simple)); + newGbs.findPhase(GraphBuilderPhase.class).set(newGraphBuilderPhase); + return newGbs; + } + return gbs; + } + } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/UntrustedInterfaces.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.jtt/src/com/oracle/graal/jtt/except/UntrustedInterfaces.java Fri Sep 19 09:27:01 2014 -0700 @@ -0,0 +1,278 @@ +/* + * Copyright (c) 2014, 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.jtt.except; + +import org.junit.*; +import org.objectweb.asm.*; + +import com.oracle.graal.jtt.*; + +public class UntrustedInterfaces extends JTTTest { + + public interface CallBack { + public int callBack(TestInterface ti); + } + + private interface TestInterface { + int method(); + } + + /** + * What a GoodPill would look like: + * + *
+     * private static final class GoodPill extends Pill {
+     *     public void setField() {
+     *         field = new TestConstant();
+     *     }
+     *
+     *     public void setStaticField() {
+     *         staticField = new TestConstant();
+     *     }
+     *
+     *     public int callMe(CallBack callback) {
+     *         return callback.callBack(new TestConstant());
+     *     }
+     *
+     *     public TestInterface get() {
+     *         return new TestConstant();
+     *     }
+     * }
+     *
+     * private static final class TestConstant implements TestInterface {
+     *     public int method() {
+     *         return 42;
+     *     }
+     * }
+     * 
+ */ + public static abstract class Pill { + public static TestInterface staticField; + public TestInterface field; + + public abstract void setField(); + + public abstract void setStaticField(); + + public abstract int callMe(CallBack callback); + + public abstract TestInterface get(); + } + + public int callBack(TestInterface list) { + return list.method(); + } + + public int staticFieldInvoke(Pill pill) { + pill.setStaticField(); + return Pill.staticField.method(); + } + + public int fieldInvoke(Pill pill) { + pill.setField(); + return pill.field.method(); + } + + public int argumentInvoke(Pill pill) { + return pill.callMe(ti -> ti.method()); + } + + public int returnInvoke(Pill pill) { + return pill.get().method(); + } + + @SuppressWarnings("cast") + public boolean staticFieldInstanceof(Pill pill) { + pill.setStaticField(); + return Pill.staticField instanceof TestInterface; + } + + @SuppressWarnings("cast") + public boolean fieldInstanceof(Pill pill) { + pill.setField(); + return pill.field instanceof TestInterface; + } + + @SuppressWarnings("cast") + public int argumentInstanceof(Pill pill) { + return pill.callMe(ti -> ti instanceof TestInterface ? 42 : 24); + } + + @SuppressWarnings("cast") + public boolean returnInstanceof(Pill pill) { + return pill.get() instanceof TestInterface; + } + + public TestInterface staticFieldCheckcast(Pill pill) { + pill.setStaticField(); + return TestInterface.class.cast(Pill.staticField); + } + + public TestInterface fieldCheckcast(Pill pill) { + pill.setField(); + return TestInterface.class.cast(pill.field); + } + + public int argumentCheckcast(Pill pill) { + return pill.callMe(ti -> TestInterface.class.cast(ti).method()); + } + + public TestInterface returnCheckcast(Pill pill) { + return TestInterface.class.cast(pill.get()); + } + + private static Pill poisonPill; + + @BeforeClass + public static void setup() throws InstantiationException, IllegalAccessException, ClassNotFoundException { + poisonPill = (Pill) new PoisonLoader().findClass(PoisonLoader.POISON_IMPL_NAME).newInstance(); + } + + @Test + public void testStaticField0() { + runTest("staticFieldInvoke", poisonPill); + } + + @Test + public void testStaticField1() { + runTest("staticFieldInstanceof", poisonPill); + } + + @Test + public void testStaticField2() { + runTest("staticFieldCheckcast", poisonPill); + } + + @Test + public void testField0() { + runTest("fieldInvoke", poisonPill); + } + + @Test + public void testField1() { + runTest("fieldInstanceof", poisonPill); + } + + @Test + public void testField2() { + runTest("fieldCheckcast", poisonPill); + } + + @Test + public void testArgument0() { + runTest("argumentInvoke", poisonPill); + } + + @Test + public void testArgument1() { + runTest("argumentInstanceof", poisonPill); + } + + @Test + public void testArgument2() { + runTest("argumentCheckcast", poisonPill); + } + + @Test + public void testReturn0() { + runTest("returnInvoke", poisonPill); + } + + @Test + public void testReturn1() { + runTest("returnInstanceof", poisonPill); + } + + @Test + public void testReturn2() { + runTest("returnCheckcast", poisonPill); + } + + private static class PoisonLoader extends ClassLoader { + public static final String POISON_IMPL_NAME = "com.oracle.graal.jtt.except.PoisonPill"; + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + if (name.equals(POISON_IMPL_NAME)) { + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); + + cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, POISON_IMPL_NAME.replace('.', '/'), null, Type.getInternalName(Pill.class), null); + // constructor + MethodVisitor constructor = cw.visitMethod(Opcodes.ACC_PUBLIC, "", "()V", null, null); + constructor.visitCode(); + constructor.visitVarInsn(Opcodes.ALOAD, 0); + constructor.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(Pill.class), "", "()V", false); + constructor.visitInsn(Opcodes.RETURN); + constructor.visitMaxs(0, 0); + constructor.visitEnd(); + + MethodVisitor setList = cw.visitMethod(Opcodes.ACC_PUBLIC, "setField", "()V", null, null); + setList.visitCode(); + setList.visitVarInsn(Opcodes.ALOAD, 0); + setList.visitTypeInsn(Opcodes.NEW, Type.getInternalName(Object.class)); + setList.visitInsn(Opcodes.DUP); + setList.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(Object.class), "", "()V", false); + setList.visitFieldInsn(Opcodes.PUTFIELD, Type.getInternalName(Pill.class), "field", Type.getDescriptor(TestInterface.class)); + setList.visitInsn(Opcodes.RETURN); + setList.visitMaxs(0, 0); + setList.visitEnd(); + + MethodVisitor setStaticList = cw.visitMethod(Opcodes.ACC_PUBLIC, "setStaticField", "()V", null, null); + setStaticList.visitCode(); + setStaticList.visitTypeInsn(Opcodes.NEW, Type.getInternalName(Object.class)); + setStaticList.visitInsn(Opcodes.DUP); + setStaticList.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(Object.class), "", "()V", false); + setStaticList.visitFieldInsn(Opcodes.PUTSTATIC, Type.getInternalName(Pill.class), "staticField", Type.getDescriptor(TestInterface.class)); + setStaticList.visitInsn(Opcodes.RETURN); + setStaticList.visitMaxs(0, 0); + setStaticList.visitEnd(); + + MethodVisitor callMe = cw.visitMethod(Opcodes.ACC_PUBLIC, "callMe", Type.getMethodDescriptor(Type.INT_TYPE, Type.getType(CallBack.class)), null, null); + callMe.visitCode(); + callMe.visitVarInsn(Opcodes.ALOAD, 1); + callMe.visitTypeInsn(Opcodes.NEW, Type.getInternalName(Object.class)); + callMe.visitInsn(Opcodes.DUP); + callMe.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(Object.class), "", "()V", false); + callMe.visitMethodInsn(Opcodes.INVOKEINTERFACE, Type.getInternalName(CallBack.class), "callBack", Type.getMethodDescriptor(Type.INT_TYPE, Type.getType(TestInterface.class)), true); + callMe.visitInsn(Opcodes.IRETURN); + callMe.visitMaxs(0, 0); + callMe.visitEnd(); + + MethodVisitor getList = cw.visitMethod(Opcodes.ACC_PUBLIC, "get", Type.getMethodDescriptor(Type.getType(TestInterface.class)), null, null); + getList.visitCode(); + getList.visitTypeInsn(Opcodes.NEW, Type.getInternalName(Object.class)); + getList.visitInsn(Opcodes.DUP); + getList.visitMethodInsn(Opcodes.INVOKESPECIAL, Type.getInternalName(Object.class), "", "()V", false); + getList.visitInsn(Opcodes.ARETURN); + getList.visitMaxs(0, 0); + getList.visitEnd(); + + cw.visitEnd(); + + byte[] bytes = cw.toByteArray(); + return defineClass(name, bytes, 0, bytes.length); + } + return super.findClass(name); + } + } +} diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/AbstractObjectStampTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/AbstractObjectStampTest.java Fri Sep 19 09:27:01 2014 -0700 @@ -0,0 +1,74 @@ +/* + * 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.nodes.test; + +import org.junit.*; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.type.*; +import com.oracle.graal.compiler.test.*; + +public abstract class AbstractObjectStampTest extends GraalCompilerTest { + + protected static class A { + + } + + protected static class B extends A { + + } + + protected static class C extends B implements I { + + } + + protected static class D extends A { + + } + + protected abstract static class E extends A { + + } + + protected interface I { + + } + + protected static Stamp join(Stamp a, Stamp b) { + Stamp ab = a.join(b); + Stamp ba = b.join(a); + Assert.assertEquals(ab, ba); + return ab; + } + + protected static Stamp meet(Stamp a, Stamp b) { + Stamp ab = a.meet(b); + Stamp ba = b.meet(a); + Assert.assertEquals(ab, ba); + return ab; + } + + protected ResolvedJavaType getType(Class clazz) { + return getMetaAccess().lookupJavaType(clazz); + } +} diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java --- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampJoinTest.java Fri Sep 19 09:27:01 2014 -0700 @@ -28,7 +28,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodes.type.*; -public class ObjectStampJoinTest extends ObjectStampTest { +public class ObjectStampJoinTest extends AbstractObjectStampTest { // class A // class B extends A @@ -124,14 +124,14 @@ @Test public void testJoinInterface0() { Stamp a = StampFactory.declared(getType(A.class)); - Stamp i = StampFactory.declared(getType(I.class)); + Stamp i = StampFactory.declared(getType(I.class), false, true); Assert.assertNotSame(StampFactory.illegal(Kind.Object), join(a, i)); } @Test public void testJoinInterface1() { Stamp aNonNull = StampFactory.declaredNonNull(getType(A.class)); - Stamp i = StampFactory.declared(getType(I.class)); + Stamp i = StampFactory.declared(getType(I.class), false, true); Stamp join = join(aNonNull, i); Assert.assertTrue(join instanceof ObjectStamp); Assert.assertTrue(((ObjectStamp) join).nonNull()); @@ -140,9 +140,16 @@ @Test public void testJoinInterface2() { Stamp bExact = StampFactory.exactNonNull(getType(B.class)); - Stamp i = StampFactory.declared(getType(I.class)); + Stamp i = StampFactory.declared(getType(I.class), false, true); Stamp join = join(i, bExact); Assert.assertEquals(StampFactory.illegal(Kind.Object), join); } + @Test + public void testJoinInterface3() { + Stamp bExact = StampFactory.exactNonNull(getType(B.class)); + Stamp i = StampFactory.declared(getType(I.class)); // not trusted + Stamp join = join(i, bExact); + Assert.assertEquals(bExact, join); + } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampMeetTest.java --- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampMeetTest.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampMeetTest.java Fri Sep 19 09:27:01 2014 -0700 @@ -27,7 +27,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -public class ObjectStampMeetTest extends ObjectStampTest { +public class ObjectStampMeetTest extends AbstractObjectStampTest { // class A // class B extends A @@ -104,7 +104,7 @@ @Test public void testMeetInterface0() { Stamp a = StampFactory.declared(getType(A.class)); - Stamp i = StampFactory.declared(getType(I.class)); + Stamp i = StampFactory.declared(getType(I.class), false, true); Assert.assertEquals(StampFactory.declared(getType(Object.class)), meet(a, i)); } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampTest.java --- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampTest.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/ObjectStampTest.java Fri Sep 19 09:27:01 2014 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 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 @@ -26,49 +26,25 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.test.*; -public class ObjectStampTest extends GraalCompilerTest { - - protected static class A { - +public class ObjectStampTest extends AbstractObjectStampTest { + @Test + public void testInterfaceTrust0() { + Stamp notTrusted = StampFactory.declared(getType(I.class)); + Assert.assertEquals(StampFactory.object(), notTrusted); } - protected static class B extends A { - - } - - protected static class C extends B implements I { - - } - - protected static class D extends A { + private static interface TrustedI extends TrustedInterface { } - protected abstract static class E extends A { - - } - - protected interface I { - - } - - protected static Stamp join(Stamp a, Stamp b) { - Stamp ab = a.join(b); - Stamp ba = b.join(a); - Assert.assertEquals(ab, ba); - return ab; - } - - protected static Stamp meet(Stamp a, Stamp b) { - Stamp ab = a.meet(b); - Stamp ba = b.meet(a); - Assert.assertEquals(ab, ba); - return ab; - } - - protected ResolvedJavaType getType(Class clazz) { - return getMetaAccess().lookupJavaType(clazz); + @Test + public void testInterfaceTrust1() { + Stamp trusted = StampFactory.declared(getType(TrustedI.class)); + Assert.assertNotEquals(StampFactory.object(), trusted); + Assert.assertTrue("Should be an AbstractObjectStamp", trusted instanceof AbstractObjectStamp); + AbstractObjectStamp trustedObjectStamp = (AbstractObjectStamp) trusted; + Assert.assertNotNull(trustedObjectStamp.type()); + Assert.assertTrue("Should be an interface", trustedObjectStamp.type().isInterface()); } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java Fri Sep 19 09:27:01 2014 -0700 @@ -76,7 +76,7 @@ } protected PiNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) { - this(object, StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp()))); + this(object, StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp()), true)); } @Override diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java Fri Sep 19 09:27:01 2014 -0700 @@ -24,11 +24,12 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.spi.*; @NodeInfo -public class SimpleInfopointNode extends InfopointNode implements LIRLowerable, IterableNodeType { +public class SimpleInfopointNode extends InfopointNode implements LIRLowerable, IterableNodeType, Simplifiable { private BytecodePosition position; public static SimpleInfopointNode create(InfopointReason reason, BytecodePosition position) { @@ -60,4 +61,11 @@ return new BytecodePosition(relink(position.getCaller(), link), position.getMethod(), position.getBCI()); } } + + @Override + public void simplify(SimplifierTool tool) { + if (next() instanceof SimpleInfopointNode) { + graph().removeFixed(this); + } + } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Fri Sep 19 09:27:01 2014 -0700 @@ -65,7 +65,7 @@ } UnsafeCastNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) { - this(object, toType.getKind() == Kind.Object ? StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp())) : StampFactory.forKind(toType.getKind())); + this(object, toType.getKind() == Kind.Object ? StampFactory.object(toType, exactType, nonNull || StampTool.isObjectNonNull(object.stamp()), true) : StampFactory.forKind(toType.getKind())); } @Override diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Fri Sep 19 09:27:01 2014 -0700 @@ -64,7 +64,7 @@ } protected CheckCastNode(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck) { - super(StampFactory.declared(type)); + super(StampFactory.declared(type, false, true)); assert type != null; this.type = type; this.object = object; @@ -104,7 +104,7 @@ */ @Override public void lower(LoweringTool tool) { - Stamp stamp = StampFactory.declared(type); + Stamp stamp = StampFactory.declared(type, false, true); if (stamp() instanceof ObjectStamp && object().stamp() instanceof ObjectStamp) { stamp = ((ObjectStamp) object().stamp()).castTo((ObjectStamp) stamp); } @@ -113,7 +113,7 @@ if (stamp instanceof IllegalStamp) { // This is a check cast that will always fail condition = LogicConstantNode.contradiction(graph()); - stamp = StampFactory.declared(type); + stamp = StampFactory.declared(type, false, true); } else if (StampTool.isObjectNonNull(object)) { condition = graph().addWithoutUnique(InstanceOfNode.create(type, object, profile)); } else { @@ -146,7 +146,7 @@ @Override public boolean inferStamp() { if (object().stamp() instanceof ObjectStamp) { - ObjectStamp castStamp = (ObjectStamp) StampFactory.declared(type); + ObjectStamp castStamp = (ObjectStamp) StampFactory.declared(type, false, true); return updateStamp(((ObjectStamp) object().stamp()).castTo(castStamp)); } return false; diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Fri Sep 19 09:27:01 2014 -0700 @@ -718,7 +718,7 @@ ConstantNode nullObject = ConstantNode.defaultForKind(Kind.Object, graph); piNode = graph.unique(PiNode.create(nullObject, StampFactory.forConstant(nullObject.getValue(), metaAccess), replacementAnchor.asNode())); } else { - piNode = graph.unique(PiNode.create(object, StampFactory.declared(type, nonNull), replacementAnchor.asNode())); + piNode = graph.unique(PiNode.create(object, StampFactory.declared(type, nonNull, true), replacementAnchor.asNode())); } checkCast.replaceAtUsages(piNode); graph.removeFixed(checkCast); diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java Fri Sep 19 09:27:01 2014 -0700 @@ -206,7 +206,7 @@ ObjectStamp subjectStamp = (ObjectStamp) subject.stamp(); final ResolvedJavaType toType = checkCast.type(); - ObjectStamp resultStamp = (ObjectStamp) StampFactory.declared(toType); + ObjectStamp resultStamp = (ObjectStamp) StampFactory.declared(toType, false, true); JavaTypeProfile profile = checkCast.profile(); assert FlowUtil.isLegalObjectStamp(subjectStamp); @@ -214,13 +214,13 @@ /* * Depending on what is known about the subject: - * + * * (a) definitely-non-null - * + * * (b) null-not-seen-in-profiling - * + * * (c) runtime-null-check-needed - * + * * the condition (of the cast-guard to be emitted) and the stamp (of the PiNode to be * emitted) are going to be different. Each of the three branches below deals with one of * the cases above. diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Fri Sep 19 09:27:01 2014 -0700 @@ -181,7 +181,7 @@ } public static GuardedValueNode createAnchoredReceiver(StructuredGraph graph, GuardingNode anchor, ResolvedJavaType commonType, ValueNode receiver, boolean exact) { - return createAnchoredReceiver(graph, anchor, receiver, exact ? StampFactory.exactNonNull(commonType) : StampFactory.declaredNonNull(commonType)); + return createAnchoredReceiver(graph, anchor, receiver, exact ? StampFactory.exactNonNull(commonType) : StampFactory.declaredNonNull(commonType, true)); } private static GuardedValueNode createAnchoredReceiver(StructuredGraph graph, GuardingNode anchor, ValueNode receiver, Stamp stamp) { diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime.java Fri Sep 19 09:27:01 2014 -0700 @@ -25,6 +25,7 @@ import static com.oracle.graal.api.code.CodeUtil.*; import static com.oracle.graal.compiler.GraalCompiler.*; import static com.oracle.graal.graph.util.CollectionsAccess.*; +import static com.oracle.graal.hotspot.meta.HotSpotSuitesProvider.*; import static com.oracle.graal.truffle.TruffleCompilerOptions.*; import java.util.*; @@ -44,7 +45,6 @@ import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; import com.oracle.graal.java.*; -import com.oracle.graal.java.GraphBuilderConfiguration.*; import com.oracle.graal.lir.asm.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -262,15 +262,7 @@ private static PhaseSuite getGraphBuilderSuite(SuitesProvider suitesProvider) { PhaseSuite graphBuilderSuite = suitesProvider.getDefaultGraphBuilderSuite(); - if (HotSpotGraalRuntime.runtime().getCompilerToVM().shouldDebugNonSafepoints()) { - // need to tweak the graph builder config - graphBuilderSuite = graphBuilderSuite.copy(); - GraphBuilderPhase graphBuilderPhase = (GraphBuilderPhase) graphBuilderSuite.findPhase(GraphBuilderPhase.class).previous(); - GraphBuilderConfiguration graphBuilderConfig = graphBuilderPhase.getGraphBuilderConfig(); - GraphBuilderPhase newGraphBuilderPhase = new GraphBuilderPhase(graphBuilderConfig.withDebugInfoMode(DebugInfoMode.Simple)); - graphBuilderSuite.findPhase(GraphBuilderPhase.class).set(newGraphBuilderPhase); - } - return graphBuilderSuite; + return withSimpleDebugInfoIfRequested(graphBuilderSuite); } private static void removeInliningPhase(Suites suites) { @@ -342,11 +334,15 @@ } } }; - if (mayBeAsynchronous) { - Future future = compileQueue.submit(r); - this.compilations.put(optimizedCallTarget, future); - } else { - r.run(); + Future future = compileQueue.submit(r); + this.compilations.put(optimizedCallTarget, future); + + if (!mayBeAsynchronous) { + try { + future.get(); + } catch (InterruptedException | ExecutionException e) { + // silently ignored + } } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Sep 19 09:27:01 2014 -0700 @@ -273,15 +273,16 @@ // Compilation was successful. } else { compilationPolicy.recordCompilationFailure(t); + + if (TruffleCompilationExceptionsAreThrown.getValue()) { + throw new OptimizationFailedException(t, rootNode); + } + logOptimizingFailed(this, t.getMessage()); if (t instanceof BailoutException) { - logOptimizingFailed(this, t.getMessage()); // Bailout => move on. } else if (TruffleCompilationExceptionsAreFatal.getValue()) { - logOptimizingFailed(this, t.getMessage()); t.printStackTrace(OUT); System.exit(-1); - } else if (TruffleCompilationExceptionsAreThrown.getValue()) { - throw new OptimizationFailedException(t, rootNode); } } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/LoadIndexedFinalNode.java Fri Sep 19 09:27:01 2014 -0700 @@ -67,7 +67,7 @@ private static Stamp createStamp(ValueNode array, Kind kind) { ResolvedJavaType type = StampTool.typeOrNull(array); if (kind == Kind.Object && type != null) { - return StampFactory.declared(type.getComponentType()); + return StampFactory.declared(type.getComponentType(), false, true); } else { return StampFactory.forKind(kind); } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java Fri Sep 19 09:27:01 2014 -0700 @@ -67,7 +67,7 @@ replaceAtUsages(objectArgument); GraphUtil.removeFixedWithUnusedInputs(this); } else { - Stamp stamp = StampFactory.declared(lookupJavaType, nonNullArgument.asConstant().asInt() != 0); + Stamp stamp = StampFactory.declared(lookupJavaType, nonNullArgument.asConstant().asInt() != 0, true); ConditionAnchorNode valueAnchorNode = graph().add( ConditionAnchorNode.create(CompareNode.createCompareNode(graph(), Condition.EQ, conditionArgument, ConstantNode.forBoolean(true, graph())))); PiNode piCast = graph().unique(PiNode.create(objectArgument, stamp, valueAnchorNode)); diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.graal.word/src/com/oracle/graal/word/WordBase.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/WordBase.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/WordBase.java Fri Sep 19 09:27:01 2014 -0700 @@ -22,7 +22,9 @@ */ package com.oracle.graal.word; -public interface WordBase { +import com.oracle.graal.api.meta.*; + +public interface WordBase extends TrustedInterface { long rawValue(); } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java Fri Sep 19 09:27:01 2014 -0700 @@ -35,13 +35,11 @@ public class DefaultCallTarget implements RootCallTarget { private final RootNode rootNode; - private final DefaultTruffleRuntime defaultTruffleRuntime; - public DefaultCallTarget(RootNode function, DefaultTruffleRuntime defaultTruffleRuntime) { + public DefaultCallTarget(RootNode function) { this.rootNode = function; this.rootNode.adoptChildren(); this.rootNode.setCallTarget(this); - this.defaultTruffleRuntime = defaultTruffleRuntime; } @Override @@ -56,7 +54,7 @@ @Override public Object call(Object... args) { final VirtualFrame frame = new DefaultVirtualFrame(getRootNode().getFrameDescriptor(), args); - FrameInstance oldCurrentFrame = defaultTruffleRuntime.setCurrentFrame(new FrameInstance() { + FrameInstance oldCurrentFrame = defaultTruffleRuntime().setCurrentFrame(new FrameInstance() { public Frame getFrame(FrameAccess access, boolean slowPath) { return frame; @@ -77,7 +75,11 @@ try { return getRootNode().execute(frame); } finally { - defaultTruffleRuntime.setCurrentFrame(oldCurrentFrame); + defaultTruffleRuntime().setCurrentFrame(oldCurrentFrame); } } + + private static DefaultTruffleRuntime defaultTruffleRuntime() { + return (DefaultTruffleRuntime) Truffle.getRuntime(); + } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultDirectCallNode.java Fri Sep 19 09:27:01 2014 -0700 @@ -34,16 +34,14 @@ public final class DefaultDirectCallNode extends DirectCallNode { private boolean inliningForced; - private final DefaultTruffleRuntime defaultTruffleRuntime; - public DefaultDirectCallNode(CallTarget target, DefaultTruffleRuntime defaultTruffleRuntime) { + public DefaultDirectCallNode(CallTarget target) { super(target); - this.defaultTruffleRuntime = defaultTruffleRuntime; } @Override public Object call(final VirtualFrame frame, Object[] arguments) { - final CallTarget currentCallTarget = defaultTruffleRuntime.getCurrentFrame().getCallTarget(); + final CallTarget currentCallTarget = defaultTruffleRuntime().getCurrentFrame().getCallTarget(); FrameInstance frameInstance = new FrameInstance() { public Frame getFrame(FrameAccess access, boolean slowPath) { @@ -62,11 +60,11 @@ return currentCallTarget; } }; - defaultTruffleRuntime.pushFrame(frameInstance); + defaultTruffleRuntime().pushFrame(frameInstance); try { return getCurrentCallTarget().call(arguments); } finally { - defaultTruffleRuntime.popFrame(); + defaultTruffleRuntime().popFrame(); } } @@ -109,4 +107,8 @@ public String toString() { return (getParent() != null ? getParent().toString() : super.toString()) + " call " + getCurrentCallTarget().toString(); } + + private static DefaultTruffleRuntime defaultTruffleRuntime() { + return (DefaultTruffleRuntime) Truffle.getRuntime(); + } } diff -r 9df38e5fbed6 -r b8f54c5ec73a graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Fri Sep 19 09:24:16 2014 -0700 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Fri Sep 19 09:27:01 2014 -0700 @@ -56,13 +56,13 @@ @Override public RootCallTarget createCallTarget(RootNode rootNode) { - DefaultCallTarget target = new DefaultCallTarget(rootNode, this); + DefaultCallTarget target = new DefaultCallTarget(rootNode); callTargets.put(target, null); return target; } public DirectCallNode createDirectCallNode(CallTarget target) { - return new DefaultDirectCallNode(target, this); + return new DefaultDirectCallNode(target); } public IndirectCallNode createIndirectCallNode() { diff -r 9df38e5fbed6 -r b8f54c5ec73a mx/projects --- a/mx/projects Fri Sep 19 09:24:16 2014 -0700 +++ b/mx/projects Fri Sep 19 09:27:01 2014 -0700 @@ -73,6 +73,13 @@ library@OKRA_WITH_SIM@sourceSha1=7eefd94f16a3e3fd3b8f470cf91e265c6f5e7767 library@OKRA_WITH_SIM@sourceUrls=http://lafo.ssw.uni-linz.ac.at/graal-external-deps/okra-1.10-with-sim-src.jar,http://cr.openjdk.java.net/~tdeneau/okra-1.10-with-sim-src.jar +library@ASM@path=lib/asm-5.0.3.jar +library@ASM@urls=http://lafo.ssw.uni-linz.ac.at/graal-external-deps/asm-5.0.3.jar,http://central.maven.org/maven2/org/ow2/asm/asm/5.0.3/asm-5.0.3.jar +library@ASM@sha1=dcc2193db20e19e1feca8b1240dbbc4e190824fa +library@ASM@sourcePath=lib/asm-5.0.3-sources.jar +library@ASM@sourceSha1=f0f24f6666c1a15c7e202e91610476bd4ce59368 +library@ASM@sourceUrls=http://lafo.ssw.uni-linz.ac.at/graal-external-deps/asm-5.0.3-sources.jar,http://central.maven.org/maven2/org/ow2/asm/asm/5.0.3/asm-5.0.3-sources.jar + library@JAVA_ALLOCATION_INSTRUMENTER@path=lib/java-allocation-instrumenter.jar library@JAVA_ALLOCATION_INSTRUMENTER@sourcePath=lib/java-allocation-instrumenter.jar library@JAVA_ALLOCATION_INSTRUMENTER@urls=http://lafo.ssw.uni-linz.ac.at/java-allocation-instrumenter/java-allocation-instrumenter-8f0db117e64e.jar @@ -675,7 +682,7 @@ # graal.jtt project@com.oracle.graal.jtt@subDir=graal project@com.oracle.graal.jtt@sourceDirs=src -project@com.oracle.graal.jtt@dependencies=com.oracle.graal.compiler.test +project@com.oracle.graal.jtt@dependencies=com.oracle.graal.compiler.test,ASM project@com.oracle.graal.jtt@checkstyle=com.oracle.graal.graph project@com.oracle.graal.jtt@javaCompliance=1.8 project@com.oracle.graal.jtt@workingSets=Graal,Test diff -r 9df38e5fbed6 -r b8f54c5ec73a mx/projects.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mx/projects.py Fri Sep 19 09:27:01 2014 -0700 @@ -0,0 +1,1329 @@ +suite = { + "mxversion" : "1.0", + "name" : "graal", + "libraries" : { + "JUNIT" : { + "path" : "lib/junit-4.11.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/junit-4.11.jar", + "http://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar", + ], + "sha1" : "4e031bb61df09069aeb2bffb4019e7a5034a4ee0", + "eclipse.container" : "org.eclipse.jdt.junit.JUNIT_CONTAINER/4", + "sourcePath" : "lib/junit-4.11-sources.jar", + "sourceUrls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/junit-4.11-sources.jar", + "http://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11-sources.jar", + ], + "sourceSha1" : "28e0ad201304e4a4abf999ca0570b7cffc352c3c", + "dependencies" : [ + "HAMCREST", + ], + }, + + "HAMCREST" : { + "path" : "lib/hamcrest-core-1.3.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/hamcrest-core-1.3.jar", + "http://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar", + ], + "sha1" : "42a25dc3219429f0e5d060061f71acb49bf010a0", + "sourcePath" : "lib/hamcrest-core-1.3-sources.jar", + "sourceUrls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/hamcrest-core-1.3-sources.jar", + "http://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar", + ], + "sourceSha1" : "1dc37250fbc78e23a65a67fbbaf71d2e9cbc3c0b", + }, + + "HCFDIS" : { + "path" : "lib/hcfdis-2.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/hcfdis-2.jar", + ], + "sha1" : "bc8b2253436485e9dbaf81771c259ccfa1a24c80", + }, + + "FINDBUGS_DIST" : { + "path" : "lib/findbugs-dist-3.0.0.zip", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/findbugs-3.0.0.zip", + "http://sourceforge.net/projects/findbugs/files/findbugs/3.0.0/findbugs-3.0.0.zip/download", + ], + "sha1" : "6e56d67f238dbcd60acb88a81655749aa6419c5b", + }, + + "C1VISUALIZER_DIST" : { + "path" : "lib/c1visualizer_2014-04-22.zip", + "urls" : [ + "https://java.net/downloads/c1visualizer/c1visualizer_2014-04-22.zip", + ], + "sha1" : "220488d87affb569b893c7201f8ce5d2b0e03141", + }, + + "JOL_INTERNALS" : { + "path" : "lib/jol-internals.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/truffle/jol/jol-internals.jar", + ], + "sha1" : "508bcd26a4d7c4c44048990c6ea789a3b11a62dc", + }, + + "FINDBUGS" : { + "path" : "lib/findbugs-3.0.0.jar", + "urls" : [ + "jar:http://lafo.ssw.uni-linz.ac.at/graal-external-deps/findbugs-3.0.0.zip!/findbugs-3.0.0/lib/findbugs.jar", + "jar:http://sourceforge.net/projects/findbugs/files/findbugs/3.0.0/findbugs-3.0.0.zip/download!/findbugs-3.0.0/lib/findbugs.jar", + ], + "sha1" : "e9a938f0cb34e2ab5853f9ecb1989f6f590ee385", + }, + + "DACAPO" : { + "path" : "lib/dacapo-9.12-bach.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/dacapo-9.12-bach.jar", + "http://softlayer.dl.sourceforge.net/project/dacapobench/9.12-bach/dacapo-9.12-bach.jar", + ], + "sha1" : "2626a9546df09009f6da0df854e6dc1113ef7dd4", + }, + + "JACOCOAGENT" : { + "path" : "lib/jacocoagent.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/jacoco/jacocoagent-0.7.1-1.jar", + ], + "sha1" : "2f73a645b02e39290e577ce555f00b02004650b0", + }, + + "JACOCOREPORT" : { + "path" : "lib/jacocoreport.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/jacoco/jacocoreport-0.7.1-2.jar", + ], + "sha1" : "a630436391832d697a12c8f7daef8655d7a1efd2", + }, + + "DACAPO_SCALA" : { + "path" : "lib/dacapo-scala-0.1.0-20120216.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/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", + ], + "sha1" : "59b64c974662b5cf9dbd3cf9045d293853dd7a51", + }, + + "OKRA" : { + "path" : "lib/okra-1.10.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/okra-1.10.jar", + "http://cr.openjdk.java.net/~tdeneau/okra-1.10.jar", + ], + "sha1" : "96eb3c0ec808ed944ba88d1eb9311058fe0f3d1e", + "sourcePath" : "lib/okra-1.10-src.jar", + "sourceUrls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/okra-1.10-src.jar", + "http://cr.openjdk.java.net/~tdeneau/okra-1.10-src.jar", + ], + "sourceSha1" : "75751bb148fcebaba78ff590f883a114b2b09176", + }, + + "OKRA_WITH_SIM" : { + "path" : "lib/okra-1.10-with-sim.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/okra-1.10-with-sim.jar", + "http://cr.openjdk.java.net/~tdeneau/okra-1.10-with-sim.jar", + ], + "sha1" : "7b8db879f1dbcf571290add78d9af24e15a2a50d", + "sourcePath" : "lib/okra-1.10-with-sim-src.jar", + "sourceSha1" : "7eefd94f16a3e3fd3b8f470cf91e265c6f5e7767", + "sourceUrls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/okra-1.10-with-sim-src.jar", + "http://cr.openjdk.java.net/~tdeneau/okra-1.10-with-sim-src.jar", + ], + }, + + "ASM" : { + "path" : "lib/asm-5.0.3.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/asm-5.0.3.jar", + "http://central.maven.org/maven2/org/ow2/asm/asm/5.0.3/asm-5.0.3.jar", + ], + "sha1" : "dcc2193db20e19e1feca8b1240dbbc4e190824fa", + "sourcePath" : "lib/asm-5.0.3-sources.jar", + "sourceSha1" : "f0f24f6666c1a15c7e202e91610476bd4ce59368", + "sourceUrls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/asm-5.0.3-sources.jar", + "http://central.maven.org/maven2/org/ow2/asm/asm/5.0.3/asm-5.0.3-sources.jar", + ], + }, + + "JAVA_ALLOCATION_INSTRUMENTER" : { + "path" : "lib/java-allocation-instrumenter.jar", + "sourcePath" : "lib/java-allocation-instrumenter.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/java-allocation-instrumenter/java-allocation-instrumenter-8f0db117e64e.jar", + ], + "sha1" : "476d9a44cd19d6b55f81571077dfa972a4f8a083", + "bootClassPathAgent" : "true", + }, + + "VECMATH" : { + "path" : "lib/vecmath-1.3.1.jar", + "urls" : [ + "http://lafo.ssw.uni-linz.ac.at/graal-external-deps/vecmath-1.3.1.jar", + "http://mirrors.ibiblio.org/pub/mirrors/maven/java3d/jars/vecmath-1.3.1.jar", + ], + "sha1" : "a0ae4f51da409fa0c20fa0ca59e6bbc9413ae71d", + } + }, + + "jrelibraries" : { + "JFR" : { + "jar" : "jfr.jar", + } + }, + + "projects" : { + "com.oracle.nfi" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.7", + }, + + "com.oracle.nfi.test" : { + "subDir" : "graal", + "sourceDirs" : "test", + "dependencies" : [ + "com.oracle.nfi", + "com.oracle.graal.compiler.common", + "JUNIT", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.7", + }, + + "com.oracle.graal.api.collections" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal", + }, + + "com.oracle.graal.api.runtime" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal", + }, + + "com.oracle.graal.api.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "JUNIT", + "com.oracle.graal.api.runtime", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal,Test", + }, + + "com.oracle.graal.api.meta" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal", + }, + + "com.oracle.graal.api.meta.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "JUNIT", + "com.oracle.graal.runtime", + "com.oracle.graal.java", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal,Test", + }, + + "com.oracle.graal.api.code" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.meta", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal", + }, + + "com.oracle.graal.api.replacements" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.meta", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal,Replacements", + }, + + "com.oracle.graal.service.processor" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.runtime", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Codegen,HotSpot", + }, + + "com.oracle.graal.amd64" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.code", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,AMD64", + }, + + "com.oracle.graal.ptx" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.code", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,PTX", + }, + + "com.oracle.graal.sparc" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.code", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,SPARC", + }, + + "com.oracle.graal.hotspotvmconfig" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.common", + ], + "checkstyle" : "com.oracle.graal.graph", + "annotationProcessors" : "com.oracle.graal.service.processor", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot", + }, + + "com.oracle.graal.hotspot" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.replacements", + "com.oracle.graal.runtime", + "com.oracle.graal.printer", + "com.oracle.graal.baseline", + "com.oracle.graal.hotspotvmconfig", + "com.oracle.nfi", + ], + "checkstyle" : "com.oracle.graal.graph", + "annotationProcessors" : "com.oracle.graal.replacements.verifier,com.oracle.graal.service.processor", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot", + }, + + "com.oracle.graal.hotspot.loader" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot", + }, + + "com.oracle.graal.hotspot.sourcegen" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.hotspot", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot", + }, + + "com.oracle.graal.hotspot.jfr" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.hotspot", + "JFR", + ], + "checkstyle" : "com.oracle.graal.graph", + "annotationProcessors" : "com.oracle.graal.service.processor", + "javaCompliance" : "1.8", + "profile" : "", + "workingSets" : "Graal,HotSpot", + }, + + "com.oracle.graal.hotspot.amd64" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.amd64", + "com.oracle.graal.hotspot", + "com.oracle.graal.replacements.amd64", + ], + "checkstyle" : "com.oracle.graal.graph", + "annotationProcessors" : "com.oracle.graal.service.processor", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot,AMD64", + }, + + "com.oracle.graal.hotspot.sparc" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.sparc", + ], + "checkstyle" : "com.oracle.graal.graph", + "annotationProcessors" : "com.oracle.graal.service.processor", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot,SPARC", + }, + + "com.oracle.graal.hotspot.ptx" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.ptx", + "com.oracle.graal.compiler.ptx", + "com.oracle.graal.hotspot", + "com.oracle.graal.gpu", + ], + "checkstyle" : "com.oracle.graal.graph", + "annotationProcessors" : "com.oracle.graal.service.processor", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot,PTX", + }, + + "com.oracle.graal.hotspot.hsail" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.replacements.hsail", + "com.oracle.graal.hotspot", + "com.oracle.graal.gpu", + ], + "checkstyle" : "com.oracle.graal.graph", + "annotationProcessors" : "com.oracle.graal.service.processor", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot,PTX", + }, + + "com.oracle.graal.hotspot.server" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.hotspot", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot", + }, + + "com.oracle.graal.hotspot.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.replacements.test", + "com.oracle.graal.hotspot", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot,Test", + }, + + "com.oracle.graal.hotspot.amd64.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.asm.amd64", + "com.oracle.graal.compiler.test", + "com.oracle.graal.hotspot", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,HotSpot,AMD64,Test", + }, + + "com.oracle.graal.options" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Codegen", + }, + + "com.oracle.graal.options.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.options", + "JUNIT", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal", + }, + + "com.oracle.graal.nodeinfo" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Graph", + }, + + "com.oracle.graal.nodeinfo.processor" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "dependencies" : [ + "com.oracle.graal.nodeinfo", + "com.oracle.truffle.dsl.processor", + ], + "javaCompliance" : "1.8", + "workingSets" : "Graal,Graph", + }, + + "com.oracle.graal.graph" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.nodeinfo", + "com.oracle.graal.debug", + "com.oracle.graal.compiler.common", + "com.oracle.graal.api.collections", + "com.oracle.graal.api.runtime", + "FINDBUGS", + ], + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.graal.nodeinfo.processor", + "workingSets" : "Graal,Graph", + }, + + "com.oracle.graal.graph.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "dependencies" : [ + "JUNIT", + "com.oracle.graal.graph", + ], + "javaCompliance" : "1.8", + "workingSets" : "Graal,Graph,Test", + }, + + "com.oracle.graal.debug" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Debug", + }, + + "com.oracle.graal.debug.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "JUNIT", + "com.oracle.graal.debug", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Debug,Test", + }, + + "com.oracle.graal.lir" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.common", + "com.oracle.graal.asm", + "com.oracle.graal.debug", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,LIR", + }, + + "com.oracle.graal.lir.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "JUNIT", + "com.oracle.graal.lir", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,LIR", + }, + + "com.oracle.graal.lir.amd64" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.lir", + "com.oracle.graal.asm.amd64", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,LIR,AMD64", + }, + + "com.oracle.graal.lir.ptx" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.asm.ptx", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,LIR,PTX", + }, + + "com.oracle.graal.lir.sparc" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.asm.sparc", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,LIR,SPARC", + }, + + "com.oracle.graal.alloc" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.common", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal", + }, + + "com.oracle.graal.word" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.phases", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "API,Graal", + }, + + "com.oracle.graal.replacements" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler", + "com.oracle.graal.java", + "com.oracle.graal.word", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.graal.replacements.verifier,com.oracle.graal.service.processor", + "workingSets" : "Graal,Replacements", + }, + + "com.oracle.graal.replacements.amd64" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.replacements", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.graal.service.processor", + "workingSets" : "Graal,Replacements,AMD64", + }, + + "com.oracle.graal.replacements.hsail" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.hsail", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Replacements,HSAIL", + }, + + "com.oracle.graal.replacements.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.test", + "com.oracle.graal.replacements", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Replacements,Test", + }, + + "com.oracle.graal.replacements.verifier" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.replacements", + "com.oracle.graal.graph", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Replacements", + }, + + "com.oracle.graal.nodes" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.graph", + "com.oracle.graal.api.replacements", + "com.oracle.graal.lir", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.graal.replacements.verifier", + "workingSets" : "Graal,Graph", + }, + + "com.oracle.graal.nodes.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.test", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Graph", + }, + + "com.oracle.graal.phases" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.nodes", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Phases", + }, + + "com.oracle.graal.phases.common" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.phases", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Phases", + }, + + "com.oracle.graal.virtual" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.phases.common", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Phases", + }, + + "com.oracle.graal.loop" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.phases.common", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Phases", + }, + + "com.oracle.graal.compiler" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.virtual", + "com.oracle.graal.loop", + "com.oracle.graal.alloc", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.graal.service.processor", + "workingSets" : "Graal", + }, + + "com.oracle.graal.compiler.amd64" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler", + "com.oracle.graal.lir.amd64", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,AMD64", + }, + + "com.oracle.graal.compiler.amd64.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.test", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,AMD64,Test", + }, + + "com.oracle.graal.compiler.ptx" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.lir.ptx", + "com.oracle.graal.compiler", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,PTX", + }, + + "com.oracle.graal.compiler.ptx.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.hotspot.ptx", + "com.oracle.graal.compiler.test", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,PTX,Test", + }, + + "com.oracle.graal.compiler.sparc" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.lir.sparc", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,SPARC", + }, + + "com.oracle.graal.compiler.sparc.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.test", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,SPARC,Test", + }, + + "com.oracle.graal.runtime" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal", + }, + + "com.oracle.graal.bytecode" : { + "subDir" : "graal", + "sourceDirs" : "src", + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Java", + }, + + "com.oracle.graal.java" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.phases", + "com.oracle.graal.bytecode", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Java", + }, + + "com.oracle.graal.compiler.common" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.code", + "com.oracle.graal.options", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Java", + }, + + "com.oracle.graal.baseline" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler", + "com.oracle.graal.java", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Java", + }, + + "com.oracle.graal.java.decompiler" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.java", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal", + }, + + "com.oracle.graal.java.decompiler.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "JUNIT", + "com.oracle.graal.printer", + "com.oracle.graal.runtime", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Test", + }, + + "com.oracle.graal.printer" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.java.decompiler", + "com.oracle.graal.compiler", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Graph", + }, + + "com.oracle.graal.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "JUNIT", + "com.oracle.graal.debug", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Test", + }, + + "com.oracle.graal.compiler.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.test", + "com.oracle.graal.printer", + "com.oracle.graal.runtime", + "com.oracle.graal.baseline", + "JAVA_ALLOCATION_INSTRUMENTER", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Test", + }, + + "com.oracle.graal.jtt" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.test", + "ASM", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Test", + }, + + "com.oracle.graal.asm" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.code", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Assembler", + }, + + "com.oracle.graal.asm.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.test", + "com.oracle.graal.runtime", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Assembler,Test", + }, + + "com.oracle.graal.asm.amd64" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.asm", + "com.oracle.graal.amd64", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Assembler,AMD64", + }, + + "com.oracle.graal.asm.amd64.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.asm.test", + "com.oracle.graal.asm.amd64", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Assembler,AMD64,Test", + }, + + "com.oracle.graal.gpu" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.nodes", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + }, + + "com.oracle.graal.hsail" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.api.code", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + }, + + "com.oracle.graal.lir.hsail" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.lir", + "com.oracle.graal.asm.hsail", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + }, + + "com.oracle.graal.compiler.hsail" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler", + "com.oracle.graal.lir.hsail", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + }, + + "com.oracle.graal.compiler.hsail.test.infra" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.test", + "com.oracle.graal.hotspot.hsail", + "OKRA_WITH_SIM", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + }, + + "com.oracle.graal.compiler.hsail.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.compiler.hsail.test.infra", + "com.oracle.graal.compiler.test", + "VECMATH", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + }, + + "com.oracle.graal.asm.hsail" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.hsail", + "OKRA", + "com.oracle.graal.asm", + "com.oracle.graal.compiler.common", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + }, + + "com.oracle.graal.asm.ptx" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.lir", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Assembler,PTX", + }, + + "com.oracle.graal.asm.sparc" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.hotspot", + "com.oracle.graal.sparc", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Assembler,SPARC", + }, + + "com.oracle.truffle.api" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [], + "javaCompliance" : "1.7", + "workingSets" : "API,Truffle", + }, + + "com.oracle.truffle.api.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.truffle.api", + "JUNIT", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.7", + "workingSets" : "API,Truffle,Test", + }, + + "com.oracle.truffle.api.dsl" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.truffle.api", + ], + "checkstyle" : "com.oracle.truffle.api", + "javaCompliance" : "1.7", + "workingSets" : "API,Truffle,Codegen", + }, + + "com.oracle.truffle.api.dsl.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.truffle.api.dsl", + "JUNIT", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.7", + "annotationProcessors" : "com.oracle.truffle.dsl.processor", + "workingSets" : "API,Truffle,Codegen,Test", + }, + + "com.oracle.truffle.dsl.processor" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.truffle.api.dsl", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.7", + "workingSets" : "Truffle,Codegen", + }, + + "com.oracle.truffle.sl" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.truffle.api.dsl", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.truffle.dsl.processor", + "workingSets" : "Truffle,SimpleLanguage", + }, + + "com.oracle.truffle.sl.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.truffle.sl", + "JUNIT", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Truffle,SimpleLanguage,Test", + }, + + "com.oracle.graal.truffle" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.truffle.api", + "com.oracle.graal.replacements", + "com.oracle.graal.runtime", + "com.oracle.graal.printer", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Truffle", + }, + + "com.oracle.graal.truffle.test" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.truffle", + "com.oracle.graal.compiler.test", + "com.oracle.truffle.sl.test", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "workingSets" : "Graal,Truffle,Test", + }, + + "com.oracle.graal.truffle.hotspot" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.truffle", + "com.oracle.graal.hotspot", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.graal.service.processor", + "workingSets" : "Graal,Truffle", + }, + + "com.oracle.graal.truffle.hotspot.amd64" : { + "subDir" : "graal", + "sourceDirs" : "src", + "dependencies" : [ + "com.oracle.graal.truffle.hotspot", + "com.oracle.graal.asm.amd64", + ], + "checkstyle" : "com.oracle.graal.graph", + "javaCompliance" : "1.8", + "annotationProcessors" : "com.oracle.graal.service.processor", + "workingSets" : "Graal,Truffle", + } + }, + + "distributions" : { + "GRAAL" : { + "path" : "build/graal.jar", + "subDir" : "graal", + "sourcesPath" : "build/graal.src.zip", + "dependencies" : [ + "com.oracle.graal.hotspot.amd64", + "com.oracle.graal.hotspot.ptx", + "com.oracle.graal.hotspot.sparc", + "com.oracle.graal.hotspot", + "com.oracle.graal.hotspot.jfr", + "com.oracle.graal.hotspot.hsail", + ], + "exclude" : "FINDBUGS", + }, + + "GRAAL_LOADER" : { + "path" : "build/graal-loader.jar", + "subDir" : "graal", + "sourcesPath" : "build/graal-loader.src.zip", + "dependencies" : [ + "com.oracle.graal.hotspot.loader", + ], + }, + + "TRUFFLE" : { + "path" : "build/truffle.jar", + "subDir" : "graal", + "sourcesPath" : "build/truffle.src.zip", + "javaCompliance" : "1.7", + "dependencies" : [ + "com.oracle.truffle.api.dsl", + "com.oracle.nfi", + ], + }, + + "GRAAL_TRUFFLE" : { + "path" : "build/graal-truffle.jar", + "subDir" : "graal", + "sourcesPath" : "build/graal-truffle.src.zip", + "dependencies" : [ + "com.oracle.graal.truffle", + "com.oracle.graal.truffle.hotspot.amd64", + ], + "exclude" : "FINDBUGS", + "distDependencies" : "GRAAL,TRUFFLE", + }, + + "TRUFFLE-DSL-PROCESSOR" : { + "path" : "build/truffle-dsl-processor.jar", + "subDir" : "graal", + "sourcesPath" : "build/truffle-dsl-processor.src.zip", + "javaCompliance" : "1.7", + "dependencies" : [ + "com.oracle.truffle.dsl.processor", + ], + "distDependencies" : "TRUFFLE", + } + } +} diff -r 9df38e5fbed6 -r b8f54c5ec73a mxtool/mx.py --- a/mxtool/mx.py Fri Sep 19 09:24:16 2014 -0700 +++ b/mxtool/mx.py Fri Sep 19 09:27:01 2014 -0700 @@ -43,7 +43,7 @@ import shutil, re, xml.dom.minidom import pipes import difflib -from collections import Callable +from collections import Callable, OrderedDict from threading import Thread from argparse import ArgumentParser, REMAINDER from os.path import join, basename, dirname, exists, getmtime, isabs, expandvars, isdir, isfile @@ -787,6 +787,227 @@ else: return None +# TODO: remove this function once all repos have transitioned +# to the new project format +def _read_projects_file(projectsFile): + suite = OrderedDict() + + suite['projects'] = OrderedDict() + suite['libraries'] = OrderedDict() + suite['jrelibraries'] = OrderedDict() + suite['distributions'] = OrderedDict() + + with open(projectsFile) as f: + prefix = '' + lineNum = 0 + + def error(message): + abort(projectsFile + ':' + str(lineNum) + ': ' + message) + + for line in f: + lineNum = lineNum + 1 + line = line.strip() + if line.endswith('\\'): + prefix = prefix + line[:-1] + continue + if len(prefix) != 0: + line = prefix + line + prefix = '' + if len(line) != 0 and line[0] != '#': + if '=' not in line: + error('non-comment line does not contain an "=" character') + key, value = line.split('=', 1) + + parts = key.split('@') + + if len(parts) == 1: + if parts[0] == 'suite': + suite['name'] = value + elif parts[0] == 'mxversion': + suite['mxversion'] = value + else: + error('Single part property must be "suite": ' + key) + + continue + if len(parts) != 3: + error('Property name does not have 3 parts separated by "@": ' + key) + kind, name, attr = parts + if kind == 'project': + m = suite['projects'] + elif kind == 'library': + m = suite['libraries'] + elif kind == 'jrelibrary': + m = suite['jrelibraries'] + elif kind == 'distribution': + m = suite['distributions'] + else: + error('Property name does not start with "project@", "library@" or "distribution@": ' + key) + + attrs = m.get(name) + if attrs is None: + attrs = OrderedDict() + m[name] = attrs + value = expandvars_in_property(value) + attrs[attr] = value + return suite + +# TODO: remove this command once all repos have transitioned +# to the new project format +def convertprojects(args, verbose=True): + """convert old style projects file to projects*.py file(s)""" + + class Printer: + def __init__(self, fp, indent): + self.fp = fp + self.indent = indent + self.prefix = '' + def println(self, s): + if len(s) == 0: + print >> self.fp, s + else: + print >> self.fp, self.prefix + s + def inc(self): + self.prefix = ''.rjust(len(self.prefix) + self.indent) + def dec(self): + self.prefix = ''.rjust(len(self.prefix) - self.indent) + + for projectsFile in args: + suite = _read_projects_file(projectsFile) + def print_attrs(p, name, attrs, listKeys, is_last=False): + p.println('"' + name + '" : {') + p.inc() + for n, v in attrs.iteritems(): + if n in listKeys: + if len(v) == 0: + p.println('"{}" : [],'.format(n)) + else: + p.println('"{}" : ['.format(n)) + p.inc() + for e in v.split(','): + p.println('"' + e.strip() + '",') + p.dec() + p.println('],') + else: + p.println('"{}" : "{}",'.format(n, v)) + p.dec() + if is_last: + p.println('}') + else: + p.println('},') + p.println('') + + def print_section(p, sname, suite, is_last=False): + section = suite.get(sname) + if section: + p.println('"' + sname + '" : {') + p.inc() + i = 0 + for name, attrs in section.iteritems(): + i = i + 1 + print_attrs(p, name, attrs, ['urls', 'dependencies', 'sourceUrls'], i == len(section)) + + p.dec() + if is_last: + p.println('}') + else: + p.println('},') + p.println('') + + existing, projectsPyFile = _load_suite_dict(dirname(projectsFile)) + if existing: + assert existing['name'] == suite.pop('name') + assert existing['mxversion'] == suite.pop('mxversion') + for s in ['projects', 'libraries', 'jrelibraries', 'distributions']: + for k in existing[s].iterkeys(): + suite[s].pop(k) + if len(suite[s]) == 0: + suite.pop(s) + + if len(suite): + out = StringIO.StringIO() + p = Printer(out, 2) + p.println(('extra' if existing else 'suite') + ' = {') + p.inc() + if not existing: + p.println('"mxversion" : "' + suite['mxversion'] + '",') + p.println('"name" : "' + suite['name'] + '",') + print_section(p, 'libraries', suite) + print_section(p, 'jrelibraries', suite) + print_section(p, 'projects', suite) + print_section(p, 'distributions', suite, is_last=True) + p.dec() + p.println('}') + + with open(projectsPyFile, 'w') as fp: + fp.write(out.getvalue()) + if verbose: + print 'created: ' + projectsPyFile + +def _load_suite_dict(mxDir): + + suffix = 1 + suite = None + dictName = 'suite' + + moduleName = 'projects' + modulePath = join(mxDir, moduleName + '.py') + while exists(modulePath): + + savedModule = sys.modules.get(moduleName) + if savedModule: + warn(modulePath + ' conflicts with ' + savedModule.__file__) + # temporarily extend the Python path + sys.path.insert(0, mxDir) + + snapshot = frozenset(sys.modules.viewkeys()) + module = __import__(moduleName) + + if savedModule: + # restore the old module into the module name space + sys.modules[moduleName] = savedModule + else: + # remove moduleName from the module name space + sys.modules.pop(moduleName) + + # For now fail fast if extra modules were loaded. + # This can later be relaxed to simply remove the extra modules + # from the sys.modules name space if necessary. + extraModules = snapshot - sys.modules.viewkeys() + assert len(extraModules) == 0, 'loading ' + modulePath + ' caused extra modules to be loaded: ' + ', '.join([m.__file__ for m in extraModules]) + + # revert the Python path + del sys.path[0] + + if not hasattr(module, dictName): + abort(modulePath + ' must define a variable named "' + dictName + '"') + d = getattr(module, dictName) + sections = ['projects', 'libraries', 'jrelibraries', 'distributions'] + ([] if suite else ['name', 'mxversion']) + unknown = d.viewkeys() - sections + if unknown: + abort(modulePath + ' defines unsupported suite sections: ' + ', '.join(unknown)) + + if suite is None: + suite = d + else: + for s in sections: + existing = suite.get(s) + additional = d.get(s) + if additional: + if not existing: + suite[s] = additional + else: + conflicting = additional.viewkeys() & existing.viewkeys() + if conflicting: + abort(modulePath + ' redefines: ' + ', '.join(conflicting)) + existing.update(additional) + + dictName = 'extra' + moduleName = 'projects' + str(suffix) + modulePath = join(mxDir, moduleName + '.py') + suffix = suffix + 1 + + return suite, modulePath + class Suite: def __init__(self, mxDir, primary, load=True): self.dir = dirname(mxDir) @@ -810,73 +1031,35 @@ return self.name def _load_projects(self): - libsMap = dict() - jreLibsMap = dict() - projsMap = dict() - distsMap = dict() + # TODO: remove once mx/projects has been deprecated projectsFile = join(self.mxDir, 'projects') - if not exists(projectsFile): + if exists(projectsFile): + convertprojects([projectsFile], verbose=False) + + projectsPyFile = join(self.mxDir, 'projects.py') + if not exists(projectsPyFile): return - with open(projectsFile) as f: - prefix = '' - lineNum = 0 - - def error(message): - abort(projectsFile + ':' + str(lineNum) + ': ' + message) - - for line in f: - lineNum = lineNum + 1 - line = line.strip() - if line.endswith('\\'): - prefix = prefix + line[:-1] - continue - if len(prefix) != 0: - line = prefix + line - prefix = '' - if len(line) != 0 and line[0] != '#': - if '=' not in line: - error('non-comment line does not contain an "=" character') - key, value = line.split('=', 1) - - parts = key.split('@') - - if len(parts) == 1: - if parts[0] == 'suite': - if self.name != value: - error('suite name in project file does not match ' + _suitename(self.mxDir)) - elif parts[0] == 'mxversion': - try: - self.requiredMxVersion = VersionSpec(value) - except AssertionError as ae: - error('Exception while parsing "mxversion" in project file: ' + str(ae)) - else: - error('Single part property must be "suite": ' + key) - - continue - if len(parts) != 3: - error('Property name does not have 3 parts separated by "@": ' + key) - kind, name, attr = parts - if kind == 'project': - m = projsMap - elif kind == 'library': - m = libsMap - elif kind == 'jrelibrary': - m = jreLibsMap - elif kind == 'distribution': - m = distsMap - else: - error('Property name does not start with "project@", "library@" or "distribution@": ' + key) - - attrs = m.get(name) - if attrs is None: - attrs = dict() - m[name] = attrs - value = expandvars_in_property(value) - attrs[attr] = value + suiteDict, _ = _load_suite_dict(self.mxDir) + + if suiteDict.get('name') is not None and suiteDict.get('name') != self.name: + abort('suite name in project file does not match ' + _suitename(self.mxDir)) + + if suiteDict.has_key('mxversion'): + try: + self.requiredMxVersion = VersionSpec(suiteDict['mxversion']) + except AssertionError as ae: + abort('Exception while parsing "mxversion" in project file: ' + str(ae)) + + libsMap = suiteDict['libraries'] + jreLibsMap = suiteDict['jrelibraries'] + projsMap = suiteDict['projects'] + distsMap = suiteDict['distributions'] def pop_list(attrs, name): v = attrs.pop(name, None) + if isinstance(v, list): + return v if v is None or len(v.strip()) == 0: return [] return [n.strip() for n in v.split(',')] @@ -896,7 +1079,7 @@ p.checkstyleProj = attrs.pop('checkstyle', name) p.native = attrs.pop('native', '') == 'true' if not p.native and p.javaCompliance is None: - error('javaCompliance property required for non-native project ' + name) + abort('javaCompliance property required for non-native project ' + name) if len(ap) > 0: p._declaredAnnotationProcessors = ap p.__dict__.update(attrs) @@ -911,7 +1094,8 @@ for name, attrs in libsMap.iteritems(): if "|" in name: - assert name.count("|") == 2, "syntax: libname|os-platform|architecture" + if name.count('|') != 2: + abort("Format error in library name: " + name + "\nsyntax: libname|os-platform|architecture") name, platform, architecture = name.split("|") if platform != get_os() or architecture != get_arch(): continue @@ -2866,61 +3050,60 @@ return archives def canonicalizeprojects(args): - """process all project files to canonicalize the dependencies - - The exit code of this command reflects how many files were updated.""" - - changedFiles = 0 + """check all project specifications for canonical dependencies + + The exit code of this command reflects how many projects have non-canonical dependencies.""" + + nonCanonical = [] for s in suites(True): - projectsFile = join(s.mxDir, 'projects') - if not exists(projectsFile): + projectsPyFile = join(s.mxDir, 'projects') + if not exists(projectsPyFile): continue - with open(projectsFile) as f: - out = StringIO.StringIO() - pattern = re.compile('project@([^@]+)@dependencies=.*') - lineNo = 1 - for line in f: - line = line.strip() - m = pattern.match(line) - p = project(m.group(1), fatalIfMissing=False) if m else None - if m is None or p is None: - out.write(line + '\n') - else: - for pkg in p.defined_java_packages(): - if not pkg.startswith(p.name): - abort('package in {0} does not have prefix matching project name: {1}'.format(p, pkg)) - - ignoredDeps = set([name for name in p.deps if project(name, False) is not None]) - for pkg in p.imported_java_packages(): - for name in p.deps: - dep = project(name, False) - if dep is None: - ignoredDeps.discard(name) - else: - if pkg in dep.defined_java_packages(): - ignoredDeps.discard(name) - if pkg in dep.extended_java_packages(): - ignoredDeps.discard(name) - if len(ignoredDeps) != 0: - candidates = set() - # Compute dependencies based on projects required by p - for d in sorted_deps(): - if not d.defined_java_packages().isdisjoint(p.imported_java_packages()): - candidates.add(d) - # Remove non-canonical candidates - for c in list(candidates): - candidates.difference_update(c.all_deps([], False, False)) - candidates = [d.name for d in candidates] - - abort('{0}:{1}: {2} does not use any packages defined in these projects: {3}\nComputed project dependencies: {4}'.format( - projectsFile, lineNo, p, ', '.join(ignoredDeps), ','.join(candidates))) - - out.write('project@' + m.group(1) + '@dependencies=' + ','.join(p.canonical_deps()) + '\n') - lineNo = lineNo + 1 - content = out.getvalue() - if update_file(projectsFile, content): - changedFiles += 1 - return changedFiles + + for p in s.projects: + for pkg in p.defined_java_packages(): + if not pkg.startswith(p.name): + abort('package in {0} does not have prefix matching project name: {1}'.format(p, pkg)) + + ignoredDeps = set([name for name in p.deps if project(name, False) is not None]) + for pkg in p.imported_java_packages(): + for name in p.deps: + dep = project(name, False) + if dep is None: + ignoredDeps.discard(name) + else: + if pkg in dep.defined_java_packages(): + ignoredDeps.discard(name) + if pkg in dep.extended_java_packages(): + ignoredDeps.discard(name) + if len(ignoredDeps) != 0: + candidates = set() + # Compute dependencies based on projects required by p + for d in sorted_deps(): + if not d.defined_java_packages().isdisjoint(p.imported_java_packages()): + candidates.add(d) + # Remove non-canonical candidates + for c in list(candidates): + candidates.difference_update(c.all_deps([], False, False)) + candidates = [d.name for d in candidates] + + abort('{} does not use any packages defined in these projects: {}\nComputed project dependencies: {}'.format( + p, ', '.join(ignoredDeps), ','.join(candidates))) + + excess = frozenset(p.deps) - set(p.canonical_deps()) + if len(excess) != 0: + nonCanonical.append(p) + if len(nonCanonical) != 0: + for p in nonCanonical: + canonicalDeps = p.canonical_deps() + if len(canonicalDeps) != 0: + log('Canonical dependencies for project ' + p.name + ' are: [') + for d in canonicalDeps: + log(' "' + d + '",') + log(' ],') + else: + log('Canonical dependencies for project ' + p.name + ' are: []') + return len(nonCanonical) class TimeStampFile: def __init__(self, path): @@ -4952,6 +5135,7 @@ 'about': [about, ''], 'build': [build, '[options]'], 'checkstyle': [checkstyle, ''], + 'convertprojects' : [convertprojects, ''], 'canonicalizeprojects': [canonicalizeprojects, ''], 'clean': [clean, ''], 'eclipseinit': [eclipseinit, ''], diff -r 9df38e5fbed6 -r b8f54c5ec73a src/cpu/sparc/vm/c1_globals_sparc.hpp --- a/src/cpu/sparc/vm/c1_globals_sparc.hpp Fri Sep 19 09:24:16 2014 -0700 +++ b/src/cpu/sparc/vm/c1_globals_sparc.hpp Fri Sep 19 09:27:01 2014 -0700 @@ -56,6 +56,8 @@ define_pd_global(intx, NewSizeThreadIncrease, 16*K ); define_pd_global(uint64_t,MaxRAM, 1ULL*G); define_pd_global(intx, InitialCodeCacheSize, 160*K); +define_pd_global(intx, TypeProfileWidth, 0); +define_pd_global(intx, MethodProfileWidth, 0); #endif // !TIERED define_pd_global(bool, UseTypeProfile, false); diff -r 9df38e5fbed6 -r b8f54c5ec73a src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java --- a/src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java Fri Sep 19 09:24:16 2014 -0700 +++ b/src/share/tools/IdealGraphVisualizer/Difference/src/com/sun/hotspot/igv/difference/Difference.java Fri Sep 19 09:27:01 2014 -0700 @@ -41,7 +41,7 @@ public static final String VALUE_CHANGED = "changed"; public static final String VALUE_SAME = "same"; public static final String VALUE_DELETED = "deleted"; - public static final String OLD_PREFIX = "OLD_"; + public static final String NEW_PREFIX = "NEW_"; public static final String MAIN_PROPERTY = "name"; public static final double LIMIT = 100.0; public static final String[] IGNORE_PROPERTIES = new String[]{"idx", "debug_idx"}; @@ -360,7 +360,7 @@ String s = firstNode.getProperties().get(p.getName()); if (!p.getValue().equals(s)) { difference = true; - n.getProperties().setProperty(OLD_PREFIX + p.getName(), p.getValue()); + n.getProperties().setProperty(NEW_PREFIX + p.getName(), p.getValue()); } } @@ -368,7 +368,7 @@ String s = otherNode.getProperties().get(p.getName()); if (s == null && p.getValue().length() > 0) { difference = true; - n.getProperties().setProperty(OLD_PREFIX + p.getName(), ""); + n.getProperties().setProperty(NEW_PREFIX + p.getName(), ""); } } diff -r 9df38e5fbed6 -r b8f54c5ec73a src/share/vm/graal/graalRuntime.cpp --- a/src/share/vm/graal/graalRuntime.cpp Fri Sep 19 09:24:16 2014 -0700 +++ b/src/share/vm/graal/graalRuntime.cpp Fri Sep 19 09:27:01 2014 -0700 @@ -104,7 +104,7 @@ sig_bt[i++] = T_VOID; // long stakes 2 slots sig_bt[i++] = T_INT; sig_bt[i++] = T_OBJECT; - sig_bt[i++] = T_INT; // The number of actual arguments pass to the method. + sig_bt[i++] = T_INT; // The number of actual arguments passed to the method. int comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, false); diff -r 9df38e5fbed6 -r b8f54c5ec73a src/share/vm/oops/methodData.hpp --- a/src/share/vm/oops/methodData.hpp Fri Sep 19 09:24:16 2014 -0700 +++ b/src/share/vm/oops/methodData.hpp Fri Sep 19 09:27:01 2014 -0700 @@ -1910,7 +1910,7 @@ // Whole-method sticky bits and flags enum { #ifdef GRAAL - _trap_hist_limit = 18, // decoupled from Deoptimization::Reason_LIMIT + _trap_hist_limit = 19, // decoupled from Deoptimization::Reason_LIMIT #else _trap_hist_limit = 17, // decoupled from Deoptimization::Reason_LIMIT #endif